VPC 기반 클러스터 만들기

이 페이지에서는 Google Kubernetes Engine(GKE)에서 VPC 기반 클러스터를 구성하는 방법을 설명합니다.

VPC 기반 클러스터의 이점과 요구사항에 대한 자세한 내용은 VPC 기반 클러스터를 참조하세요.

시작하기 전에

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

다음 방법 중 하나를 사용하여 기본 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

절차

다음 절차를 따라 VPC 기반 클러스터를 만들고 구성된 pod 및 서비스 IP 주소 범위를 확인합니다.

기존 서브넷에 클러스터 만들기

다음 안내에서는 원하는 보조 범위 할당 방법을 사용하여 기존 서브넷에서 VPC 기반 GKE 클러스터를 만드는 방법을 설명합니다.

gcloud

  • GKE에서 관리하는 보조 범위 할당 방법을 사용하려면 다음 명령어를 실행합니다.

    gcloud container clusters create cluster-name \
      --region=region \
      --enable-ip-alias \
      --subnetwork=subnet-name \
      --cluster-ipv4-cidr=pod-ip-range \
      --services-ipv4-cidr=services-ip-range
    
  • 사용자가 관리하는 보조 범위 할당 방법을 사용하려면 다음 명령어를 실행합니다.

    gcloud container clusters create cluster-name \
      --region=region \
      --enable-ip-alias \
      --subnetwork=subnet-name \
      --cluster-secondary-range-name=secondary-range-pods \
      --services-secondary-range-name=secondary-range-services
    

자리표시자를 유효한 값으로 바꿉니다.

  • cluster-name은 GKE 클러스터의 이름입니다.
  • region은 클러스터가 생성되는 리전입니다. 영역 클러스터를 만들려면 이 플래그를 --zone=zone으로 바꿉니다. 여기서 zone은 Google Cloud 영역입니다.
  • subnet-name은 기존 서브넷의 이름입니다. 서브넷의 기본 IP 주소 범위는 노드에 사용됩니다. 서브넷은 클러스터에서 사용되는 리전과 같은 리전에 있어야 합니다. 이를 생략하면 GKE는 클러스터 리전의 default VPC 네트워크에서 서브넷 사용을 시도합니다.
  • 보조 범위 할당 방법을 GKE에서 관리하는 경우의 각 항목 의미는 다음과 같습니다.
    • pod-ip-range는 CIDR 표기법(예: 10.0.0.0/14) 또는 CIDR 블록의 서브넷 마스크 크기(예: /14)에서 IP 주소 범위입니다. pod의 서브넷 보조 IP 주소 범위를 만드는 데 사용됩니다. --cluster-ipv4-cidr 옵션을 생략하면 GKE는 /14 범위(218개 주소)를 자동으로 선택합니다. 자동 선택된 범위는 1.0.0.0/8(224개 주소 범위)에서 임의로 선택되며, VM에 할당된 IP 주소 범위, 기존 경로 또는 다른 클러스터에 할당된 범위는 여기에 포함되지 않습니다. 자동 선택된 범위는 예약된 IP 주소, 동적 경로, 이 클러스터와 피어링하는 VPC 내의 경로와 충돌할 수 있습니다. 이 중 하나라도 사용할 경우 충돌을 방지하기 위해 --cluster-ipv4-cidr을 지정해야 합니다.
    • services-ip-range는 CIDR 표기법(예: 10.4.0.0/19) 또는 CIDR 블록의 서브넷 마스크 크기(예: /19)에서 IP 주소 범위입니다. 서비스의 서브넷 보조 IP 주소 범위를 만드는 데 사용됩니다.
  • 보조 범위 할당 방법을 사용자가 관리하는 경우의 각 항목 의미는 다음과 같습니다.
    • secondary-range-pods는 지정된 subnet-name에 있는 기존 보조 IP 주소 범위의 이름입니다. GKE에서는 클러스터의 pod에 전체 서브넷 보조 IP 주소 범위를 사용합니다.
    • secondary-range-services는 지정된 subnet-name에 있는 기존 보조 IP 주소 범위의 이름입니다. GKE에서는 클러스터 서비스에 전체 서브넷 보조 IP 주소 범위를 사용합니다.

