GKE에서 네트워크 격리 맞춤설정


이 페이지에서는 클러스터를 만들거나 업데이트할 때 Google Kubernetes Engine (GKE) 클러스터의 네트워크 격리를 구성하는 방법을 설명합니다.

권장사항:

조직의 네트워크 설계자, 네트워크 관리자 또는 네트워크 아키텍처 정의, 구현, 유지보수를 담당하는 다른 네트워크 엔지니어 팀과 함께 클러스터 네트워크 격리를 계획하고 설계합니다.

클러스터 네트워크 격리 작동 방식

GKE 클러스터에서 네트워크 격리는 클러스터 구성요소에 액세스할 수 있는 사용자와 방법에 따라 다릅니다. 관리자는 다음을 관리할 수 있습니다.

  • 제어 영역 액세스: 컨트롤 플레인에 대한 외부 액세스, 제한된 액세스 또는 제한되지 않은 액세스를 맞춤설정할 수 있습니다.
  • 클러스터 네트워킹: Standard 클러스터의 노드 또는 Autopilot 클러스터의 워크로드에 액세스할 수 있는 사용자를 선택할 수 있습니다.

클러스터를 만들기 전에 다음 사항을 고려하세요.

  1. 제어 영역에 액세스할 수 있는 사용자는 누구이며 제어 영역은 어떻게 노출되나요?
  2. 노드 또는 워크로드는 어떻게 노출되나요?

이러한 질문에 답변하려면 네트워크 격리 정보의 계획 및 설계 가이드라인을 따르세요.

제한 및 한도

기본적으로 GKE는 클러스터를 VPC 기반 클러스터로 만듭니다. VPC 기반 클러스터는 기존 네트워크를 지원하지 않습니다.

다음 섹션을 펼쳐 클러스터를 만들 때 IP 주소 범위 및 트래픽과 관련된 규칙을 확인합니다.

시작하기 전에

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

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

제어 영역 액세스 구성

Google Cloud CLI를 사용하여 모든 버전의 GKE 클러스터를 만들거나 버전 1.29 이상에서는 콘솔을 사용하여 클러스터를 만들면 다음 인터페이스를 통해 제어 영역에 액세스할 수 있습니다.

DNS 기반 엔드포인트

제어 영역에 대한 액세스는 소스 트래픽의 DNS 확인에 따라 다릅니다. DNS 기반 엔드포인트를 사용 설정하면 다음과 같은 이점이 있습니다.

  • IAM 정책을 기반으로 동적 액세스 정책을 만듭니다.
  • 배스천 호스트 또는 프록시 노드를 설정하지 않고도 다른 VPC 네트워크 또는 외부 위치에서 제어 영역에 액세스할 수 있습니다.

DNS 기반 엔드포인트에 대한 액세스를 구성하려면 DNS 기반 엔드포인트 액세스 정의를 참고하세요.

IP 기반 엔드포인트

제어 영역 엔드포인트에 대한 액세스는 소스 IP 주소에 따라 달라지며 승인된 네트워크에서 제어합니다. 다음을 비롯하여 제어 영역의 IP 기반 엔드포인트에 대한 액세스를 관리할 수 있습니다.

  • IP 기반 엔드포인트를 사용 설정하거나 사용 중지합니다.
  • 외부 트래픽의 액세스를 허용하도록 외부 엔드포인트를 사용 설정 또는 사용 중지합니다. 컨트롤 플레인 IP 기반 엔드포인트를 사용 설정하면 내부 엔드포인트는 항상 사용 설정됩니다.
  • 승인된 네트워크를 허용 목록에 추가하거나 공개 IP 주소의 액세스를 거부합니다. 승인된 네트워크를 구성하지 않으면 모든 외부 IP 주소에서 제어 영역에 액세스할 수 있습니다. 여기에는 제한이 없는 공개 인터넷 또는 Google Cloud 외부 IP 주소가 포함됩니다.
  • 클러스터의 일부 또는 모든 비공개 IP 주소에서 액세스를 허용 목록에 추가하거나 거부합니다.
  • Google Cloud 외부 IP 주소의 액세스를 허용 목록에 추가하거나 거부합니다. 이 주소는 Google Cloud에서 호스팅되는 모든 고객이 사용하는 모든 VM에 할당된 외부 IP 주소입니다.
  • 다른 Google Cloud 리전의 IP 주소에서 액세스를 허용 목록에 추가하거나 거부합니다.

컨트롤 플레인 액세스를 정의하기 전에 IP 기반 엔드포인트 사용의 제한사항을 검토하세요.

클러스터 만들기 및 제어 영역 액세스 정의

Autopilot 또는 Standard 클러스터를 만들거나 업데이트하려면 Google Cloud CLI 또는 Google Cloud 콘솔을 사용하세요.

콘솔

