네트워크 정책을 사용한 포드 및 서비스 간 통신 제어


이 페이지에서는 GKE의 네트워크 정책 적용을 사용하여 클러스터 포드와 서비스 간 통신을 제어하는 방법을 설명합니다.

정규화된 도메인 이름(FQDN) 네트워크 정책을 사용하여 클러스터 외부의 엔드포인트 또는 서비스에 대한 포드의 이그레스 트래픽을 제어할 수도 있습니다. 자세한 내용은 FQDN을 사용하여 포드와 서비스 간 통신 제어를 참조하세요.

GKE 네트워크 정책 시행 정보

네트워크 정책 적용을 통해 클러스터에서 Kubernetes 네트워크 정책을 만들 수 있습니다. 기본적으로 클러스터 내의 모든 포드는 서로 자유롭게 통신할 수 있습니다. 네트워크 정책은 클러스터 내에서 서로 액세스할 수 있는 포드와 서비스를 결정하는 포드 수준 방화벽 규칙을 만듭니다.

네트워크 정책을 정의하면 클러스터가 다중 수준의 애플리케이션을 제공할 때 심층 방어와 같은 기능을 지원하는 데 도움이 됩니다. 예를 들어 애플리케이션에서 손상된 프런트엔드 서비스가 여러 수준 아래의 청구 또는 회계 서비스와 직접 통신할 수 없도록 네트워크 정책을 만들 수 있습니다.

네트워크 정책은 또한 애플리케이션이 여러 사용자의 데이터를 동시에 쉽게 호스팅할 수 있게 해줍니다. 예를 들어 네임스페이스당 테넌트 모델을 정의해서 보안 다중 테넌시를 제공할 수 있습니다. 이러한 모델에서 네트워크 정책 규칙을 활용하면 특정 네임스페이스의 포드 및 서비스가 다른 네임스페이스의 포드 또는 서비스에 액세스하는 것을 방지할 수 있습니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

요구사항 및 제한사항

다음 요구사항 및 제한사항은 Autopilot 및 Standard 클러스터에 모두 적용됩니다. 다음 요구사항 및 제한사항은 Standard 클러스터에만 적용됩니다.

  • GKE용 워크로드 아이덴티티 제휴가 포함된 네트워크 정책을 사용하는 경우 메타데이터 서버에 대해 이그레스를 허용해야 합니다.
  • 네트워크 정책 적용을 사용 설정하면 kube-system 프로세스의 메모리 사용량이 약 128MB 늘어나며 CPU가 약 300밀리코어 필요합니다. 즉, 기존 클러스터에 대한 네트워크 정책을 사용 설정한 경우 예약된 워크로드를 계속 실행하려면 클러스터 크기를 늘려야 할 수 있습니다.
  • 네트워크 정책 적용을 사용 설정하려면 노드를 다시 만들어야 합니다. 클러스터에 활성 유지보수 기간이 포함된 경우 다음 유지보수 기간까지 노드가 자동으로 다시 생성되지 않습니다. 필요한 경우 언제든지 수동으로 클러스터를 업그레이드할 수 있습니다.
  • 네트워크 정책 적용을 실행하기 위해 필요한 최소 클러스터 크기는 e2-medium 인스턴스 3개 또는 할당 가능한 vCPU가 1개 이상인 머신 유형 인스턴스 1개입니다. 자세한 내용은 GKE 알려진 문제를 참고하세요.
  • 네트워크 정책은 노드가 f1-micro 또는 g1-small 인스턴스인 클러스터에 지원되지 않습니다. 리소스 요구사항이 너무 높기 때문입니다.

노드 머신 유형 및 할당 가능한 리소스에 대한 자세한 내용은 표준 클러스터 아키텍처 - 노드를 참조하세요.

네트워크 정책 적용 사용 설정

네트워크 정책 적용은 기본적으로 Autopilot 클러스터에 사용 설정되므로 네트워크 정책 만들기로 건너뛰어도 됩니다.

gcloud CLI, Google Cloud 콘솔 또는 GKE API를 사용하여 Standard에서 네트워크 정책 적용을 사용 설정할 수 있습니다.

네트워크 정책 적용은 GKE Dataplane V2를 기준으로 빌드되었습니다. GKE Dataplane V2를 사용하는 클러스터에서는 네트워크 정책 적용을 사용 설정할 필요가 없습니다.

