클러스터 네트워크 정책 만들기

이 페이지에서는 Google Kubernetes Engine(GKE)에서 네트워크 정책 적용을 구성하는 방법을 설명합니다. GKE 네트워킹에 대한 일반적인 정보는 네트워크 개요를 참조하세요.

개요

GKE의 네트워크 정책 적용을 사용하여 클러스터의 Pod와 서비스 간의 통신을 제어할 수 있습니다. Kubernetes Network Policy API를 사용하여 Pod 수준 방화벽 규칙을 만들어 네트워크 정책을 정의합니다. 이러한 방화벽 규칙은 클러스터 내에서 서로 액세스할 수 있는 Pod와 서비스를 결정합니다.

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

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

시작하기 전에

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

다음 방법 중 하나를 사용하여 기본 gcloud 설정을 진행합니다.

  • gcloud init를 사용하여 기본값 설정 과정을 진행합니다.
  • gcloud config를 사용하여 프로젝트 ID, 영역, 리전을 개별적으로 설정합니다.

gcloud init 사용

One of [--zone, --region] must be supplied: Please specify location 오류가 표시되면 이 섹션을 완료합니다.

  1. gcloud init를 실행하고 다음 안내를 따르세요.

    gcloud init

    원격 서버에서 SSH를 사용하는 경우 --console-only 플래그를 사용하여 다음 명령어로 브라우저를 실행하지 못하게 할 수 있습니다.

    gcloud init --console-only
  2. 안내를 따라 gcloud에서 Google Cloud 계정을 사용하도록 승인합니다.
  3. 새 구성을 만들거나 기존 구성을 선택합니다.
  4. Google Cloud 프로젝트를 선택합니다.
  5. 기본 Compute Engine 영역을 선택합니다.

gcloud config 사용

  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project project-id
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone compute-zone
  • 리전 클러스터를 사용하는 경우 기본 컴퓨팅 리전을 설정합니다.
    gcloud config set compute/region compute-region
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

네트워크 정책 적용 사용

GKE 클러스터를 만들 때 네트워크 정책 적용을 사용 설정하거나 기존 클러스터에 사용 설정할 수 있습니다. 또한 기존 클러스터의 네트워크 정책을 중지할 수 있습니다.

클러스터에서 네트워크 정책을 사용 설정하면 Kubernetes Network Policy API를 사용하여 네트워크 정책을 만들 수 있습니다.

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

GKE 클러스터에서 네트워크 정책 적용을 사용 설정하면 GKE는 클러스터 내에서 네트워크 정책을 관리 및 적용합니다.

gcloud 도구, Google Cloud Console 또는 GKE REST API를 사용하여 GKE에서 네트워크 정책 적용을 사용 설정할 수 있습니다.

gcloud

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

gcloud container clusters create cluster-name --enable-network-policy

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

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

    gcloud container clusters update cluster-name --update-addons=NetworkPolicy=ENABLED
  2. 다음 명령어를 실행하여 클러스터에 네트워크 정책 적용을 사용 설정하고 사용 설정된 네트워크 정책 적용을 사용하여 클러스터의 노드 풀을 다시 만듭니다.

    gcloud container clusters update cluster-name --enable-network-policy

Console

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

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터 만들기 버튼을 클릭합니다.

  3. 원하는 대로 클러스터를 구성합니다.

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

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

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

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

  1. 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 명령어가 오류를 반환합니다.

네트워크 정책 적용 중지

gcloud 도구, Google Cloud Console 또는 GKE API를 사용하여 네트워크 정책 적용을 중지할 수 있습니다.

gcloud

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

gcloud container clusters update cluster-name --no-enable-network-policy

Console

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

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터의 수정 버튼(연필 모양)을 클릭합니다.

  3. 노드의 네트워크 정책 드롭다운 메뉴에서 사용 중지됨을 선택합니다.

  4. 저장을 클릭합니다. 그런 후 수정을 다시 클릭합니다.

  5. 마스터의 네트워크 정책 드롭다운 메뉴에서 사용 중지됨을 선택합니다.

  6. 저장을 클릭합니다.

