LabHub

CCA — 실리움 인증 어소시에이트 · 네트워크 정책 · 실습

기본 거부에서 L7 까지 쌓아 올리기

LabHub 에서 이어서 보기

목표

표준 NetworkPolicy 로 기본 거부와 셀렉터 기반 허용을 실제로 적용해 보고, CiliumNetworkPolicy 로만 가능한 L7·FQDN·명시적 거부를 매니페스트로 작성합니다.

왜 중요한가

네트워크 정책은 apply 가 성공했다고 해서 의도대로 동작한다는 보장이 없습니다. 특히 세 가지가 조용히 사람을 속입니다.

첫째, 방향별 독립입니다. ingress 정책만 걸어 두고 "격리했다"고 생각하면 egress 는 여전히 인터넷 전체로 열려 있습니다. 데이터 유출 경로는 대부분 egress 쪽입니다.

둘째, 셀렉터 오타는 에러가 아니라 "아무것도 선택하지 않음"으로 조용히 실패합니다. 적용 후 실제로 몇 개의 엔드포인트가 강제 상태인지 확인해야 합니다.

셋째, toFQDNs 는 DNS 규칙 없이는 영원히 매칭되지 않습니다. 이것이 Cilium 정책에서 가장 흔한 설정 실수이고, 시험에도 반복해서 나옵니다.

표준 NetworkPolicy 는 실제로 apply 하고, CiliumNetworkPolicy 는 /root/cca-policy/ 아래 파일로 작성합니다. 실습 클러스터에 Cilium CRD 가 설치돼 있지 않기 때문이며, 시험에서 요구하는 능력 역시 매니페스트를 정확히 쓰는 것입니다.

단계

1. 네임스페이스 cca-shopcca-mon 을 만들고, cca-mon 에는 라벨 tier=monitoring 을 붙이세요.
2. 네임스페이스 cca-shop 에 디플로이먼트 frontendbackend 를 각각 1 레플리카로 배포하세요. 파드 라벨은 각각 app=frontend, app=backend 이고 이미지는 nginx:1.27-alpine 입니다. 그리고 서비스 backend 를 포트 8080 으로 만드세요.
3. 네임스페이스 cca-shop 에 NetworkPolicy default-deny 를 만드세요. podSelector 는 비어 있고, policyTypes 에는 IngressEgress 를 모두 적으며, 허용 규칙은 하나도 두지 않습니다.
4. 같은 네임스페이스에 NetworkPolicy allow-frontend-to-backend 를 만드세요. podSelectorapp=backend, policyTypesIngress 하나, ingress 규칙은 podSelectorapp=frontend 인 출발지에서 포트 8080 / 프로토콜 TCP 로만 허용합니다.
5. 같은 네임스페이스에 NetworkPolicy allow-monitoring 을 만드세요. podSelectorapp=backend 이고, ingress 규칙의 from 항목은 namespaceSelectortier=monitoring 인 네임스페이스 하나만 두며 포트는 9090 입니다.
6. /root/cca-policy/cnp-l7.yaml 에 CiliumNetworkPolicy 를 작성하세요. apiVersioncilium.io/v2, metadata.namespacecca-shop, endpointSelectorapp: backend 입니다. ingress 규칙은 fromEndpointsapp: frontend 이고 toPorts 의 포트 8080/TCP 아래 rules.http 에 두 항목을 둡니다. 첫째는 method GET / path /api/v1/orders, 둘째는 method POST / path /api/v1/orders 입니다.
7. /root/cca-policy/cnp-fqdn.yaml 에 CiliumNetworkPolicy 를 작성하세요. endpointSelectorapp: frontend 이고 egress 규칙은 정확히 두 개입니다. 첫째는 toEndpointsk8s-app: kube-dns 인 대상에 포트 53/UDP 를 열고 rules.dnsmatchPattern: "*" 를 둡니다. 둘째는 toFQDNsmatchNameapi.pgprovider.example 이고 포트 443/TCP 를 엽니다.
8. /root/cca-policy/cnp-deny.yaml 에 이름이 block-metadata 인 CiliumNetworkPolicy 를 작성하세요. endpointSelector 는 비어 있고, egress 규칙에 toCIDRSet 으로 cidr: 0.0.0.0/0 을 허용하되 except169.254.169.254/32 를 두며, 추가로 egressDenytoCIDR 에도 169.254.169.254/32 를 명시하세요.

참고

단계 8개

  1. 애플리케이션과 모니터링 네임스페이스 만들기
  2. 프런트엔드와 백엔드 배포
  3. 양방향 기본 거부 만들기
  4. 파드 셀렉터로 한 경로만 열기
  5. 네임스페이스 셀렉터로 다른 네임스페이스 열기
  6. HTTP 메서드와 경로로 제한하기
  7. 도메인 이름으로 외부 API 허용하기
  8. 메타데이터 엔드포인트 봉인하기