이 변경사항을 적용하려면 노드를 다시 만들어야 하므로 실행 중인 워크로드가 중단될 수 있습니다. 이 특정 변경사항에 관한 자세한 내용은 노드 업그레이드 전략을 사용하고 유지보수 정책을 준수하여 노드를 다시 만드는 수동 변경사항 표에서 해당 행을 찾으세요. 노드 업데이트에 대한 자세한 내용은 노드 업데이트 중단 계획을 참고하세요.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 새 클러스터를 만들 때 네트워크 정책 적용을 사용 설정하려면 다음 명령어를 실행합니다.

    gcloud container clusters create CLUSTER_NAME --enable-network-policy
    

    CLUSTER_NAME을 새 클러스터 이름으로 바꿉니다.

    기존 클러스터에 네트워크 정책 적용을 사용 설정하려면 다음 태스크를 수행합니다.

    1. 다음 명령어를 실행하여 부가기능을 사용 설정합니다.

      gcloud container clusters update CLUSTER_NAME --update-addons=NetworkPolicy=ENABLED
      

      CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

    2. 다음 명령어를 실행하여 클러스터에 네트워크 정책 적용을 사용 설정하고 사용 설정된 네트워크 정책 적용을 사용하여 클러스터의 노드 풀을 다시 만듭니다.

      gcloud container clusters update CLUSTER_NAME --enable-network-policy
      

콘솔

새 클러스터를 만들 때 네트워크 정책 적용을 사용 설정하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 만들기를 클릭합니다.

  3. 클러스터 만들기 대화상자에서 GKE Standard의 경우 구성을 클릭합니다.

  4. 선택한 대로 클러스터를 구성합니다.

  5. 탐색창의 클러스터에서 네트워킹을 클릭합니다.

  6. 네트워크 정책 사용 체크박스를 선택합니다.

  7. 만들기를 클릭합니다.

기존 클러스터의 경우 네트워크 정책 적용을 사용 설정하려면 다음과 같이 진행합니다.

  1. Google Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 네트워킹네트워크 정책 필드에서 네트워크 정책 수정을 클릭합니다.

  4. 마스터의 네트워크 정책 사용 설정 체크박스를 선택하고 변경사항 저장을 클릭합니다.

  5. 변경사항이 적용될 때까지 기다린 다음 네트워크 정책 수정을 다시 클릭합니다.

  6. 노드의 네트워크 정책 사용 설정 체크박스를 선택합니다.

  7. 변경사항 저장을 클릭합니다.

API

네트워크 정책 적용을 사용하려면 다음 작업을 수행합니다.

  1. projects.zones.clusters.create 또는 projects.zones.clusters.update에 제공하는 cluster 객체에서 networkPolicy 객체를 지정합니다.

  2. networkPolicy 객체에는 사용할 네트워크 정책 공급자를 지정하는 열거형과 네트워크 정책 사용 설정 여부를 지정하는 부울이 필요합니다. 네트워크 정책을 사용 설정했지만 공급자를 설정하지 않으면 createupdate 명령어가 오류를 반환합니다.

Standard 클러스터의 네트워크 정책 적용 중지

gcloud CLI, Google Cloud 콘솔 또는 GKE API를 사용하여 네트워크 정책 적용을 중지할 수 있습니다. GKE Dataplane V2를 사용하는 Autopilot 클러스터 또는 클러스터에서 네트워크 정책 적용을 사용 중지할 수 없습니다.

