Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

쿠버네티스 네트워크 정책 지원

요약 주니퍼 클라우드 네이티브 Contrail Networking(CN2)을 사용하면 Contrail® 방화벽 보안 정책 프레임워크 내에서 Kubernetes 네트워크 정책을 구축할 수 있습니다. 네트워크 정책을 구축하려면 Contrail과 같이 를 지원하는 NetworkPolicyCNI를 사용해야 합니다. 이 주제에서는 클라우드 네이티브 Contrail Networking을 실행하는 환경에서 Kubernetes 네트워크 정책을 구축하는 방법에 대한 정보를 제공합니다.

Kubernetes 네트워크 정책 개요

Kubernetes 네트워크 정책을 사용하면 Pod가 다른 Pod 및 네트워크 엔드포인트와 통신하는 방법을 지정할 수 있습니다. Kubernetes NetworkPolicy 리소스를 사용하면 Pod가 다음과 통신할 수 있습니다.

  • 허용 목록에 있는 다른 Pod(Pod는 자체에 대한 액세스를 차단할 수 없음)

  • 허용 목록의 네임스페이스입니다.

  • IP 블록 또는 CIDR(Classless Inter-Domain Routing)입니다.

Kubernetes 네트워크 정책은 네임스페이스 내의 Pod에만 적용되며 수신(소스) 및 송신(대상) 규칙을 정의합니다. Kubernetes 네트워크 정책을 Pod에 적용할 때 다음과 같은 특성을 갖습니다.

  • Pod에 따라 다르며 단일 Pod 또는 Pod 그룹에 적용됩니다. 네트워크 정책 규칙은 해당 포드에 대한 트래픽을 지시합니다.

  • 수신 트래픽, 송신 트래픽 또는 둘 다에 대한 Pod의 트래픽 규칙을 정의합니다. 방향을 명시적으로 지정하지 않으면 정책이 기본적으로 수신 방향에 적용됩니다.

  • 수신 및 송신 방향에서 허용 목록의 트래픽을 지정하는 명시적 규칙을 포함해야 합니다. 허용 목록 규칙과 일치하지 않는 트래픽은 거부됩니다.

  • 허용된 트래픽에는 Pod에 적용된 네트워크 정책과 일치하는 트래픽이 포함됩니다.

Kubernetes 네트워크 정책에는 다음과 같은 추가 특성이 있습니다.

  • 포드에 적용되지 않으면 해당 포드는 모든 소스의 트래픽을 수락합니다.

  • 개별 패킷이 아닌 연결에 대한 조치를 취합니다. 예를 들어, 포드 A에서 포드 B로의 트래픽이 구성된 정책에 의해 허용되는 경우, 현재 위치에서 포드 B가 포드 A에 대한 연결을 시작하도록 허용하지 않더라도 포드 B에서 포드 A로의 패킷도 허용됩니다.

쿠버네티스 네트워크 정책은 다음 섹션으로 구성된다.

  • spec: 쿠버네티스 오브젝트의 원하는 상태를 설명한다. 네트워크 정책의 경우, podSelector 사양 내의 및 policyTypes 필드는 해당 정책에 대한 규칙을 지정합니다.

  • podSelector: 정책이 적용되는 Pod 그룹을 선택합니다. 비어 있으면 podSelector 네임스페이스의 모든 Pod가 선택됩니다.

  • policyTypes: 정책이 선택한 Pod의 수신 트래픽 또는 선택한 Pod의 송신 트래픽에 적용되는지 여부를 지정합니다. no policyTypes 를 지정하지 않으면 기본적으로 수신 방향이 선택됩니다.

  • ingress: 및 ports 섹션과 from 일치하는 수신 트래픽을 허용합니다. 다음 예제에서 수신 규칙은 app: webserver-dev 레이블이 있는 네임스페이스의 dev 모든 Pod에 대한 연결을 허용합니다.

    • 레이블 app: client1-dev이 있는 기본 네임스페이스의 모든 Pod .

    • 10.169.25.20/32 범위 내의 모든 IP 주소입니다.

    • 레이블 project: jtac이 있는 기본 네임스페이스의 모든 Pod .

  • egress: 및 ports섹션과 to 일치하는 송신 트래픽을 허용합니다. 예제 1에서 송신 규칙은 레이블 app: dbserver-dev 이 TCP 80인 기본 네임스페이스의 모든 Pod에서 포트 TCP 80에 대한 연결을 허용합니다.

  • ipBlock: 수신 소스 또는 송신 대상으로 허용할 IP CIDR 범위를 선택합니다. 네트워크 정책의 섹션에는 ipBlock 다음 두 필드가 있습니다.

    • cidr(ipBlock.cidr): 네트워크 정책은 지정된 IP 범위로의 송신 트래픽 또는 지정된 IP 범위로부터의 수신 트래픽을 허용합니다.

    • except (ipBlock.except): 쿠버네티스는 지정된 IP 범위의 트래픽이 정책과 일치하지 않을 것으로 예상한다. 네트워크 정책은 에 except지정된 IP 범위로의 수신 트래픽 또는 송신 트래픽을 거부합니다.

      참고: 네트워크 정책에서 을 사용 except 하면, 쿠버네티스는 IP 범위에서 식별된 트래픽이 except 정책과 일치하지 않을 것으로 예상한다. CN2는 용어를 사용하는 except 이 특정 시나리오를 지원하지 않습니다. 따라서 사용을 피 except하는 것이 좋습니다.

