[CKA] Ingress와 NetworkPolicy 실습
경로 기반 Ingress와 selector 기반 NetworkPolicy를 작성하고 확인하는 방법을 정리합니다.
Ingress는 HTTP 경로를 Service로 연결하고, NetworkPolicy는 선택한 Pod에 허용할 트래픽을 정의합니다.
경로 기반 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
ingressClassName: <ingress-class>
rules:
- http:
paths:
- path: /shop
pathType: Prefix
backend:
service:
name: shop-service
port:
number: 80
- path: /login
pathType: Prefix
backend:
service:
name: login-service
port:
number: 80
Ingress Controller가 설치되어 있어야 규칙이 실제 트래픽에 적용됩니다. 먼저 kubectl get ingressclass로 실제 클래스 이름을 확인해 ingressClassName에 지정합니다. 이 필드를 생략하려면 클러스터에 기본 IngressClass가 지정되어 있어야 합니다.
backend Service 이름과 port를 확인한 뒤 controller의 주소로 각 경로를 시험합니다. 자세한 class 선택 규칙은 Ingress 공식 문서에서 확인할 수 있습니다.
NetworkPolicy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 80
같은 from 배열의 namespace selector와 pod selector는 각각 독립된 허용 조건입니다. 특정 namespace 안의 특정 Pod만 허용하려면 두 selector를 같은 peer 항목에 둡니다.
kubectl apply -f policy.yaml
kubectl describe networkpolicy allow-frontend -n default
적용 전에는 대상 Pod label과 namespace label을 확인하며, CNI가 NetworkPolicy를 지원해야 합니다. 기준 문서는 NetworkPolicy입니다.