이 페이지에서는 기출 문제 중 네트워크 관련 문제를 다룬다.
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 [네트워킹] | 데인트리 라이브러리
내용에 오류가 있거나 질문이 있으면 댓글로 소통해주세요
언제나 환영합니다
'쿠버네티스 > CKA 자격증' 카테고리의 다른 글
[쿠버네티스] CKA 기출 자료_4 [PV, PVC] | 데인트리 라이브러리 (0) | 2021.07.20 |
---|---|
[쿠버네티스] CKA 기출 자료_3 [파드, 디플로이먼트] | 데인트리 라이브러리 (0) | 2021.07.06 |
[쿠버네티스] CKA 기출 자료_2 [클러스터 업그레이드, 백업] | 데인트리 라이브러리 (0) | 2021.06.26 |
[쿠버네티스] CKA 기출 자료_1 [RBAC, Node] | 데인트리 라이브러리 (3) | 2021.06.13 |
[쿠버네티스] CKA 자격 시험 접수 및 후기 (202105) | 데인트리 라이브러리 (2) | 2021.05.23 |
댓글