Console

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

    Google Kubernetes Engine 메뉴로 이동

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

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

  4. 네트워크 드롭다운 목록에서 VPC를 선택합니다.

  5. 노드 서브넷 드롭다운 목록에서 클러스터의 서브넷을 선택합니다.

  6. VPC 기반 트래픽 라우팅 사용(별칭 IP 사용) 체크박스가 선택되어 있는지 확인합니다.

  7. GKE에서 보조 범위 할당 방법을 관리하려면 보조 범위 자동 생성 체크박스를 선택합니다. 선택한 서브넷의 보조 범위를 이미 만들었지만 보조 범위 할당 방법을 사용자가 관리하도록 하려면 이 체크박스를 선택 취소합니다.

  8. pod 주소 범위 필드에 pod 범위(예: 10.0.0.0/14)를 입력합니다.

  9. 서비스 주소 범위 필드에 서비스 범위(예: 10.4.0.0/19)를 입력합니다.

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

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

API

VPC 기반 클러스터를 만들 때 IPAllocationPolicy 객체를 정의합니다. 기존 서브넷 보조 IP 주소 범위를 참조하거나 CIDR 블록을 지정할 수 있습니다. 기존 서브넷 보조 IP 주소 범위를 참조하여 보조 범위 할당 메서드를 사용자가 관리하는 클러스터를 만듭니다. 범위 할당 방법을 GKE에서 관리하려면 CIDR 블록을 제공합니다.

{
  "name": cluster-name,
  "description": description,
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "clusterIpv4CidrBlock"      : string,
    "servicesIpv4CidrBlock"     : string,
    "clusterSecondaryRangeName" : string,
    "servicesSecondaryRangeName": string,

  },
  ...
}

각 항목의 의미는 다음과 같습니다.

  • "clusterIpv4CidrBlock"은 pod CIDR 범위의 크기/위치입니다. pod 보조 범위의 크기를 결정하며, CIDR 표기법의 IP/크기(예: 10.0.0.0/14) 또는 /크기(예: /14)일 수 있습니다. 지정된 크기의 빈 공간이 VPC의 사용 가능한 공간에서 선택됩니다. 공백으로 두면 유효 범위가 발견되고 기본 크기로 생성됩니다.
  • "servicesIpv4CidrBlock"은 서비스 CIDR 범위의 크기/위치입니다. "clusterIpv4CidrBlock"의 설명을 참조하세요.
  • "clusterSecondaryRangeName"은 pod 보조 범위의 이름입니다. 보조 범위는 이미 존재해야 하고 클러스터에 연결된 서브네트워크(예: --subnetwork 플래그로 지정된 서브네트워크)에 속해야 합니다.
  • "serviceSecondaryRangeName"은 서비스 보조 범위의 이름입니다. 보조 범위는 이미 있어야 하고 클러스터에 연결된 서브네트워크(예: --subnetwork 플래그로 지정된 서브네트워크)에 속해야 합니다.

Terraform

Terraform 모듈을 사용하여 Terraform을 통해 VPC 기반 클러스터를 쉽게 만들 수 있습니다.

예를 들어 Terraform 구성에 이 블록을 추가할 수 있습니다.

module "gke" {
  source  = "terraform-google-modules/kubernetes-engine/google"
  version = "~> 12.0"

  project_id        = "project-id"
  name              = "cluster-name"
  region            = "region"
  network           = "network-name"
  subnetwork        = "subnet-name"
  ip_range_pods     = "secondary-range-pods"
  ip_range_services = "secondary-range-services"
}

다음을 바꿉니다.

  • project-id는 클러스터가 생성되는 프로젝트 ID입니다.
  • cluster-name은 GKE 클러스터의 이름입니다.
  • region은 클러스터가 생성되는 리전입니다.
  • network-name은 기존 네트워크의 이름입니다.
  • subnet-name은 기존 서브넷의 이름입니다. 서브넷의 기본 IP 주소 범위는 노드에 사용됩니다. 서브넷은 클러스터에서 사용되는 리전과 같은 리전에 있어야 합니다.
  • secondary-range-pods는 지정된 subnet-name에 있는 기존 보조 IP 주소 범위의 이름입니다. GKE에서는 클러스터의 pod에 전체 서브넷 보조 IP 주소 범위를 사용합니다.
  • secondary-range-services는 지정된 subnet-name에 있는 기존 보조 IP 주소 범위의 이름입니다. GKE에서는 클러스터 서비스에 전체 서브넷 보조 IP 주소 범위를 사용합니다.

클러스터와 서브넷을 동시에 만들기