API

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

  1. projects.zones.clusters.update에 제공하는 cluster 객체 내에서 networkPolicy 객체를 지정합니다.
  2. networkPolicy 객체 내에서 부울 enabled 값을 false로 설정합니다.

네트워크 정책 시행을 사용 중지하는 경우 부가기능(예: Calico DaemonSet)도 업데이트하여 부가기능에 대해 네트워크 정책이 사용 중지되었음을 나타내야 합니다.

gcloud container clusters update cluster-name --update-addons=NetworkPolicy=DISABLED

네트워크 정책 만들기

클러스터에 네트워크 정책 적용을 사용 설정한 후에는 실제 네트워크 정책을 정의해야 합니다. Kubernetes Network Policy API를 사용하여 네트워크 정책을 정의합니다.

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

PodSecurityPolicy 작업

NetworkPolicy를 사용하고 있고 PodSecurityPolicy가 적용되는 Pod가 있으면 PodSecurityPolicy를 사용할 권한이 있는 RBAC Role 또는 ClusterRole을 만듭니다. 그런 다음 Pod의 서비스 계정에 Role 또는 ClusterRole을 결합합니다. NetworkPolicy와 PodSecurityPolicy를 함께 사용 중인 경우 사용자 계정에 권한을 부여하는 것만으로는 충분하지 않습니다. 역할을 서비스 계정에 결합해야 합니다. 자세한 내용은 정책 승인을 참조하세요.

일시적으로 네트워크 정책 재정의

문제 발생 또는 특별한 상황에서는 클러스터에 네트워크 정책 적용을 일시적으로 중지할 수 있습니다.

오버헤드, 제한사항, 주의사항

  • 네트워크 정책 적용을 사용 설정하면 노드에서 추가 리소스가 소비됩니다. 특히 kube-system 프로세스의 메모리 공간이 약 128MB 정도 늘어나며 CPU가 약 300 밀리코어 필요합니다.

  • 네트워크 정책 적용을 사용 설정하려면 노드를 다시 만들어야 합니다. 클러스터에 활성 유지보수 기간이 포함된 경우 다음 유지보수 기간까지 노드가 자동으로 다시 생성되지 않습니다. 필요한 경우 언제든지 수동으로 클러스터를 업그레이드할 수 있습니다.

제한사항 및 요구사항

  • 클러스터에 n1-standard-1 유형 이상의 노드가 2개 이상 있어야 합니다. 네트워크 정책 적용을 실행하기 위해 권장되는 최소 크기 클러스터는 3개의 n1-standard-1 인스턴스입니다.
  • 네트워크 정책은 해당 노드가 f1-micro 또는 g1-small 인스턴스인 클러스터에 지원되지 않습니다. 이 크기의 인스턴스에 비해 리소스 요구사항이 너무 높기 때문입니다.

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

HTTP(S) 부하 분산기 상태 확인 작업

서비스에 인그레스를 적용하여 HTTP(S) 부하 분산기를 구축한 경우 해당 서비스 뒤에 있는 Pod에 적용되는 네트워크 정책은 적절한 HTTP(S) 부하 분산기 프로브 IP 범위를 허용해야 합니다.

또한 서비스의 노드 포트는 연결을 다른 노드의 Pod로 전달할 수 있습니다. 전달을 방지하려면 서비스 정의에서 externalTrafficPolicy를 'Local'로 설정하세요. externalTrafficPolicyLocal로 설정하지 않은 경우 네트워크 정책은 클러스터의 다른 노드 IP에서도 연결을 허용해야 합니다.

컨테이너 기본 부하 분산 및 네트워크 엔드포인트 그룹을 사용하는 경우에는 이 내용이 적용되지 않습니다.

다음 단계