클러스터를 만들려면 다음 단계를 수행합니다.

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

    Google Kubernetes Engine으로 이동

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

  3. 프로젝트 요구사항에 따라 클러스터의 속성을 구성합니다.

  4. 탐색 메뉴에서 네트워킹을 클릭합니다.

  5. 컨트롤 플레인 액세스에서 컨트롤 플레인 엔드포인트를 구성합니다.

    1. DNS를 사용한 액세스 체크박스를 선택하여 컨트롤 플레인 DNS 기반 엔드포인트를 사용 설정합니다.
    2. IPv4 주소를 사용하여 액세스 체크박스를 선택하여 제어 영역 IP 기반 엔드포인트를 사용 설정합니다. 제어 영역에 액세스할 수 있는 IP 주소 정의에 포함된 구성을 사용하여 IP 기반 엔드포인트에 대한 액세스를 맞춤설정합니다.

gcloud

Autopilot 클러스터의 경우 다음 명령어를 실행합니다.

  gcloud container clusters create-auto CLUSTER_NAME \
    --enable-ip-access  \
    --enable-dns-access

Standard 클러스터의 경우 다음 명령어를 실행합니다.

  gcloud container clusters create CLUSTER_NAME \
      --enable-ip-access \
      --enable-dns-access

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름입니다.

두 명령어 모두 다음을 사용 설정하는 플래그를 포함합니다.

  • enable-dns-access: 컨트롤 플레인의 DNS 기반 엔드포인트를 사용하여 컨트롤 플레인에 대한 액세스를 사용 설정합니다.
  • enable-ip-access: IPv4 주소를 사용하여 제어 영역에 대한 액세스를 사용 설정합니다. 제어 영역의 내부 및 외부 엔드포인트를 모두 사용 중지하려면 이 플래그를 생략하세요.

제어 영역에 액세스할 수 있는 IP 주소 정의에 나열된 플래그를 사용하여 IP 기반 엔드포인트에 대한 액세스를 맞춤설정합니다.

DNS 기반 엔드포인트에 대한 액세스 정의

IAM 권한 container.clusters.connect를 구성하여 DNS 기반 엔드포인트에 대한 인증 및 승인을 관리할 수 있습니다. 이 권한을 구성하려면 다음 IAM 역할을 Google Cloud 프로젝트에 할당합니다.

  • roles/container.developer
  • roles/container.viewer

원하는 경우 다음 기능을 사용하여 DNS 기반 엔드포인트의 도달 가능성을 관리할 수 있습니다.

  • VPC 서비스 제어: DNS 기반 엔드포인트는 VPC 서비스 제어를 지원하여 제어 플레인 액세스에 보안 레이어를 추가합니다. VPC 서비스 제어는 Google Cloud API 전반에서 일관되게 작동합니다.

  • 공개 인터넷 액세스 권한이 없는 클라이언트에서 DNS 기반 엔드포인트에 액세스: 공개 인터넷에서 사용할 수 있는 Google Cloud API를 통해 DNS 기반 엔드포인트에 액세스할 수 있습니다. 비공개 클라이언트에서 DNS 기반 엔드포인트에 액세스하려면 비공개 Google 액세스, Cloud NAT 게이트웨이 또는 Google Cloud APIs용 Private Service Connect를 사용하면 됩니다.

    Google Cloud API용 Private Service Connect를 사용하면 GKE는 gke.goog 주소 요청을 기본 공개 Google IP 주소가 아닌 Google API용 Private Service Connect가 추가한 내부 IP 주소로 라우트합니다. Google Cloud API용 Private Service Connect를 구성하려면 엔드포인트를 통해 Google API 액세스의 단계를 완료하세요.

  • 온프레미스 클라이언트에서 DNS 기반 엔드포인트에 액세스: 온프레미스 클라이언트는 비공개 Google 액세스를 통해 DNS 기반 엔드포인트에 액세스할 수 있습니다. 비공개 Google 액세스를 구성하려면 온프레미스 호스트의 비공개 Google 액세스 구성의 단계를 완료하세요.

컨트롤 플레인에 액세스할 수 있는 IP 주소 정의

제어 영역에 액세스할 수 있는 IP 주소를 정의하려면 다음 단계를 완료하세요.

콘솔

  1. 제어 영역 액세스에서 승인된 네트워크 사용 설정을 선택합니다.
  2. 승인된 네트워크 추가를 클릭합니다.
  3. 네트워크의 이름을 입력합니다.
  4. 네트워크에 클러스터 제어 영역에 대한 액세스 권한을 부여할 CIDR 범위를 입력합니다.
  5. 완료를 클릭합니다.
  6. 필요한 경우 승인된 네트워크를 추가합니다.
컨트롤 플레인 IP 주소 방화벽 규칙 정의