다음 안내에서는 VPC 기반 GKE 클러스터와 서브넷을 동시에 만드는 방법을 보여줍니다. 명령어 하나로 다음 두 단계를 수행하면 보조 범위 할당 방법을 GKE에서 관리하게 됩니다.

gcloud

VPC 기반 클러스터와 서브넷을 동시에 만들려면 다음 명령어를 실행합니다.

gcloud container clusters create cluster-name \
    --region=region \
    --enable-ip-alias \
    --create-subnetwork name=subnet-name,range=node-ip-range \
    --cluster-ipv4-cidr=pod-ip-range \
    --services-ipv4-cidr=services-ip-range

각 항목의 의미는 다음과 같습니다.

  • cluster-name은 GKE 클러스터의 이름입니다.
  • region은 클러스터가 생성되는 리전입니다. 영역 클러스터를 만들려면 이 플래그를 --zone=zone으로 바꿉니다. 여기서 zone은 GKE 영역입니다.
  • subnet-name은 만들 서브넷의 이름입니다. 서브넷의 리전은 클러스터와 같은 리전(또는 영역 클러스터가 포함된 리전)입니다. GKE에서 이름을 자동으로 생성하도록 하려면 빈 문자열(name="")을 사용합니다.
  • node-ip-range는 CIDR 표기법(예: 10.5.0.0/20) 또는 CIDR 블록의 서브넷 마스크 크기(예: /20)에서 IP 주소 범위입니다. pod의 서브넷 기본 IP 주소 범위를 만드는 데 사용됩니다. 이를 생략하면 GKE는 VPC에서 크기가 /20인 사용 가능한 IP 범위를 선택합니다.
  • pod-ip-range는 CIDR 표기법(예: 10.0.0.0/14) 또는 CIDR 블록의 서브넷 마스크 크기(예: /14)에서 IP 주소 범위입니다. pod의 서브넷 보조 IP 주소 범위를 만드는 데 사용됩니다. 이를 생략하면 GKE는 218개의 주소를 포함하여 임의로 선택된 /14 범위를 사용합니다. 자동 선택된 범위는 1.0.0.0/8(224개 주소 범위)에서 임의로 선택되며, VM에 할당된 IP 주소 범위, 기존 경로 또는 다른 클러스터에 할당된 범위는 여기에 포함되지 않습니다. 자동 선택된 범위는 예약된 IP 주소, 동적 경로, 이 클러스터와 피어링하는 VPC 내의 경로와 충돌할 수 있습니다. 이 중 하나라도 사용할 경우 충돌을 방지하기 위해 --cluster-ipv4-cidr을 지정해야 합니다.
  • services-ip-range는 CIDR 표기법(예: 10.4.0.0/19) 또는 CIDR 블록의 서브넷 마스크 크기(예: /19)에서 IP 주소 범위입니다. 서비스의 서브넷 보조 IP 주소 범위를 만드는 데 사용됩니다. 이를 생략하면 GKE는 기본 서비스 IP 주소 범위 크기인 /20을 사용합니다.

Console

Cloud Console을 사용하여 클러스터와 서브넷을 동시에 만들 수 없습니다. 대신 먼저 서브넷을 만든기존 서브넷에 클러스터를 만듭니다.

API

VPC 기반 클러스터를 만들려면 클러스터 리소스에서 [IPAllocationPolicy] 객체를 정의합니다.

{
  "name": cluster-name,
  "description": description,
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "createSubnetwork": true,
    "subnetworkName": subnet-name
  },
  ...
}

createSubnetwork 자동으로 클러스터의 서브네트워크를 만들고 프로비저닝합니다. subnetworkName 필드는 선택사항입니다. 이 필드를 비워두면 서브네트워크 이름이 자동으로 선택됩니다.

RFC 1918 이외의 비공개 IP 주소 범위 사용

1.14.2-gke.1 이상을 사용하는 GKE 클러스터는 노드, pod, 서비스에 RFC 1918 범위 밖에 있는 비공개 IP 주소 범위를 사용할 수 있습니다. 서브넷 범위의 내부 IP 주소로 사용할 수 있는 비RFC 1918 비공개 범위 목록은 VPC 네트워크 문서의 유효한 범위를 참조하세요.

RFC 1918 이외의 비공개 IP 주소 범위는 비공개 클러스터 및 비공개가 아닌 클러스터와 호환됩니다.