이 변경사항을 적용하려면 노드를 다시 만들어야 하므로 실행 중인 워크로드가 중단될 수 있습니다. 이 특정 변경사항에 관한 자세한 내용은 노드 업그레이드 전략을 사용하고 유지보수 정책을 준수하여 노드를 다시 만드는 수동 변경사항 표에서 해당 행을 찾으세요. 노드 업데이트에 대한 자세한 내용은 노드 업데이트 중단 계획을 참고하세요.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 네트워크 정책 시행을 중지하려면 다음 작업을 수행합니다.

    1. 클러스터에서 네트워크 정책 시행을 사용 중지합니다.
    gcloud container clusters update CLUSTER_NAME --no-enable-network-policy
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

    이 명령어를 실행하면 GKE에서 네트워크 정책 시행이 사용 중지된 상태로 클러스터 노드 풀을 다시 만듭니다.

  3. 모든 노드가 다시 생성되었는지 확인합니다.

    kubectl get nodes -l projectcalico.org/ds-ready=true
    

    작업이 성공하면 출력은 다음과 비슷합니다.

    No resources found
    

    출력이 다음과 유사하면 GKE에서 노드 풀 업데이트를 완료할 때까지 기다려야 합니다.

    NAME                                             STATUS                     ROLES    AGE     VERSION
    gke-calico-cluster2-default-pool-bd997d68-pgqn   Ready,SchedulingDisabled   <none>   15m     v1.22.10-gke.600
    gke-calico-cluster2-np2-c4331149-2mmz            Ready                      <none>   6m58s   v1.22.10-gke.600
    

    네트워크 정책 시행을 사용 중지할 때 클러스터에 유지보수 기간 또는 제외가 구성되어 있으면 GKE가 노드를 즉시 업데이트하지 못할 수 있습니다. 자세한 내용은 클러스터 업데이트 속도가 느림을 참조하세요.

  4. 모든 노드가 다시 생성되면 부가기능을 사용 중지합니다.

    gcloud container clusters update CLUSTER_NAME --update-addons=NetworkPolicy=DISABLED
    

콘솔

기존 클러스터에 네트워크 정책 적용을 중지하려면 다음을 수행합니다.

  1. Google Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 네트워킹네트워크 정책 필드에서 네트워크 정책 수정을 클릭합니다.

  4. 노드의 네트워크 정책 사용 설정 체크박스를 선택 취소하고 변경사항 저장을 클릭합니다.

  5. 변경사항이 적용될 때까지 기다린 다음 네트워크 정책 수정을 다시 클릭합니다.

  6. 마스터의 네트워크 정책 사용 설정 체크박스를 선택 취소합니다.

  7. 변경사항 저장을 클릭합니다.

API

기존 클러스터에 네트워크 정책 적용을 중지하려면 다음을 수행합니다.

  1. setNetworkPolicy API를 사용하여 networkPolicy.enabled: false를 사용하도록 클러스터를 업데이트합니다.

  2. gcloud CLI를 사용하여 모든 노드가 다시 생성되었는지 확인합니다.

    kubectl get nodes -l projectcalico.org/ds-ready=true
    

    작업이 성공하면 출력은 다음과 비슷합니다.

    No resources found
    

    출력이 다음과 유사하면 GKE에서 노드 풀 업데이트를 완료할 때까지 기다려야 합니다.

    NAME                                             STATUS                     ROLES    AGE     VERSION
    gke-calico-cluster2-default-pool-bd997d68-pgqn   Ready,SchedulingDisabled   <none>   15m     v1.22.10-gke.600
    gke-calico-cluster2-np2-c4331149-2mmz            Ready                      <none>   6m58s   v1.22.10-gke.600
    

    네트워크 정책 시행을 사용 중지할 때 클러스터에 유지보수 기간 또는 제외가 구성되어 있으면 GKE가 노드를 즉시 업데이트하지 못할 수 있습니다. 자세한 내용은 클러스터 업데이트 속도가 느림을 참조하세요.

  3. updateCluster API를 사용하여 update.desiredAddonsConfig.NetworkPolicyConfig.disabled: true를 사용하도록 클러스터를 업데이트합니다.

네트워크 정책 만들기

Kubernetes Network Policy API를 사용하여 네트워크 정책을 만들 수 있습니다.

네트워크 정책 만들기에 대한 자세한 내용은 Kubernetes 문서에서 다음 항목을 참조하세요.

GKE용 네트워크 정책 및 워크로드 아이덴티티 제휴

GKE용 워크로드 아이덴티티 제휴에서 네트워크 정책을 사용하는 경우 포드가 GKE 메타데이터 서버와 통신할 수 있도록 다음 IP 주소에 대한 이그레스를 허용해야 합니다.

  • GKE 버전 1.21.0-gke.1000 이상을 실행하는 클러스터의 경우 포트 988169.254.169.252/32에 대한 이그레스를 허용합니다.
  • 1.21.0-gke.1000 이전 GKE 버전을 실행하는 클러스터의 경우 포트 988127.0.0.1/32에 대한 이그레스를 허용합니다.
  • GKE Dataplane V2를 실행하는 클러스터의 경우 포트 80169.254.169.254/32에 대한 이그레스를 허용합니다.