제어 평면 IP 주소 방화벽 규칙을 정의하려면 다음 단계를 완료하세요.

  1. IP 주소 방화벽 규칙 표시 섹션을 펼칩니다.
  2. 컨트롤 플레인의 외부 IP 주소를 사용하여 액세스 체크박스를 선택하여 공개 IP 주소에서 제어 영역에 액세스하도록 허용합니다.

    권장사항:

    컨트롤 플레인 승인 네트워크를 정의하여 컨트롤 플레인에 대한 액세스를 제한합니다.

  3. 모든 리전의 컨트롤 플레인 내부 IP 주소를 사용하여 액세스 체크박스를 선택합니다. 모든 Google Cloud리전의 내부 IP 주소는 컨트롤 플레인 내부 엔드포인트에 액세스할 수 있습니다.

  4. 컨트롤 플레인의 내부 엔드포인트에 승인된 네트워크 적용을 선택합니다. 승인된 네트워크 추가 목록에 정의한 IP 주소만 컨트롤 플레인 내부 엔드포인트에 액세스할 수 있습니다. 내부 엔드포인트는 기본적으로 사용 설정되어 있습니다.

  5. 승인된 네트워크에 Google Cloud 외부 IP 주소 추가를 선택합니다. Google Cloud 의 모든 공개 IP 주소는 컨트롤 플레인에 액세스할 수 있습니다.

gcloud

다음 플래그를 사용하여 제어 영역 외부 및 내부 엔드포인트에 액세스할 수 있는 IP 주소를 구성할 수 있습니다.

  • enable-private-endpoint: 외부 엔드포인트에 대한 액세스가 사용 중지되었음을 지정합니다. 외부 IP 주소에서 제어 영역에 대한 액세스를 허용하려면 이 플래그를 생략합니다. 이 경우 enable-master-authorized-networks 플래그를 사용하여 외부 엔드포인트에 대한 액세스를 제어하는 것이 좋습니다.
  • enable-master-authorized-networks:는 외부 엔드포인트에 대한 액세스가 사용자가 승인한 IP 주소 범위로 제한된다고 지정합니다.
  • master-authorized-networks: 승인된 네트워크의 CIDR 값을 나열합니다. 이 목록은 쉼표로 구분된 목록입니다. 예를 들면 8.8.8.8/32,8.8.8.0/24입니다.

    권장사항:

    enable-master-authorized-networks 플래그를 사용하여 제어 영역에 대한 액세스를 제한합니다.

  • enable-authorized-networks-on-private-endpoint: 내부 엔드포인트에 대한 액세스가 enable-master-authorized-networks 플래그로 승인한 IP 주소 범위로 제한된다고 지정합니다.

  • no-enable-google-cloud-access:Google Cloud 외부 IP 주소에서 컨트롤 플레인에 대한 액세스를 거부합니다.

  • enable-master-global-access: 다른Google Cloud 리전의 IP 주소에서 액세스를 허용합니다.

    클러스터 수준에서 노드 또는 포드 격리를 정의하여 클러스터 네트워크를 계속 구성할 수 있습니다.

클러스터를 만들고 노드 네트워크 및 서브넷, IP 스택 유형, IP 주소 할당과 같은 클러스터 수준의 속성을 정의할 수도 있습니다. 자세한 내용은 VPC 기반 클러스터 만들기를 참고하세요.

제어 영역 액세스 수정

클러스터의 제어 영역 액세스를 변경하려면 gcloud CLI 또는 Google Cloud 콘솔을 사용하세요.

콘솔

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 클러스터 이름을 클릭합니다.

  3. 클러스터 세부정보 탭의 제어 영역 네트워킹에서 아이콘을 클릭합니다.

  4. 제어 영역 네트워킹 수정 대화상자에서 사용 사례 요구사항에 따라 제어 영역 액세스를 수정합니다.

  5. 컨트롤 플레인 구성 확인

gcloud

다음 명령어를 실행하고 사용 사례에 맞는 플래그를 추가합니다. 다음 플래그를 사용할 수 있습니다.

  • enable-dns-access: 컨트롤 플레인의 DNS 기반 엔드포인트를 사용하여 컨트롤 플레인에 대한 액세스를 사용 설정합니다.
  • enable-ip-access: IPv4 주소를 사용하여 제어 영역에 대한 액세스를 사용 설정합니다. 제어 영역의 내부 및 외부 엔드포인트를 모두 사용 중지하려면 이 플래그를 생략하세요.
  • enable-private-endpoint: 외부 엔드포인트에 대한 액세스가 사용 중지되었음을 지정합니다. 외부 IP 주소에서 제어 영역에 대한 액세스를 허용하려면 이 플래그를 생략합니다. 이 경우 enable-master-authorized-networks 플래그를 사용하여 외부 엔드포인트에 대한 액세스를 제어하는 것이 좋습니다.
  • enable-master-authorized-networks:는 외부 엔드포인트에 대한 액세스가 사용자가 승인한 IP 주소 범위로 제한된다고 지정합니다.
  • master-authorized-networks: 승인된 네트워크의 CIDR 값을 나열합니다. 이 목록은 쉼표로 구분된 목록입니다. 예를 들면 8.8.8.8/32,8.8.8.0/24입니다.

    권장사항:

    enable-master-authorized-networks 플래그를 사용하여 제어 영역에 대한 액세스를 제한합니다.

  • enable-authorized-networks-on-private-endpoint: 내부 엔드포인트에 대한 액세스가 enable-master-authorized-networks 플래그로 승인한 IP 주소 범위로 제한된다고 지정합니다.

  • no-enable-google-cloud-access:Google Cloud 외부 IP 주소에서 컨트롤 플레인에 대한 액세스를 거부합니다.

  • enable-master-global-access: 다른Google Cloud 리전의 IP 주소에서 액세스를 허용합니다.

    gcloud container clusters update CLUSTER_NAME
    

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

