본문 바로가기
쿠버네티스/CKA 자격증

[쿠버네티스] CKA 기출 자료_5 [네트워킹] | 데인트리 라이브러리

by 데인트리 2021. 7. 20.

 

 

이 페이지에서는 기출 문제 중 네트워크 관련 문제를 다룬다.

 

 

1. 디플로이먼트 Expose

참조 링크: https://kubernetes.io/ko/docs/tasks/access-application-cluster/service-access-application-cluster/

 

특정 디플로이먼트가 주어지고 이에 대한 서비스를 생성하는 문제이다. service YAML파일을 작성하여 생성하는 방법도 있지만, kubectl expose 명령어를 통해 간편하게 서비스를 생성할 수 있다.

 

[root@k8s-master ~]$ kubectl expose deployment hello-world --type=NodePort --name=example-service

 

2. 인그레스 생성

참조 링크: https://kubernetes.io/docs/concepts/services-networking/ingress/

 

문제에서 요구하는 조건의 인그레스 리소스를 생성해야 한다. 인그레스는 L7 스위치 역할을 논리적으로 수행하여 클러스터로 접근하는 URL 별로 다른 서비스에 트래픽을 분산한다. 아래의 인그레스 리소스 작성 예시를 보면 {클러스터도메인}/shop 으로 들어오는 패킷은 쿠버네티스 내 shopservice 서비스의 80포트로 전달하고, {클러스터도메인}/login 으로 들어오는 패킷은 loginservice로 전달한다.

# [작성 예시]
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /shop
        pathType: Prefix
        backend:
          service:
            name: shopservice
            port:
              number: 80
      - path: /login
        pathType: Prefix
        backend:
          service:
            name: loginservice
            port:
              number: 80

# 템플릿
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: {문제에서주어지는경로}
        pathType: Prefix
        backend:
          service:
            name: {문제에서주어지는서비스명}
            port:
              number: {문제에서주어지는포트}

 

3. NetworkPolicy 생성

참조 링크: https://kubernetes.io/docs/concepts/services-networking/network-policies/

 

쿠버네티스의 NetworkPolicy를 활용하면 클러스터 내 네트워크 트래픽을 제한할 수 있다. 문제의 경우 특정 네임스페이스(myns)의 특정 포트(80)에서 파드(mypod)에 오는 Ingress 트래픽을 허용해야 한다. 먼저 네임스페이스와 파드에 레이블을 붙인 후 NetworkPolicy를 생성한다.

 

# 정책 적용할 파드에 레이블링
[root@k8s-master ~]$ kubectl label pods mypod role=app

# 정책 적용할 네임스페이스에 레이블링
[root@k8s-master ~]$ kubectl label namespace myns node=accept

[root@k8s-master ~]$ cat networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: app  #<- 문제 대상 파드에 동일한 레이블이 있어야 합니다.
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          node: accept  #<- 문제 대상 노드에 동일한 레이블이 있어야 합니다.
    ports:
    - protocol: TCP
      port: 80
      
[root@k8s-master ~]$ kubectl apply -f networkpolicy.yaml

 

해당 정책이 적용된 mypod의 경우 node=accept 레이블을 가진 myns에서 80 포트로 접근하는 트래픽만 허용된다. 이러한 정책을 통해 파드간 무분별한 트래픽 교환을 방지하며, 보안성이 뛰어난 서비스를 운영할 수 있다.

 

 

 

CKA 자격증 정보 및 문제 풀이 연관 글

[쿠버네티스] CKA 자격 시험 접수 및 후기 (202105) | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_1 [RBAC, Node] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_2 [클러스터 업그레이드, 백업] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_3 [파드, 디플로이먼트] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_4 [PV, PVC] | 데인트리 라이브러리

[쿠버네티스] CKA 기출 자료_5 [네트워킹] | 데인트리 라이브러리

 

 

내용에 오류가 있거나 질문이 있으면 댓글로 소통해주세요

언제나 환영합니다

 

댓글