이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Kubernetes 네트워크 정책을 통해 pod 트래픽 제한
개요
기본적으로 클러스터의 포드 또는 다른 네트워크의 포드와 리소스 사이에 IP 주소, 포트 또는 연결에 대해 Kubernetes에는 제한이 없습니다. Kubernetes 네트워크 정책을 사용하여 포드에서 송수신되는 네트워크 트래픽을 제한할 수 있습니다. 자세한 내용은 쿠버네티스 문서의 네트워크 정책
표준 네트워크 정책
표준 NetworkPolicy를 사용하여 클러스터에서 포드 간 트래픽을 분할할 수 있습니다. 이러한 네트워크 정책은 OSI 네트워크 모델의 계층 3 및 4에서 작동하므로 Amazon EKS 클러스터 내 IP 주소 또는 포트 수준에서 트래픽 흐름을 제어할 수 있습니다. 표준 네트워크 정책은 네임스페이스 수준으로 범위가 지정됩니다.
사용 사례
-
워크로드 간에 네트워크 트래픽을 분할하여 관련 애플리케이션만 서로 통신할 수 있도록 보장합니다.
-
정책을 통해 네임스페이스 수준에서 테넌트를 격리하여 네트워크 분리를 적용합니다.
예제
아래 정책에서는 sun 네임스페이스의 webapp 포드에서 송신 트래픽이 제한됩니다.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: webapp-egress-policy namespace: sun spec: podSelector: matchLabels: role: webapp policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: moon podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 8080 - to: - namespaceSelector: matchLabels: name: stars podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 8080
이 정책은 sun 네임스페이스에 role: webapp 레이블이 있는 포드에 적용됩니다.
-
허용된 트래픽: TCP 포트
8080에서moon네임스페이스의role: frontend레이블이 있는 포드 -
허용된 트래픽: TCP 포트
8080에서stars네임스페이스의 role: frontend 레이블이 있는 포드 -
차단된 트래픽:
webapp포드에서의 다른 모든 아웃바운드 트래픽은 암시적으로 거부됨
관리자(또는 클러스터) 네트워크 정책
ClusterNetworkPolicy를 사용하여 전체 클러스터에 적용되는 네트워크 보안 표준을 적용할 수 있습니다. 각 네임스페이스에 대해 고유한 정책을 반복적으로 정의하고 유지하는 대신 단일 정책을 사용하여 네임스페이스에 관계없이 클러스터의 여러 워크로드에 대한 네트워크 액세스 제어를 중앙에서 관리할 수 있습니다.
사용 사례
-
EKS 클러스터의 모든 워크로드와 워크로드의 하위 집합에 대한 네트워크 액세스 제어를 중앙에서 관리합니다.
-
전체 클러스터에서 기본 네트워크 보안 태세를 정의합니다.
-
보다 운영 효율적인 방식으로 조직 보안 표준을 클러스터 범위로 확장합니다.
예제
아래 정책에서 다른 네임스페이스의 클러스터 트래픽을 명시적으로 차단하여 민감한 워크로드 네임스페이스에 대한 네트워크 액세스를 방지할 수 있습니다.
apiVersion: networking.k8s.aws/v1alpha1 kind: ClusterNetworkPolicy metadata: name: protect-sensitive-workload spec: tier: Admin priority: 10 subject: namespaces: matchLabels: kubernetes.io/metadata.name: earth ingress: - action: Deny from: - namespaces: matchLabels: {} # Match all namespaces. name: select-all-deny-all
중요 정보
Kubernetes에 대한 Amazon VPC CNI 플러그인의 네트워크 정책은 아래 낭려된 구성에서 지원됩니다.
-
표준 및 관리자 네트워크 정책 모두에 대한 Amazon VPC CNI 플러그인 버전 1.21.0 이상.
-
IPv4또는IPv6주소에 대해 구성된 클러스터. -
포드에 대한 보안 그룹과 함께 네트워크 정책을 사용할 수 있습니다. 네트워크 정책을 사용하면 클러스터 내 모든 통신을 제어할 수 있습니다. 포드용 보안 그룹을 통해 포드 내의 애플리케이션에서 AWS 서비스에 대한 액세스를 제어할 수 있습니다.
-
사용자 지정 네트워킹 및 접두사 위임에 네트워크 정책을 사용할 수 있습니다.
고려 사항
아키텍처
-
Kubernetes용 Amazon VPC CNI 플러그인 사용을 통해 클러스터에 Kubernetes 네트워크 정책을 적용할 때 Amazon EC2 Linux 노드에만 정책을 적용할 수 있습니다. Fargate 또는 Windows 노드에는 정책을 적용할 수 없습니다.
-
네트워크 정책은
IPv4또는IPv6주소만 적용하지만 둘 다 적용되지는 않습니다.IPv4클러스터에서 VPC CNI는 포드에IPv4주소를 할당하고IPv4정책을 적용합니다.IPv6클러스터에서 VPC CNI는 포드에IPv6주소를 할당하고IPv6정책을 적용합니다.IPv6클러스터에 적용된 모든IPv4네트워크 정책 규칙은 무시됩니다.IPv4클러스터에 적용된 모든IPv6네트워크 정책 규칙은 무시됩니다.
네트워크 정책
-
네트워크 정책은 배포의 일부인 포드에만 적용됩니다.
metadata.ownerReferences세트가 없는 독립 실행형 포드에는 네트워크 정책이 적용될 수 없습니다. -
여러 네트워크 정책을 동일한 포드에 적용할 수 있습니다. 동일한 포드를 선택한 둘 이상의 정책이 구성된 경우 모든 정책이 포드에 적용됩니다.
-
단일 IP 주소 범위(CIDR)에 대한 포트 및 프로토콜의 최대 조합 수는 모든 네트워크 정책에서 24개입니다.
namespaceSelector와 같은 선택기는 하나 이상의 CIDR로 확인됩니다. 여러 개의 선택기가 단일 CIDR로 확인되거나 동일하거나 다른 네트워크 정책에서 동일한 직접 CIDR을 여러 번 지정하는 경우 모두 이 제한에 포함됩니다. -
Kubernetes 서비스의 경우 서비스 포트는 컨테이너 포트와 동일해야 합니다. 이름이 지정된 포트를 사용하는 경우 서비스 사양에도 같은 이름을 사용합니다.
관리자 네트워크 정책
-
관리자 티어 정책(먼저 평가됨): 모든 관리자 티어 ClusterNetworkPolicies는 다른 정책보다 먼저 평가됩니다. 관리자 티어 내에서 정책은 우선순위에 따라 처리됩니다(가장 낮은 우선순위 번호 먼저 처리됨). 작업 유형에 따라 다음 상황이 결정됩니다.
-
거부 작업(가장 높은 우선순위): 거부 작업이 있는 관리자 정책이 트래픽과 일치하면 다른 정책에 관계없이 해당 트래픽이 즉시 차단됩니다. 추가 ClusterNetworkPolicy 또는 NetworkPolicy 규칙은 더 이상 처리되지 않습니다. 이를 통해 조직 전체의 보안 제어가 네임스페이스 수준 정책에 의해 재정의되지 않습니다.
-
허용 작업: 거부 규칙을 평가한 후 허용 작업이 있는 관리자 정책은 우선순위에 따라 처리됩니다(가장 낮은 우선순위 번호 먼저 처리됨). 허용 작업이 일치하면 트래픽이 수락되고 추가 정책 평가가 수행되지 않습니다. 이러한 정책은 레이블 선택기를 기반으로 여러 네임스페이스에 액세스 권한을 부여하여 특정 리소스에 액세스할 수 있는 워크로드를 중앙에서 제어할 수 있습니다.
-
통과 작업: 관리자 티어 정책에서 통과 작업은 의사 결정이 하위 티어로 위임합니다. 트래픽이 통과 규칙과 일치하면 평가는 해당 트래픽에 대한 나머지 모든 관리자 티어 규칙을 건너뛰고 NetworkPolicy 티어로 바로 진행합니다. 이를 통해 관리자는 특정 트래픽 패턴에 대한 제어를 애플리케이션 팀에 명시적으로 위임할 수 있습니다. 예를 들어 통과 규칙을 사용하여 외부 액세스에 대한 엄격한 제어를 유지하면서 네임스페이스 내 트래픽 관리를 네임스페이스 관리자에게 위임할 수 있습니다.
-
-
네트워크 정책 티어: 거부 또는 허용과 일치하는 관리자 티어 정책이 없거나 통과 작업이 일치하는 경우 네임스페이스 범위의 NetworkPolicy 리소스가 다음에 평가됩니다. 이러한 정책은 개별 네임스페이스 내에서 세분화된 제어를 제공하며 애플리케이션 팀이 관리합니다. 네임스페이스 범위의 정책은 관리자 정책보다 더 제한적일 수 있습니다. 관리자 정책의 거부 결정을 재정의할 수는 없지만 관리자 정책에서 허용하거나 전달하는 트래픽을 추가로 제한할 수 있습니다.
-
기준 티어 관리자 정책: 트래픽과 일치하는 관리자 또는 네임스페이스 범위의 정책이 없는 경우 기준 티어 ClusterNetworkPolicies가 평가됩니다. 이는 네임스페이스 범위의 정책으로 재정의할 수 있는 기본 보안 태세를 제공하므로 관리자는 조직 전체의 기본값을 설정하는 동시에 필요에 따라 팀에 사용자 지정할 수 있는 유연성을 제공할 수 있습니다. 기준 정책은 우선순위에 따라(가장 낮은 우선순위 번호 먼저) 평가됩니다.
-
기본 거부(정책이 일치하지 않는 경우):이러한 기본적으로 거부 동작은 명시적으로 허용된 연결만 허용되도록 보장하여 강력한 보안 태세를 유지 관리합니다.
마이그레이션
-
클러스터에서 현재 타사 솔루션을 사용하여 Kubernetes 네트워크 정책을 관리하는 경우 Kubernetes용 Amazon VPC CNI 플러그인에 동일한 정책을 사용할 수 있습니다. 하지만 동일한 정책을 관리하지 않도록 기존 솔루션을 제거해야 합니다.
주의
네트워크 정책 솔루션을 제거한 후 네트워크 정책 솔루션이 적용된 모든 노드를 교체하는 것이 좋습니다. 트래픽 규칙이 갑자기 종료될 경우 솔루션의 포드에 의해 지연될 수 있기 때문입니다.
설치.
-
네트워크 정책 기능에서
policyendpoints.networking.k8s.aws라는PolicyEndpoint사용자 지정 리소스 정의(CRD)가 생성되고 이를 사용해야 합니다.사용자 지정 참조의PolicyEndpoint개체는 Amazon EKS에서 관리합니다. 이러한 리소스를 수정하거나 삭제해서는 안 됩니다. -
인스턴스 역할 IAM 보안 인증 정보를 사용하는 포드를 실행하거나 EC2 IMDS에 연결하는 경우 EC2 IMDS에 대한 액세스를 차단하는 네트워크 정책을 주의하여 확인하세요. EC2 IMDS에 대한 액세스를 허용하려면 네트워크 정책을 추가해야 할 수도 있습니다. 자세한 내용은 Amazon EC2 사용 설명서의 인스턴스 메타데이터 및 사용자 데이터를 참조하세요.
서비스 계정에 대한 IAM 역할을 사용하는 포드 또는 EKS Pod Identity를 사용하는 포드는 EC2 IMDS에 액세스하지 않습니다.
-
Kubernetes용 Amazon VPC CNI 플러그인은 각 포드의 추가 네트워크 인터페이스에 네트워크 정책을 적용하지 않고 각 포드의 기본 인터페이스(
eth0)에만 적용합니다. 이는 다음 아키텍처에 영향을 미칩니다.-
ENABLE_V4_EGRESS변수가true로 설정된IPv6포드. 이 변수를 사용하면IPv4송신 기능을 통해 IPv6 포드를 클러스터 외부의 항목과 같이IPv4엔드포인트에 연결할 수 있습니다.IPv4송신 기능은 로컬 루프백 IPv4 주소를 사용하여 추가 네트워크 인터페이스를 생성하여 작동합니다. -
Multus와 같은 체인 네트워크 플러그인을 사용하는 경우. 이러한 플러그인은 각 포드에 네트워크 인터페이스를 추가하므로 네트워크 정책은 체인 네트워크 플러그인에 적용되지 않습니다.
-