이러한 IP 주소 및 포트에 대한 이그레스를 허용하지 않으면 자동 업그레이드 중에 중단이 발생할 수 있습니다.

Calico에서 GKE Dataplane V2로 마이그레이션

Calico에서 GKE Dataplane V2로 네트워크 정책을 마이그레이션하려면 다음 제한사항을 고려하세요.

  • NetworkPolicy 매니페스트의 ipBlock.cidr 필드에서 포드 또는 서비스 IP 주소를 사용할 수 없습니다. 라벨을 사용하여 워크로드를 참조해야 합니다. 예를 들어 다음 구성은 부적합합니다.

    - ipBlock:
        cidr: 10.8.0.6/32
    
  • NetworkPolicy 매니페스트에서 빈 ports.port 필드를 지정할 수 없습니다. 프로토콜을 지정하는 경우 포트도 지정해야 합니다. 예를 들어 다음 구성은 부적합합니다.

    ingress:
    - ports:
      - protocol: TCP
    

애플리케이션 부하 분산기 작업

서비스에 인그레스를 적용하여 애플리케이션 부하 분산기를 구축한 경우 적절한 애플리케이션 부하 분산기 상태 점검 IP 범위를 허용하도록 해당 서비스 뒤의 포드에 적용되는 네트워크 정책을 구성해야 합니다. 내부 애플리케이션 부하 분산기를 사용하는 경우 네트워크 정책도 프록시 전용 서브넷을 허용하도록 구성해야 합니다.

네트워크 엔드포인트 그룹과 함께 컨테이너 기반 부하 분산을 사용하지 않는 경우 서비스의 노드 포트는 연결을 다른 노드의 포드로 전달할 수 있습니다. 전달을 방지하려면 서비스 정의에서 externalTrafficPolicyLocal로 설정합니다. externalTrafficPolicyLocal로 설정하지 않은 경우 네트워크 정책은 클러스터의 다른 노드 IP에서도 연결을 허용해야 합니다.

ipBlock 규칙에 포드 IP 범위 포함

특정 포드의 트래픽을 제어하려면 항상 NetworkPolicy 인그레스 또는 이그레스 규칙에 namespaceSelectorpodSelector 필드를 사용해서 해당 네임스페이스 또는 포드 라벨에 따라 포드를 선택합니다. ipBlock.cidr 필드를 사용해서 의도적으로 포드 IP 주소 범위를 선택하지 마세요. 이러한 주소는 본질적으로 일시적입니다. Kubernetes 프로젝트는 포드 IP 주소 범위를 포함할 때 ipBlock.cidr 필드의 동작을 명시적으로 정의하지 않습니다. 0.0.0.0/0과 같이 포드 IP 주소 범위를 포함하는 포괄적인 CIDR 범위를 이 필드에 지정하면 다른 NetworkPolicy 구현에서 예기치 않은 결과가 발생할 수 있습니다.

다음 섹션에서는 GKE의 여러 다른 NetworkPolicy 구현에서 사용자가 ipBlock.cidr 필드에 지정한 IP 주소 범위가 평가되는 방식과 이것이 포괄적인 CIDR 범위에 내재적으로 포함된 포드 IP 주소 범위에 미칠 수 있는 영향에 대해 설명합니다. 각 구현 간의 서로 다른 동작을 이해하면 다른 구현으로 마이그레이션할 때 결과를 미리 준비하는 데 도움이 됩니다.

GKE Dataplane V2의 ipBlock 동작

NetworkPolicy의 GKE Dataplane V2 구현에서 포드 트래픽에는 ipBlock 규칙이 적용되지 않습니다. 따라서 cidr: '0.0.0.0/0'과 같이 포괄적인 규칙을 정의하더라도 포드 트래픽을 포함하지 않습니다. 이 방식은 포드 트래픽을 허용하지 않고도 네임스페이스의 포드가 인터넷에서 트래픽을 수신하도록 허용하므로 유용합니다. 또한 포드 트래픽을 포함하려면 NetworkPolicy의 인그레스 또는 이그레스 규칙 정의에서 추가적인 포드 또는 네임스페이스 선택자를 사용해서 포드를 명시적으로 선택합니다.