제어 영역 구성 확인

gcloud CLI 또는Google Cloud 콘솔을 사용하여 클러스터의 엔드포인트를 볼 수 있습니다.

콘솔

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 클러스터 이름을 클릭합니다.

  3. 클러스터 세부정보 탭의 제어 영역에서 제어 영역 엔드포인트의 다음 특성을 확인할 수 있습니다.

    • DNS 엔드포인트에는 이 엔드포인트를 사용 설정한 경우 클러스터의 DNS 기반 엔드포인트 이름이 포함됩니다.
    • IPv4 주소를 사용한 제어 영역 액세스에는 IP 기반 엔드포인트의 상태가 포함됩니다. 사용 설정하면 공개 및 비공개 엔드포인트의 정보를 볼 수 있습니다.
    • 모든 리전의 컨트롤 플레인 내부 IP 주소를 사용하여 액세스는 다른 리전의 Google IP 주소에서 제어 영역에 액세스할 수 있는 경우 상태를 사용 설정됨으로 표시합니다.
    • 승인된 네트워크에는 승인된 네트워크를 사용 설정한 경우 제어 영역에 액세스할 수 있는 CIDR 목록이 표시됩니다.
    • 승인된 네트워크를 컨트롤 플레인의 내부 엔드포인트에 적용에는 승인된 네트워크 필드의 CIDR만 내부 엔드포인트에 액세스할 수 있는 경우 사용 설정됨 상태가 표시됩니다.
    • 승인된 네트워크에 Google Cloud 외부 IP 주소 추가에는 Google Cloud의 외부 IP 주소가 컨트롤 플레인에 액세스할 수 있는 경우 사용 설정됨 상태가 표시됩니다.

속성을 수정하려면 IPv4 주소를 사용하여 제어 영역 액세스를 클릭하고 사용 사례에 따라 조정합니다.

gcloud

컨트롤 플레인 구성을 확인하려면 다음 명령어를 실행합니다.

gcloud container clusters describe CLUSTER_NAME

출력에는 네트워크 정의를 설명하는 controlPlaneEndpointsConfig 블록이 포함됩니다. 다음과 비슷한 출력이 표시됩니다.

controlPlaneEndpointsConfig:
dnsEndpointConfig:
  allowExternalTraffic: true
  endpoint: gke-dc6d549babec45f49a431dc9ca926da159ca-518563762004.us-central1-c.autopush.gke.goog
ipEndpointsConfig:
  authorizedNetworksConfig:
    cidrBlocks:
    - cidrBlock: 8.8.8.8/32
    - cidrBlock: 8.8.8.0/24
    enabled: true
    gcpPublicCidrsAccessEnabled: false
    privateEndpointEnforcementEnabled: true
  enablePublicEndpoint: false
  enabled: true
  globalAccess: true
  privateEndpoint: 10.128.0.13

이 예시에서 클러스터의 구성은 다음과 같습니다.

  • DNS 및 IP 주소 기반 엔드포인트가 모두 사용 설정됩니다.
  • 승인된 네트워크가 사용 설정되고 CIDR 범위가 정의됩니다. 이러한 승인된 네트워크는 내부 IP 주소에 적용됩니다.
  • Google Cloud 외부 IP 주소에서 제어 영역에 대한 액세스가 거부됩니다.

제어 영역 액세스 구성의 예

이 섹션에서는 다음 네트워크 격리 예시의 구성을 자세히 설명합니다. 다음 예시가 내 사용 사례와 얼마나 유사한지 평가합니다.

  • 예 1: 정의한 특정 IP 주소에서 제어 영역에 액세스할 수 있습니다. 여기에는 다른 Google Cloud 지역의 IP 주소 또는 Google이 예약한 IP 주소가 포함될 수 있습니다.
  • 예 2: 외부 IP 주소로는 제어 영역에 액세스할 수 없습니다.
예 1: 특정 IP 주소에서 제어 영역에 액세스할 수 있음

이 섹션에서는 다음과 같은 네트워크 격리 구성으로 클러스터를 만듭니다.

  • 컨트롤 플레인에는 DNS 기반 엔드포인트가 사용 설정되어 있습니다.
  • 제어 영역에는 기본적으로 사용 설정된 내부 엔드포인트 외에도 외부 엔드포인트가 사용 설정되어 있습니다.
  • 제어 영역에는 승인된 네트워크가 정의되어 있으며 다음 승인된 네트워크만 제어 영역에 도달할 수 있습니다.

이 클러스터를 만들려면 Google Cloud CLI 또는 Google Cloud 콘솔을 사용하세요.

