[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입니다.