Calico의 ipBlock 동작

NetworkPolicy의 Calico 구현에서는 ipBlock 규칙이 포드 트래픽에 적용됩니다. 이 구현에서 포드 트래픽을 허용하지 않고 포괄적인 CIDR 범위를 구성하려면 다음 예시에서와 같이 클러스터의 포드 CIDR 범위를 명시적으로 제외합니다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-non-pod-traffic
spec:
  ingress:
  - from:
    - ipBlock:
      cidr: '0.0.0.0/0'
      except: ['POD_IP_RANGE']

이 예시에서 POD_IP_RANGE는 클러스터의 포드 IPv4 주소 범위입니다(예: 10.95.0.0/17). IP 범위가 여러 개 있으면 배열에 개별적으로 포함될 수 있습니다(예: ['10.95.0.0/17', '10.108.128.0/17']).

문제 해결

포드가 Private Service Connect를 사용하는 클러스터의 제어 영역과 통신할 수 없음

Private Service Connect를 사용하는 GKE 클러스터의 포드는 제어 영역의 내부 IP 주소에 대한 포드 이그레스가 이그레스 네트워크 정책에서 제한되는 경우 제어 영역과의 통신 문제가 발생할 수 있습니다.

이러한 문제를 방지하는 대책은 다음과 같습니다.

  1. 클러스터에서 Private Service Connect를 사용하는지 확인합니다. Private Service Connect를 사용하는 클러스터에서 서브넷을 만들 때 master-ipv4-cidr 플래그를 사용하면 GKE는 master-ipv4-cidr에서 정의한 값에서 각 컨트롤 플레인에 내부 IP 주소를 할당합니다. 그렇지 않으면 GKE는 클러스터 노드 서브넷을 사용하여 각 컨트롤 플레인에 내부 IP 주소를 할당합니다.

  2. 제어 영역의 내부 IP 주소로 들어오는 트래픽을 허용하도록 클러스터의 이그레스 정책을 구성합니다.

    제어 영역의 내부 IP 주소를 찾으려면 다음 안내를 따르세요.

    gcloud

    privateEndpoint를 찾으려면 다음 명령어를 실행합니다.

    gcloud container clusters describe CLUSTER_NAME
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

    이 명령어는 지정된 클러스터의 privateEndpoint를 검색합니다.

    콘솔

    1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

      Google Kubernetes Engine으로 이동

    2. 탐색창의 클러스터에서 내부 IP 주소를 찾으려는 클러스터를 클릭합니다.

    3. 클러스터 기본사항에서 내부 IP 주소가 나열된 Internal endpoint로 이동합니다.

    privateEndpoint 또는 Internal endpoint를 찾을 수 있으면 클러스터의 이그레스 정책을 구성하여 제어 영역의 내부 IP 주소로 들어오는 트래픽을 허용합니다. 자세한 내용은 네트워크 정책 만들기를 참조하세요.

클러스터 업데이트 속도가 느림

기존 클러스터에서 네트워크 정책 시행을 사용 설정하거나 사용 중지하면 클러스터에 유지보수 기간 또는 유지보수 제외가 구성된 경우 GKE가 노드를 즉시 업데이트하지 못할 수 있습니다.

--cluster-version 플래그를 제어 영역에서 실행 중인 GKE 버전과 동일하게 설정하여 노드 풀을 수동으로 업그레이드할 수 있습니다. 이 작업을 수행하려면 Google Cloud CLI를 사용해야 합니다. 자세한 내용은 유지보수 기간 주의사항을 참고하세요.

수동으로 배포된 포드가 예약되지 않음

기존 클러스터의 제어 영역에서 네트워크 정책 적용을 사용 설정하면 GKE에서 개발자가 수동으로 배포한 ip-masquerade-agent 또는 calico 노드 포드를 예약 취소합니다.

GKE는 클러스터 노드에서 네트워크 정책 적용이 사용 설정되고 노드가 다시 생성될 때까지 이러한 포드를 다시 예약하지 않습니다.