콘솔

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

    Google Kubernetes Engine으로 이동

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

  3. 요구사항에 맞게 클러스터를 구성합니다.

  4. 탐색 메뉴에서 네트워킹을 클릭합니다.

  5. 컨트롤 플레인 액세스에서 컨트롤 플레인 엔드포인트를 구성합니다.

    1. DNS를 사용하여 액세스 체크박스를 선택합니다.
    2. IPV4 주소를 사용하여 액세스 체크박스를 선택합니다.
  6. 승인된 네트워크 사용 설정을 선택합니다.

  7. 승인된 네트워크 추가를 클릭합니다.

  8. 네트워크의 이름을 입력합니다.

  9. 네트워크에 클러스터 제어 영역에 대한 액세스 권한을 부여할 CIDR 범위를 입력합니다.

  10. 완료를 클릭합니다.

  11. 필요한 경우 승인된 네트워크를 추가합니다.

  12. IP 주소 방화벽 규칙 표시 섹션을 펼칩니다.

  13. 모든 리전의 컨트롤 플레인 내부 IP 주소를 사용하여 액세스를 선택합니다. 모든 Google Cloud 리전의 내부 IP 주소는 내부 IP 주소를 통해 컨트롤 플레인에 액세스할 수 있습니다.

  14. 승인된 네트워크에 Google Cloud 외부 IP 주소 추가를 선택합니다. Google Cloud 의 모든 외부 IP 주소는 컨트롤 플레인에 액세스할 수 있습니다.

클러스터 수준에서 노드 또는 포드 격리를 정의하여 클러스터 네트워크 구성을 계속할 수 있습니다.

gcloud

다음 명령어를 실행합니다.

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-dns-access \
    --enable-ip-access \
    --enable-master-authorized-networks \
    --enable-master-global-access \
    --master-authorized-networks CIDR1,CIDR2,...

다음을 바꿉니다.

  • CLUSTER_NAME: GKE 클러스터의 이름입니다.
  • CIDR1,CIDR2,...: 쉼표로 구분된 승인된 네트워크의 CIDR 값 목록입니다. 예를 들면 8.8.8.8/32,8.8.8.0/24입니다.
예 2: 내부 IP 주소에서 제어 영역에 액세스할 수 있음

이 섹션에서는 다음과 같은 네트워크 격리 구성으로 클러스터를 만듭니다.

  • 컨트롤 플레인에는 DNS 기반 엔드포인트가 사용 설정되어 있습니다.
  • 컨트롤 플레인에서 외부 엔드포인트가 사용 중지되었습니다.
  • 제어 영역에서 승인된 네트워크가 사용 설정되어 있습니다.
  • 모든Google Cloud 리전에서 내부 IP 주소를 통한 컨트롤 플레인에 대한 모든 액세스가 허용됩니다.
  • Google Cloud 외부 IP 주소는 클러스터에 액세스할 수 없습니다.

Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 이 클러스터를 만들 수 있습니다.

콘솔

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

    Google Kubernetes Engine으로 이동

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

  3. 요구사항에 맞게 클러스터를 구성합니다.

  4. 탐색 메뉴에서 네트워킹을 클릭합니다.

  5. 컨트롤 플레인 액세스에서 컨트롤 플레인 엔드포인트를 구성합니다.

    1. DNS를 사용하여 액세스 체크박스를 선택합니다.
    2. IPV4 주소를 사용하여 액세스 체크박스를 선택합니다.
  6. IP 주소 방화벽 규칙 표시 섹션을 펼칩니다.

  7. 컨트롤 플레인의 외부 IP 주소를 사용하여 액세스를 선택 해제합니다. 제어 영역은 외부 IP 주소에서 액세스할 수 없습니다.

  8. 제어 영역 액세스에서 승인된 네트워크 사용 설정을 선택합니다.

  9. 모든 리전의 컨트롤 플레인 내부 IP 주소를 사용하여 액세스 체크박스를 선택합니다. 모든 Google Cloud 리전의 내부 IP 주소는 내부 IP 주소를 통해 컨트롤 플레인에 액세스할 수 있습니다.

클러스터 수준에서 노드 또는 포드 격리를 정의하여 클러스터 네트워크 구성을 계속할 수 있습니다.

gcloud

다음 명령어를 실행합니다.

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-dns-access \
    --enable-ip-access \
    --enable-private-endpoint \
    --enable-master-authorized-networks \
    --master-authorized-networks CIDR1,CIDR2,... \
    --no-enable-google-cloud-access \
    --enable-master-global-access

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • CIDR1,CIDR2,...: 쉼표로 구분된 승인된 네트워크의 CIDR 값 목록입니다. 예를 들면 8.8.8.8/32,8.8.8.0/24입니다.

클러스터 네트워킹 구성