RFC 1918 이외의 비공개 범위는 서브넷 범위입니다. 이 범위는 RFC 1918 서브넷 범위와 함께 사용하거나 단독으로 사용할 수 있습니다. 노드, pod, 서비스는 VPC 기반 클러스터의 IP 범위에 설명된 대로 서브넷 범위를 계속 사용합니다. RFC 1918 이외의 범위를 사용할 경우 다음 사항에 유의하세요.

  • 서브넷 범위, 심지어 RFC 1918 이외의 범위를 사용하는 서브넷 범위도 클러스터 노드를 만들기 전에 수동으로 또는 GKE에서 할당해야 합니다. 클러스터를 교체하지 않으면 비RFC 1918 서브넷 범위 사용으로 전환하거나 사용을 중지할 수 없습니다.

  • 내부 TCP/UDP 부하 분산기는 서브넷의 기본 IP 주소 범위의 IP 주소만 사용합니다. RFC 1918 이외의 주소로 내부 TCP/UDP 부하 분산기를 만들려면 서브넷의 기본 IP 주소 범위는 RFC 1918이 아니어야 합니다.

클러스터 외부의 대상은 RFC 1918 이외의 비공개 범위에서 트래픽을 수신하는 데 문제가 발생할 수 있습니다. 예를 들어 RFC 1112(클래스 E) 비공개 범위는 일반적으로 멀티캐스트 주소로 사용됩니다. 소스가 RFC 1918 범위 외부의 비공개 IP 주소인 패킷을 클러스터 외부의 대상이 처리할 수 없는 경우 다음 두 작업을 모두 수행할 수 있습니다.

  • 서브넷의 기본 IP 주소 범위에 RFC 1918 범위를 사용합니다. 이렇게 하면 클러스터의 노드가 RFC 1918 주소를 사용합니다.

  • 클러스터에서 IP 매스커레이드 에이전트를 실행 중이며 대상이 nonMasqueradeCIDRs 목록에 없는지 확인합니다. 이렇게 하면 pod에서 전송된 패킷에 소스(SNAT)가 RFC 1918인 노드 주소로 변경됩니다.

비공개로 재사용되는 공개 IP 주소 범위 사용 설정

1.14.2-gke.1 이상을 사용하는 GKE 클러스터는 특정 공개 IP 주소 범위를 내부 서브넷 IP 주소 범위로 비공개로 재사용할 수 있습니다. VPC 네트워크 문서에 설명된 대로 특정 제한된 범위를 제외한 모든 공개 IP 주소를 비공개로 재사용할 수 있습니다.

비공개로 재사용되는 공개 IP 주소 범위를 사용하려면 클러스터가 비공개 클러스터여야 합니다. 비공개가 아닌 VPC 기반 클러스터 및 경로 기반 클러스터는 지원되지 않습니다.

비공개로 재사용되는 공개 범위는 서브넷 범위입니다. 비공개 주소를 사용하는 다른 서브넷 범위와 함께 사용하거나 단독으로 사용할 수 있습니다. 노드, pod, 서비스는 VPC 기반 클러스터의 IP 범위에 설명된 대로 서브넷 범위를 계속 사용합니다. 공개 IP 주소를 비공개로 다시 사용할 때는 다음 사항에 유의하세요.

  • 공개 IP 주소 범위를 서브넷 범위로 다시 사용할 경우, 클러스터가 더 이상 이 공개 범위를 사용하는 인터넷상의 시스템과 통신할 수 없습니다. 해당 범위가 클러스터의 VPC 네트워크 내의 내부 IP 주소 범위가 됩니다.

  • 서브넷 범위, 심지어 공개 IP 주소 범위를 비공개로 재사용하는 서브넷 범위도 클러스터 노드를 만들기 전에 수동으로 또는 GKE에서 할당해야 합니다. 클러스터를 교체하지 않으면 비공개로 재사용되는 공개 IP 주소 사용으로 전환하거나 사용을 중지할 수 없습니다.

  • 비공개로 재사용되는 공개 IP 주소 범위를 사용하는 pod에서 전송된 패킷은 소스(SNAT)를 노드 주소로 변경할 수 없습니다. 따라서 --disable-default-snat 플래그로 클러스터를 만들어야 합니다. 이 플래그에 대한 자세한 내용은 GKE의 IP 매스커레이딩을 참조하세요.

  • pod가 공개 IP 주소 범위를 비공개로 다시 사용하는 클러스터는 비공개 클러스터여야 하므로 pod가 트래픽을 인터넷의 대상으로 전송해야 하는 경우 클러스터는 Cloud NAT와 같은 NAT 솔루션을 사용해야 합니다. Cloud NAT를 사용할 때는 최소한 pod의 클러스터 서브넷의 보조 IP 주소 범위에 적용되도록 NAT 게이트웨이를 구성해야 합니다. 이렇게 하면 클러스터의 IP 매스커레이드 구성에서 기본 SNAT 동작을 사용 중지해야 하므로 Cloud NAT는 pod IP 주소에서 전송된 패킷에서 SNAT를 수행합니다.