다음 NetworkPolicy 리소스 예제에서는 및 규칙을 보여 ingress 줍니다 egress .

이 예에서는 CIDR 10.169.25.20/32port: 80 IP의 수신 TCP 트래픽이 허용됩니다. 를 TCP port: 80 사용하여 matchLabels app: dbserver-dev Pod에 대한 송신 트래픽이 허용됩니다.

클라우드 네이티브 Contrail Networking에서 Kubernetes 네트워크 정책 구축

CN2에서 Kubernetes 네트워크 정책을 구성하고 구축하면 해당 정책이 Contrail에 자동으로 생성됩니다. 다음은 Kubernetes 네트워크 정책의 예입니다.

이 정책으로 인해 CN2에 다음과 같은 개체가 생성됩니다.

태그

주소 그룹

방화벽 규칙

방화벽 정책

표 1: 태그
역할 Db
네임 스페이스 기본
프로젝트 마이프로젝트
역할 프론트 엔드
표 2: 주소 그룹
이름 접두사
테스트 네트워크 정책 제외 172.17.1.0/24
테스트 네트워크 정책 172.17.0.0/16
테스트 네트워크 정책 송신 10.0.0.0/24
엔드포인트
표 3: 방화벽 규칙
규칙 이름 작업 서비스1 방향 엔드포인트2
기본 수신 테스트 네트워크 정책-0-ipBlock-0-17x.xx.1.0/24-0 거부 TCP:6379 역할 = db & & 네임 스페이스 = 기본값 진입 주소 그룹: 172.17.1.0/24
default-ingress-test-network-policy-0-ipBlock-0-cidr-17x.xx.0.0/16-0 전달 TCP:6379 역할 = db & & 네임 스페이스 = 기본값 진입 주소 그룹: 172.17.0.0/16
기본 수신 테스트 네트워크 정책 0-namespaceSelector-1-0 전달 TCP:6379 역할 = db & & 네임 스페이스 = 기본값 진입 프로젝트 = MyProject
default-ingress-test-network-policy-0-podSelector-2-0 전달 TCP:6379 역할 = db & & 네임 스페이스 = 기본값 진입 네임스페이스=기본값 && 역할=프론트엔드
기본값-송신-테스트-네트워크-정책-ipBlock-0-cidr-10.0.0.0/24-0 전달 TCP:5978 역할 = db & & 네임 스페이스 = 기본값 탈출구 주소 그룹: 10.0.0.0/24
표 4: 방화벽 정책
이름 규칙
기본 테스트 네트워크 정책

default-ingress-test-network-policy-0-ipBlock-0-172.17.1.0/24-0, default-ingress-test-network-policy-0-ipBlock-0-cidr-172.17.0.0/16-0

기본 수신 테스트 네트워크 정책 0-namespaceSelector-1-0

default-ingress-test-network-policy-0-podSelector-2-0, default-egress-test-network-policy-ipBlock-0-cidr-10.0.0.0/24-0

Kubernetes 네트워크 정책 matchExpressions

클라우드 네이티브 Contrail Networking 22.3부터 CN2는 를 통해 matchExpressionsKubernetes 네트워크 정책을 지원합니다. 에 matchExpressions대한 자세한 내용은 Kubernetes 설명서의 " 집합 기반 요구 사항을 지원하는 리소스" 를 참조하세요.