이 섹션에서는 내부(비공개) 또는 외부 (공개) 액세스 권한이 있는 노드가 있도록 클러스터를 구성합니다. GKE를 사용하면 사용하는 클러스터 유형에 따라 노드 네트워크 구성을 결합할 수 있습니다.

  • 표준 클러스터: 노드 풀을 만들거나 업데이트하여 동일한 클러스터에 비공개 또는 공개 노드를 프로비저닝할 수 있습니다. 예를 들어 비공개 노드로 노드 풀을 만들면 GKE는 내부 IP 주소만 사용하여 노드를 프로비저닝합니다. GKE는 기존 노드 풀을 수정하지 않습니다. 클러스터 수준에서 기본 네트워킹 구성을 정의할 수도 있습니다. GKE는 새 노드 풀에 네트워크 구성이 정의되어 있지 않은 경우에만 이 기본 네트워크 구성을 적용합니다.
  • Autopilot 클러스터: 클러스터를 만들거나 업데이트하여 모든 워크로드의 기본 네트워크 구성을 정의할 수 있습니다. GKE는 구성에 따라 공개 또는 비공개 노드에서 새 워크로드와 기존 워크로드를 예약합니다. 개별 워크로드의 클러스터 네트워크 구성을 명시적으로 정의할 수도 있습니다.

클러스터 구성

이 섹션에서는 클러스터 수준에서 클러스터 네트워킹을 구성합니다. 노드 풀 또는 워크로드에 이 구성이 정의되어 있지 않으면 GKE에서 이 구성을 고려합니다.

클러스터 수준 구성을 정의하려면 Google Cloud CLI 또는Google Cloud 콘솔을 사용하세요.

콘솔

클러스터 만들기

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

    Google Kubernetes Engine으로 이동

  2. 만들기를 클릭한 다음 Standard 또는 Autopilot 섹션에서 구성을 클릭합니다.

  3. 요구사항에 맞게 클러스터를 구성합니다.

  4. 탐색 메뉴에서 네트워킹을 클릭합니다.

  5. 클러스터 네트워킹 섹션에서 사용 사례에 따라 다음을 완료합니다.

    1. 비공개 노드 사용 설정을 선택하여 외부 클라이언트가 노드에 액세스하지 못하도록 하는 내부 IP 주소 (비공개 노드)만으로 노드를 프로비저닝합니다. 이 설정은 언제든지 변경할 수 있습니다.
    2. 비공개 노드 사용 설정을 선택 해제하여 외부 클라이언트가 노드에 액세스할 수 있도록 외부 IP 주소 (공개)만 있는 노드를 프로비저닝합니다.
  6. 고급 네트워킹 옵션 섹션에서 VPC 기반 속성을 추가로 구성합니다. 자세한 내용은 VPC 기반 클러스터 만들기를 참고하세요.

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

기존 클러스터 업데이트

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 클러스터 이름을 클릭합니다.

  3. 비공개 노드기본 새 노드 풀 구성 탭에서 비공개 노드 수정을 클릭합니다.

  4. 비공개 노드 수정 대화상자에서 다음 중 하나를 수행합니다.

    1. 비공개 노드 사용 설정을 선택하여 외부 클라이언트가 노드에 액세스하지 못하도록 하는 내부 IP 주소 (비공개 노드)만으로 노드를 프로비저닝합니다. 이 설정은 언제든지 변경할 수 있습니다.
    2. 비공개 노드 사용 설정을 선택 해제하여 외부 클라이언트가 노드에 액세스할 수 있도록 외부 IP 주소 (공개)만 있는 노드를 프로비저닝합니다.
  5. 변경사항 저장을 클릭합니다.

gcloud

다음 플래그 중 하나를 사용하여 클러스터 네트워킹을 정의합니다.

  • enable-private-nodes: 내부 IP 주소만 있는 노드 (비공개 노드)를 프로비저닝합니다. 이 플래그를 사용할 때는 다음 조건을 고려하세요.
    • enable-private-nodes을 사용할 때는 enable-ip-alias 플래그가 필요합니다.
    • master-ipv4-cidr 플래그는 비공개 서브넷을 만드는 데 선택사항입니다. 이 플래그를 사용하면 GKE는 master-ipv4-cidr에서 정의한 값을 사용하는 새 서브넷을 만들고 새 서브넷을 사용하여 컨트롤 플레인의 내부 IP 주소를 프로비저닝합니다.
  • no-enable-private-nodes: 외부 IP 주소만 있는 노드 (공개 노드)를 프로비저닝합니다.

Autopilot 클러스터에서 enable-private-nodes 플래그를 사용하여 클러스터를 만들거나 업데이트합니다.

  • 클러스터를 만들려면 다음 명령어를 사용하세요.

    gcloud container clusters create-auto CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    
  • 클러스터를 업데이트하려면 다음 명령어를 사용하세요.

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    클러스터 업데이트는 모든 노드 풀이 다시 예약된 후에만 적용됩니다. 이 절차는 몇 시간 정도 걸릴 수 있습니다.

표준 클러스터에서 enable-private-nodes 플래그를 사용하여 클러스터를 만들거나 업데이트합니다.

  • 클러스터를 만들려면 다음 명령어를 사용하세요.

    gcloud container clusters create CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    
  • 클러스터를 업데이트하려면 다음 명령어를 사용합니다.

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    클러스터 업데이트는 새 노드 풀에만 적용됩니다. GKE는 기존 노드 풀에서 이 구성을 업데이트하지 않습니다.

클러스터 구성은 노드 풀 또는 워크로드 수준의 네트워크 구성으로 덮어씁니다.

노드 풀 또는 워크로드 구성