유지보수 기간 또는 유지보수 제외를 구성한 경우 이로 인해 중단이 연장될 수 있습니다.

이 중단 기간을 최소화하려면 다음 라벨을 수동으로 클러스터 노드에 할당하면 됩니다.

  • node.kubernetes.io/masq-agent-ds-ready=true
  • projectcalico.org/ds-ready=true

네트워크 정책이 적용되지 않음

NetworkPolicy가 적용되지 않는 경우 다음 단계에 따라 문제를 해결할 수 있습니다.

  1. 네트워크 정책 적용이 사용 설정되어 있는지 확인합니다. 사용하는 명령어는 클러스터에 GKE Dataplane V2가 사용 설정되었는지 여부에 따라 다릅니다.

    클러스터에 GKE Dataplane V2가 사용 설정된 경우 다음 명령어를 실행합니다.

    kubectl -n kube-system get pods -l k8s-app=cilium
    

    출력이 비어 있으면 네트워크 정책 적용이 사용 설정되지 않은 것입니다.

    클러스터에 GKE Dataplane V2가 사용 설정되지 않은 경우 다음 명령어를 실행합니다.

    kubectl get nodes -l projectcalico.org/ds-ready=true
    

    출력이 비어 있으면 네트워크 정책 적용이 사용 설정되지 않은 것입니다.

  2. 포드 라벨을 확인합니다.

    kubectl describe pod POD_NAME
    

    POD_NAME을 포드의 이름으로 바꿉니다.

    출력은 다음과 비슷합니다.

    Labels:        app=store
                   pod-template-hash=64d9d4f554
                   version=v1
    
  3. 정책의 라벨이 포드의 라벨과 일치하는지 확인합니다.

    kubectl describe networkpolicy
    

    출력은 다음과 비슷합니다.

    PodSelector: app=store
    

    이 출력에서 app=store 라벨은 이전 단계의 app=store 라벨과 일치합니다.

  4. 워크로드를 선택하는 네트워크 정책이 있는지 확인합니다.

    kubectl get networkpolicy
    

    출력이 비어 있으면 네임스페이스에 NetworkPolicy가 생성되지 않았고 워크로드가 선택되지 않은 것입니다. 출력이 비어 있지 않으면 정책에서 워크로드를 선택하는지 확인합니다.

    kubectl describe networkpolicy
    

    출력은 다음과 비슷합니다.

    ...
    PodSelector:     app=nginx
    Allowing ingress traffic:
       To Port: <any> (traffic allowed to all ports)
       From:
          PodSelector: app=store
    Not affecting egress traffic
    Policy Types: Ingress
    

알려진 문제

Calico를 사용한 StatefulSet 포드 종료

Calico 네트워크 정책이 사용 설정된 GKE 클러스터는 포드가 삭제될 때 StatefulSet 포드가 기존 연결을 삭제하는 문제가 발생할 수 있습니다. 포드가 Terminating 상태로 들어가면 포드 사양의 terminationGracePeriodSeconds 구성이 적용되지 않고 StatefulSet 포드가 있는 기존 연결을 포함하는 다른 애플리케이션에 중단이 발생합니다. 이 문제에 대한 자세한 내용은 Calico 문제 #4710을 참조하세요.

이 문제는 다음 GKE 버전에 영향을 줍니다.

  • 1.18
  • 1.19 ~ 1.19.16-gke.99
  • 1.20~1.20.11-gke.1299
  • 1.21~1.21.4-gke.1499

이 문제를 완화하려면 GKE 제어 영역을 다음 버전 중 하나로 업그레이드합니다.

  • 1.19.16-gke.100 이상
  • 1.20.11-gke.1300 이상
  • 1.21.4-gke.1500 이상

포드가 containerCreating 상태로 멈춤

Calico 네트워크 정책이 사용 설정된 GKE 클러스터는 포드가 containerCreating 상태로 멈춰 있는 문제를 경험할 수 있습니다.

포드 이벤트 탭에 다음과 유사한 메시지가 표시됩니다.

plugin type="calico" failed (add): ipAddrs is not compatible with
configured IPAM: host-local

이 문제를 완화하려면 GKE 클러스터에서 calico-ipam 대신 Calico에 host-local ipam을 사용합니다.

다음 단계