비공개로 재사용되는 공개 범위가 있는 클러스터 예시

다음 예시에서는 gcloud를 사용하여 비공개로 재사용되는 공개 IP 주소 범위를 사용하는 클러스터를 만듭니다. 다음 플래그를 사용해야 합니다.

  • --enable-ip-alias: 공개 IP 주소 범위를 비공개로 재사용할 때 필요한 VPC 기반 클러스터를 만듭니다.
  • --enable-private-nodes: 공개 IP 주소 범위를 비공개로 재사용할 때 필요한 비공개 클러스터를 만듭니다.
  • --disable-default-snat: pod 또는 노드의 공개 IP 주소를 비공개로 재사용하는 경우 이 옵션이 필요합니다. 트래픽이 시작된 pod로 응답이 라우팅될 수 있도록 SNAT를 사용 중지해야 합니다.

이 명령어는 다음과 같은 VPC 기반 비공개 클러스터를 만듭니다.

  • 노드가 서브넷의 10.0.0.0/24 기본 IP 주소 범위를 사용합니다.
  • pod는 pod의 서브넷 보조 IP 주소 범위로 5.0.0.0/16 공개 IP 주소 범위를 비공개로 재사용합니다.
  • 서비스는 5.1.0.0/16 공개 IP 주소 범위를 서비스의 서브넷의 보조 IP 주소 범위로 비공개로 재사용합니다.
gcloud container clusters create cluster-name \
  --enable-ip-alias \
  --enable-private-nodes \
  --disable-default-snat \
  --zone=zone \
  --create-subnetwork name=cluster-subnet,range=10.0.0.0/24 \
  --cluster-ipv4-cidr=5.0.0.0/16 \
  --services-ipv4-cidr=5.1.0.0/16 \
  --master-ipv4-cidr=master-CIDR

pod 및 서비스 범위 확인

VPC 기반 클러스터를 만든 후 pod와 서비스 범위를 확인할 수 있습니다.

gcloud

클러스터를 확인하려면 다음 명령어를 실행합니다.

gcloud container clusters describe cluster-name

명령어 결과의 ipAllocationPolicy 필드에서 다음을 찾습니다.

  • clusterIpv4Cidr은 pod의 보조 범위입니다.
  • servicesIpv4Cidr은 서비스의 보조 범위입니다.

Console

클러스터를 확인하려면 다음 단계를 수행합니다.

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

    Google Kubernetes Engine 메뉴로 이동

  2. 원하는 클러스터를 선택합니다.

보조 범위는 클러스터 섹션의 세부정보 탭에 표시됩니다.

  • 컨테이너 주소 범위는 pod의 보조 범위입니다.
  • 서비스 주소 범위는 서비스의 보조 범위입니다.

문제 해결

이 섹션에서는 VPC 기반 클러스터와 관련된 문제를 해결하는 방법을 설명합니다.

리소스 'projects/[PROJECT_NAME]/regions/XXX/subnetworks/default'가 없음

가능한 원인
동일한 서브넷에 동시 작업이 있습니다. 예를 들어 서브넷에 다른 VPC 기반 클러스터를 만들거나, 보조 범위를 추가하거나 삭제하는 경우가 있습니다.
해결 방법
명령어를 재실행합니다.

'resource.secondaryIpRanges[1].ipCidrRange': 'XXX' 필드 값이 잘못됨. 잘못된 IPCidrRange: XXX가 'XXX' 리전의 기존 서브네트워크 'default'와 충돌함

가능한 원인

다른 VPC 기반 클러스터가 동시에 생성되고 동일한 VPC 네트워크에 동일한 범위를 할당하려고 합니다.

동일한 VPC 네트워크의 서브네트워크에 동일한 보조 범위가 추가됩니다.

해결 방법

보조 범위를 지정하지 않은 경우 클러스터를 만들 때 이 오류가 반환되면 클러스터 생성 명령어를 재실행합니다.

pod의 IP 여유 공간 부족