Autopilot 클러스터의 워크로드 수준에서 비공개 또는 공개 노드를 구성하거나 표준 클러스터의 노드 풀을 구성하려면 Google Cloud CLI 또는Google Cloud 콘솔을 사용하세요. 워크로드 또는 노드 풀 수준에서 네트워크 구성을 정의하지 않으면 GKE는 클러스터 수준에서 기본 구성을 적용합니다.

콘솔

표준 클러스터에서 다음 단계를 완료합니다.

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 세부정보 페이지에서 수정하려는 클러스터의 이름을 클릭합니다.

  3. 노드 풀 추가를 클릭합니다.

  4. 사용 사례에 따라 비공개 노드 사용 설정 체크박스를 구성합니다.

    1. 비공개 노드 사용 설정을 선택하여 내부 IP 주소만 있는 노드 (비공개 노드)를 프로비저닝합니다.
    2. 비공개 노드 사용 설정을 선택 해제하여 외부 클라이언트가 노드에 액세스할 수 있도록 외부 IP 주소 (공개)만 있는 노드를 프로비저닝합니다. 이 구성은 언제든지 변경할 수 있습니다.
  5. 새 노드 풀을 구성합니다.

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

노드 풀 관리에 관한 자세한 내용은 노드 풀 추가 및 관리를 참고하세요.

gcloud

  • Autopilot 클러스터에서 GKE가 비공개 노드에 포드를 예약하도록 요청하려면 포드 사양에 다음 nodeSelector를 추가합니다.

    cloud.google.com/private-node=true
    

    포드 nodeSelector에서 private-node=true를 사용하여 내부 IP 주소만 있는 노드 (비공개 노드)에서 포드를 예약합니다.

    GKE는 구성에 따라 비공개 노드 또는 공개 노드에서 포드를 다시 만듭니다. 워크로드 중단을 방지하려면 각 워크로드를 개별적으로 이전하고 이전을 모니터링하세요.

  • Standard 클러스터에서 기존 노드 풀의 비공개 IP 주소를 통해 노드를 프로비저닝하려면 다음 명령어를 실행합니다.

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    다음을 바꿉니다.

    • NODE_POOL_NAME: 수정하려는 노드 풀의 이름입니다.
    • CLUSTER_NAME: 기존 클러스터의 이름입니다.

    다음 플래그 중 하나를 사용하여 노드 풀 네트워킹 구성을 정의합니다.

    • enable-private-nodes: 내부 IP 주소만 있는 노드 (비공개 노드)를 프로비저닝합니다.
    • no-enable-private-nodes: 외부 IP 주소만 있는 노드 (공개 노드)를 프로비저닝합니다.

고급 구성

다음 섹션에서는 클러스터 네트워크 격리를 구성할 때 유용할 수 있는 고급 구성을 설명합니다.

Cloud Shell을 사용하여 외부 엔드포인트가 사용 중지된 클러스터에 액세스

클러스터 제어 영역의 외부 엔드포인트가 사용 중지된 경우 Cloud Shell로 GKE 제어 영역에 액세스할 수 없습니다. Cloud Shell을 사용하여 클러스터에 액세스하려면 DNS 기반 엔드포인트를 사용 설정하는 것이 좋습니다.

클러스터에 대한 액세스 권한을 확인하려면 다음 단계를 완료하세요.

  1. DNS 기반 엔드포인트를 사용 설정한 경우 다음 명령어를 실행하여 클러스터의 사용자 인증 정보를 가져옵니다.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --dns-endpoint
    

    IP 기반 엔드포인트를 사용 설정한 경우 다음 명령어를 실행하여 클러스터의 사용자 인증 정보를 가져옵니다.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --internal-ip
    

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

  2. Cloud Shell에서 kubectl을 사용하여 클러스터에 액세스합니다.

    kubectl get nodes
    

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

    NAME                                               STATUS   ROLES    AGE    VERSION
    gke-cluster-1-default-pool-7d914212-18jv   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-3d9p   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-wgqf   Ready    <none>   104m   v1.21.5-gke.1302
    

IP 기반 엔드포인트 액세스가 사용 중지된 경우 get-credentials 명령어는 DNS 기반 엔드포인트를 자동으로 사용합니다.

특정 사용 사례를 위한 방화벽 규칙 추가

이 섹션에서는 클러스터에 방화벽 규칙을 추가하는 방법을 설명합니다. 기본적으로 방화벽 규칙은 클러스터 컨트롤 플레인이 포트 443(HTTPS) 및 10250(kubelet)에서만 노드 및 포드에 대한 TCP 연결을 시작하도록 제한합니다. 일부 Kubernetes 기능의 경우 추가 포트에서 액세스를 허용하도록 방화벽 규칙을 추가해야 할 수 있습니다. 자동으로 생성되는 방화벽 규칙보다 우선순위가 높은 방화벽 규칙이나 계층식 방화벽 정책 규칙을 생성하지 마세요.

추가 방화벽 규칙이 필요한 Kubernetes 기능은 다음과 같습니다.

방화벽 규칙을 추가하면 클러스터 제어 영역의 트래픽이 다음 모두로 전송될 수 있습니다.

  • 각 노드의 지정된 포트(hostPort)
  • 이러한 노드에서 실행되는 각 포드의 지정된 포트
  • 이러한 노드에서 실행되는 각 서비스의 지정된 포트

방화벽 규칙에 대한 자세한 내용은 Cloud Load Balancing 문서의 방화벽 규칙을 참조하세요.

클러스터에 방화벽 규칙을 추가하려면 클러스터 제어 영역의 CIDR 블록과 사용할 대상을 기록해야 합니다. 이를 기록한 후에 규칙을 만들 수 있습니다.

제어 영역의 CIDR 블록 보기

방화벽 규칙을 추가하려면 클러스터 제어 영역의 CIDR 블록이 필요합니다.

콘솔

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

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 클러스터 이름을 클릭합니다.

세부정보 탭의 네트워킹에서 제어 영역 주소 범위 필드의 값을 기록해둡니다.

gcloud

다음 명령어를 실행합니다.

gcloud container clusters describe CLUSTER_NAME

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

명령어 결과에서 masterIpv4CidrBlock 필드 값을 기록합니다.

기존 방화벽 규칙 보기

클러스터의 기존 방화벽 규칙이 사용하는 타겟(이 경우에는 목적지 노드)을 지정해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.

    방화벽 정책으로 이동

  2. VPC 방화벽 규칙테이블 필터링gke-CLUSTER_NAME을 입력합니다.

결과에서 대상 필드 값을 기록합니다.

gcloud

다음 명령어를 실행합니다.

gcloud compute firewall-rules list \
    --filter 'name~^gke-CLUSTER_NAME' \
    --format 'table(
        name,
        network,
        direction,
        sourceRanges.list():label=SRC_RANGES,
        allowed[].map().firewall_rule().list():label=ALLOW,
        targetTags.list():label=TARGET_TAGS
    )'

명령어 결과에서 대상 필드의 값을 기록해 둡니다.

공유 VPC의 방화벽 규칙을 보려면 --project HOST_PROJECT_ID 플래그를 명령어에 추가합니다.

방화벽 규칙 추가

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.

    방화벽 정책으로 이동

  2. 방화벽 규칙 만들기를 클릭합니다.

  3. 이름에 원하는 방화벽 규칙 이름을 입력합니다.

  4. 네트워크 목록에서 관련 네트워크를 선택합니다.

  5. 트래픽 방향에서 인그레스를 클릭합니다.

  6. 일치 시 작업에서 허용을 클릭합니다.

  7. 대상 목록에서 지정된 대상 태그를 선택합니다.

  8. 대상 태그에 이전에 기록한 목표 값을 입력합니다.

  9. 소스 필터 목록에서 IPv4 범위를 선택합니다.

  10. 소스 IPv4 범위에 클러스터 제어 영역의 CIDR 블록을 입력합니다.

  11. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 클릭하고, 관련 프로토콜(TCP 또는UDP) 체크박스를 선택하고, 프로토콜 입력란에 원하는 포트 번호를 입력합니다.

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

gcloud

다음 명령어를 실행합니다.

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges CONTROL_PLANE_RANGE \
    --rules PROTOCOL:PORT \
    --target-tags TARGET

다음을 바꿉니다.

  • FIREWALL_RULE_NAME: 선택한 방화벽 규칙 이름입니다.
  • CONTROL_PLANE_RANGE: 이전에 수집한 클러스터 제어 영역의 IP 주소 범위(masterIpv4CidrBlock)입니다.
  • PROTOCOL:PORT: 포트 및 해당 포트의 프로토콜(tcp, udp)입니다.
  • TARGET: 이전에 수집한 대상(Targets) 값입니다.

공유 VPC의 방화벽 규칙을 추가하려면 다음 플래그를 명령어에 추가합니다.

--project HOST_PROJECT_ID
--network NETWORK_ID

비공개 노드에 아웃바운드 인터넷 액세스 권한 부여

외부 레지스트리에서 이미지를 가져오는 것과 같이 비공개 노드에 아웃바운드 인터넷 액세스 권한을 제공하려면 Cloud NAT를 사용하여 Cloud Router를 만들고 구성합니다. Cloud NAT를 사용하면 비공개 노드가 인터넷을 통해 패킷을 보내고 받을 아웃바운드 연결을 설정할 수 있습니다.

Cloud Router를 사용하면 리전의 모든 노드가 기본 및 별칭 IP 범위에 Cloud NAT를 사용할 수 있습니다. 또한 외부 IP 주소가 NAT 게이트웨이에 자동으로 할당됩니다.

Cloud Router를 만들고 구성하는 방법은 Cloud NAT 문서의 Cloud Router를 사용하여 Cloud NAT 구성 만들기를 참조하세요.

Windows Server 컨테이너 애플리케이션 배포

비공개 노드가 있는 클러스터에 Windows Server 컨테이너 애플리케이션을 배포하는 방법은 Windows 노드 풀 문서를 참고하세요.

다음 단계