증상

클러스터가 장기간 프로비저닝 상태에서 멈춰 있습니다.

클러스터 생성이 관리형 인스턴스 그룹(MIG) 오류를 반환합니다.

기존 클러스터에 새 노드를 추가할 수 없습니다.

가능한 원인

pod IP 주소 범위의 할당되지 않은 공간이 클러스터에서 요청된 노드에 비해 부족합니다. 예를 들어 클러스터의 pod IP 주소 범위에 크기가 /23(주소 512개)이고 노드당 최대 pod 수가 110개인 넷마스크가 있으면 노드는 최대 두 개만 만들 수 있습니다. 각 노드에는 넷마스크 크기가 /24인 별칭 IP 주소 범위가 할당됩니다.

솔루션

적절한 크기의 기본 및 보조 IP 주소 범위를 검토하고 계획한 후 대체 클러스터를 만듭니다. VPC 기반 클러스터의 IP 범위IP 범위 계획을 참조하세요.

클러스터를 바꿀 수 없는 경우 노드당 최대 pod 수가 더 적은 새 노드 풀을 만들 수 있으면 문제를 해결할 수도 있습니다. 가능하면 워크로드를 노드 풀로 마이그레이션한 후 이전 노드 풀을 삭제합니다. 노드당 최대 pod 수를 줄이면 pod의 고정 보조 IP 주소 범위에서 더 많은 노드를 지원할 수 있습니다. 관련 계산에 대한 자세한 내용은 pod의 서브넷 보조 IP 주소 범위노드 제한 범위를 참조하세요.

기본 sNAT가 사용 중지되었는지 여부 확인

다음 명령어를 사용하여 기본 sNAT 상태를 확인합니다.

gcloud container clusters describe cluster-name

cluster-name을 클러스터 이름으로 바꿉니다.

출력에 다음과 같이 disableDefaultSnat 필드가 포함됩니다.

networkConfig:
  disableDefaultSnat: true
  network: ...

--enable-ip-alias 없이 --disable-default-snat을 사용할 수 없음

이 오류 메시지 및 must disable default sNAT (--disable-default-snat) before using public IP address privately in the cluster는 비공개 클러스터에서 공개 IP 주소를 사용하기 때문에 클러스터를 만들 때 --disable-default-snat 플래그를 명시적으로 설정해야 함을 나타냅니다.

cannot disable default sNAT ...와 같은 오류 메시지가 표시되면 클러스터에서 기본 SNAT를 사용 중지할 수 없음을 나타냅니다. 클러스터 구성을 검토하세요.

기본 sNAT가 사용 중지된 Cloud NAT 디버깅

--disable-default-snat 플래그로 비공개 클러스터가 생성되었고, 인터넷 액세스를 위해 Cloud NAT가 설정된 상태에서 pod의 인터넷 연결 트래픽이 보이지 않을 때는 pod 범위가 Cloud NAT 구성에 포함되어 있는지 확인하세요.

pod간 통신에 문제가 있으면 노드에서 iptables 규칙을 조사하여 pod 범위가 iptables 규칙으로 매스커레이드되지 않았는지 확인하세요. iptables 규칙 나열 방법 및 기본 규칙을 보려면 IP 매스커레이드 예시 iptables 출력을 참조하세요. 클러스터에 대해 IP 매스커레이드 에이전트를 구성하지 않은 경우 GKE는 자동으로 pod간 통신이 매스커레이드되지 않도록 합니다. 그러나 IP 매스커레이드 에이전트가 구성되어 있으면 기본 IP 매스커레이드 규칙보다 우선 적용됩니다. IP 매스커레이드 에이전트에서 pod 범위 매스커레이드를 무시하도록 추가 규칙이 구성되었는지 확인하세요.

제한사항

  • VPC 기반 클러스터를 경로 기반 클러스터로 변환할 수 없으며 반대의 경우도 마찬가지입니다.
  • VPC 기반 클러스터에는 VPC 네트워크가 필요합니다. 기존 네트워크는 지원되지 않습니다.

  • GKE 클러스터와 마찬가지로 클러스터 내에서만 서비스(ClusterIP) 주소를 사용할 수 있습니다. 클러스터 외부에 있지만 클러스터의 VPC 네트워크와 리전 내에 있는 VM 인스턴스에서 Kubernetes 서비스에 액세스해야 하는 경우에는 내부 TCP/UDP 부하 분산기를 만듭니다.

다음 단계