비공개 클러스터 설정

이 페이지에서는 Google Kubernetes Engine에서 비공개 클러스터를 만드는 방법을 설명합니다.

개요

비공개 클러스터에서 노드는 내부 RFC 1918 IP 주소만 가지므로 해당 작업 부하가 공개 인터넷에서 격리됩니다.

모든 클러스터에는 마스터라는 Kubernetes API 서버가 있습니다. 마스터는 Google 소유 프로젝트의 VM에서 실행됩니다. 비공개 클러스터에서는 마스터에 대한 액세스를 제어할 수 있습니다.

비공개 클러스터는 클러스터 노드에 공개 IP 주소가 없어도 HTTP(S) 부하 분산기 또는 네트워크 부하 분산기를 사용하여 들어오는 트래픽을 허용할 수 있습니다. 비공개 클러스터는 내부 부하 분산기를 사용하여 VPC 네트워크 내에서 오는 트래픽을 허용할 수도 있습니다.

특징

비공개 클러스터가 사용하는 GCP 기능은 다음과 같습니다.

VPC 네트워크 피어링
비공개 클러스터에는 VPC 네트워크 피어링이 필요합니다. VPC 네트워크에는 클러스터 노드가 포함되지만 Google 소유 프로젝트의 별도의 VPC 네트워크에는 마스터가 포함됩니다. 두 VPC 네트워크는 VPC 네트워크 피어링을 사용하여 연결됩니다. 노드와 마스터 간의 트래픽은 전적으로 내부 IP 주소를 사용하여 라우팅됩니다.
비공개 Google 액세스
비공개 노드는 외부 IP 주소가 없기 때문에 아웃바운드 인터넷 액세스 권한이 없습니다. 비공개 Google 액세스는 Google의 비공개 네트워크를 통해 비공개 노드 및 해당 작업 부하에 Google Cloud Platform API 및 서비스에 대한 제한된 아웃바운드 액세스 권한을 제공합니다. 예를 들어 비공개 Google 액세스는 비공개 노드가 Google Container Registry에서 컨테이너 이미지를 가져오고 Stackdriver로 로그를 전송할 수 있게 해 줍니다.

요구사항

비공개 클러스터의 요구사항은 다음과 같습니다.

VPC 네이티브
비공개 클러스터는 별칭 IP 범위가 사용 설정된 VPC 네이티브 클러스터여야 합니다. VPC 네이티브 클러스터는 이전 네트워크와 호환되지 않습니다.
Kubernetes 버전 1.8.14-gke.0 이상
비공개 클러스터의 노드는 Kubernetes 버전 1.8.14-gke.0 이상을 실행해야 합니다.

제한사항

비공개 클러스터의 제한사항은 다음과 같습니다.

  • 비공개가 아닌 기존 클러스터는 비공개 클러스터로 전환할 수 없습니다.
  • 172.17.0.0/16과 겹치는 클러스터 마스터, 노드, 포드 또는 서비스 IP 범위는 사용할 수 없습니다.
  • 클러스터 마스터와 클러스터 노드 사이의 VPC 피어링을 삭제하거나 포트 10250에서 클러스터 마스터에서 노드로 전송되는 수신 트래픽을 허용하는 방화벽 규칙을 삭제하거나 기본 인터넷 게이트웨이의 기본 경로를 삭제하면 비공개 클러스터가 작동을 중지합니다.

제한사항

비공개 클러스터의 제한사항은 다음과 같습니다.

  • 생성되는 비공개 클러스터마다 고유한 VPC 네트워크 피어링을 사용합니다. 각 VPC 네트워크는 최대 25개의 다른 VPC 네트워크에 피어링할 수 있습니다.
  • 클러스터 마스터의 RFC 1918 블록 크기는 /28이어야 합니다.
  • GKE는 클러스터 마스터 주소 블록과의 겹침을 감지할 수 있지만 공유 VPC 네트워크 내에서의 겹침은 감지할 수 없습니다.

리전 클러스터의 제한사항

  • 현재는 프록시를 사용해서 비공개 IP 주소를 통해 클러스터 마스터에 연결할 수 없습니다.

시작하기 전에

이 작업을 준비하려면 다음 단계를 수행하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 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

마스터에 대한 액세스

비공개 클러스터에서 마스터는 2개의 엔드포인트를 갖습니다.

  • 비공개 엔드포인트: 마스터의 VPC 네트워크에서 내부 부하 분산기 뒤에 있는 마스터의 내부 IP 주소입니다. 노드는 비공개 엔드포인트를 사용하여 마스터와 통신합니다. VPC 네트워크에 있고 비공개 클러스터와 동일한 리전에 있는 모든 VM은 비공개 엔드포인트를 사용할 수 있습니다.

  • 공개 엔드포인트: 마스터의 외부 IP 주소입니다. 사용자는 공개 엔드포인트에 대한 액세스를 구성할 수 있습니다. 가장 제한적인 경우에는 공개 엔드포인트에 액세스할 수 없습니다. 특정 주소 범위가 공개 엔드포인트에 액세스할 수 있도록 승인하여 제한을 완화할 수 있습니다. 모든 제한을 제거하여 누구나 공개 엔드포인트에 액세스하도록 허용할 수도 있습니다.

클러스터 엔드포인트 결정

클러스터 엔드포인트를 결정하려면 다음 명령어를 사용하여 클러스터를 설명하세요.

gcloud container clusters describe [CLUSTER-NAME] \
    --zone=[ZONE] | --region=[REGION] \
    --format="get(privateClusterConfig.privateEndpoint)"
gcloud container clusters describe [CLUSTER-NAME] \
    --zone=[ZONE] | --region=[REGION] \
    --format="get(privateClusterConfig.publicEndpoint)"

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

  • [CLUSTER-NAME]은 클러스터의 이름입니다.
  • [ZONE]은 영역 클러스터의 영역이거나 [REGION]은 리전 클러스터의 리전입니다.

클러스터 엔드포인트에 대한 액세스

비공개 클러스터에는 클러스터 엔드포인트에 대한 액세스를 제어하는 세 가지 구성 조합이 있습니다. 다음 표에서는 이러한 세 가지 조합을 설명합니다.

공개 엔드포인트 액세스 사용 안 함 공개 엔드포인트 액세스 사용,
마스터 승인 네트워크 사용
공개 엔드포인트 액세스 사용,
마스터 승인 네트워크 사용 안 함
보안 마스터에 대한 최고 수준으로 제한된 액세스. 마스터의 공개 엔드포인트에 대한 클라이언트 액세스가 차단됩니다. 마스터에 대한 액세스는 내부 IP 주소에서 이루어져야 합니다. 사용자가 정의하는 내부 및 외부 IP 주소에서 마스터에 대한 제한된 액세스. 모든 IP 주소에서 마스터에 액세스.
GCP Console 구성 옵션

VPC 네이티브 사용을 선택합니다.
비공개 클러스터를 선택합니다.
외부 IP 주소를 사용하여 마스터에 액세스 선택을 취소합니다.

마스터 승인 네트워크 사용이 자동으로 사용 설정됩니다.

VPC 네이티브 사용을 선택합니다.
비공개 클러스터를 선택합니다.
외부 IP 주소를 사용하여 마스터에 액세스를 선택합니다.
마스터 승인 네트워크 사용을 선택합니다.
VPC 네이티브 사용을 선택합니다.
비공개 클러스터를 선택합니다.
외부 IP 주소를 사용하여 마스터에 액세스를 선택합니다.
마스터 승인 네트워크 사용 선택을 취소합니다.
gcloud 클러스터 생성 플래그 --enable-ip-alias
--enable-private-nodes
--enable-private-endpoint
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--enable-master-authorized-networks
--master-authorized-networks=0.0.0.0/0
노드와 마스터 간의 통신

노드는 항상 비공개 네트워크를 사용하여 마스터와 통신합니다.

마스터 승인 네트워크

노드 및 포드 외의 내부 IP 주소에서 마스터에 액세스하는 데 필요합니다.

노드와 포드의 내부 IP 주소 범위를 명시적으로 승인할 필요는 없습니다. 이러한 내부 주소는 항상 비공개 엔드포인트와의 통신이 승인됩니다.

--master-authorized-networks를 사용하여 마스터에 액세스할 수 있는 추가 내부 IP 주소를 지정하세요. 공개 엔드포인트에 대한 액세스가 사용 안 함으로 설정되어 있으므로 마스터 승인 네트워크 목록에 외부 IP 주소를 포함할 수 없습니다.

외부 IP 주소와 노드 및 포드 외의 내부 IP 주소에서 마스터에 액세스하는 데 필요합니다.

--master-authorized-networks를 사용하여 마스터에 액세스할 수 있는 외부 및 내부 IP 주소(노드 및 포드 제외)를 지정하세요.

사용되지 않음.

마스터 승인 네트워크를 사용 설정하지 않고 마스터의 공개 엔드포인트에 대한 액세스를 사용 설정하면 마스터의 공개 엔드포인트에 대한 액세스가 제한되지 않습니다.

kubectl을 사용한 액세스

노드에서: 항상 비공개 엔드포인트를 사용합니다. kubectl비공개 엔드포인트를 사용하도록 구성되어야 합니다.

클러스터의 VPC 네트워크에 있는 다른 VM에서: 다른 VM은 클러스터와 같은 리전에 있고 내부 IP 주소가 마스터 승인 네트워크 목록에 포함된 경우에만 kubectl을 사용하여 비공개 엔드포인트와 통신할 수 있습니다.

공개 IP 주소에서: 불가능합니다.

노드에서: 항상 비공개 엔드포인트를 사용합니다. kubectl비공개 엔드포인트를 사용하도록 구성되어야 합니다.

클러스터의 VPC 네트워크에 있는 다른 VM에서: 다른 VM은 클러스터와 같은 리전에 있고 내부 IP 주소가 마스터 승인 네트워크 목록에 포함된 경우에만 kubectl을 사용하여 비공개 엔드포인트와 통신할 수 있습니다.

공개 IP 주소에서: 공개 IP 주소가 있는 머신은 공개 IP 주소가 마스터 승인 네트워크 목록에 포함된 경우에만 kubectl을 사용하여 공개 엔드포인트와 통신할 수 있습니다. 여기에는 GCP 외부의 머신과 외부 IP 주소가 있는 GCP VM이 포함됩니다.

노드에서: 항상 비공개 엔드포인트를 사용합니다. kubectl비공개 엔드포인트를 사용하도록 구성되어야 합니다.

클러스터의 VPC 네트워크에 있는 다른 VM에서: 다른 VM은 클러스터와 같은 리전에 있는 경우에만 kubectl을 사용하여 비공개 엔드포인트와 통신할 수 있습니다.

공개 IP 주소에서: 공개 IP 주소가 있는 모든 머신은 kubectl을 사용하여 공개 엔드포인트와 통신할 수 있습니다. 여기에는 GCP 외부의 머신과 외부 IP 주소가 있는 GCP VM이 포함됩니다.

공개 엔드포인트에 대한 액세스가 제한된 비공개 클러스터 만들기

비공개 클러스터를 만들 때 클러스터 마스터가 사용할 /28 RFC 1918 주소 범위를 지정해야 합니다. 클러스터 마스터에 지정하는 범위는 VPC 네트워크의 하위 네트워크와 겹치면 안 됩니다. 클러스터를 만든 후에는 클러스터 마스터의 주소 범위를 변경할 수 없습니다.

자동 생성된 서브넷 사용

이 섹션에서는 이름이 private-cluster-0인 비공개 클러스터를 만듭니다. GKE는 클러스터 노드의 서브넷을 자동으로 생성합니다. 이 서브넷은 비공개 Google 액세스가 사용 설정되어 있습니다. 서브넷에서 GKE는 두 개의 보조 범위를 자동으로 만듭니다. 하나는 포드용이고 하나는 서비스용입니다.

gcloud

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

gcloud container clusters create private-cluster-0 \
    --create-subnetwork name=my-subnet-0 \
    --enable-master-authorized-networks \
    --enable-ip-alias \
    --enable-private-nodes \
    --master-ipv4-cidr 172.16.0.0/28 \
    --no-enable-basic-auth \
    --no-issue-client-certificate

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

  • --enable-master-authorized-networks는 공개 엔드포인트에 대한 액세스가 사용자가 승인하는 IP 주소 범위로 제한된다고 지정합니다.
  • --create-subnetwork name=my-subnet-0은 GKE가 my-subnet-0이라는 서브넷을 자동으로 생성하도록 합니다.
  • --enable-ip-alias는 클러스터를 VPC 네이티브로 만듭니다.
  • --enable-private-nodes는 클러스터의 노드에 외부 IP 주소가 없음을 나타냅니다.
  • --master-ipv4-cidr 172.16.0.0/28은 마스터의 RFC 1918 범위를 지정합니다. 이 설정은 이 클러스터에서 영구적으로 유지됩니다.

콘솔

다음 단계를 수행하세요.

  1. Google Cloud Platform Console에서 GKE 메뉴로 이동합니다.

    GKE 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 표준 클러스터 템플릿을 선택하거나 작업 부하에 적합한 템플릿을 선택합니다.

  4. 클러스터 이름my-subnet-0을 입력합니다.

  5. 메뉴 하단에서 고급 옵션을 클릭합니다.

  6. VPC 네이티브에서 VPC 네이티브 사용(별칭 IP 사용) 체크박스를 선택합니다. 네트워크 드롭다운 메뉴는 default로, 노드 서브넷 드롭다운 메뉴는 default로 설정된 상태로 둡니다. 이렇게 하면 GKE가 클러스터의 서브넷을 생성합니다.

  7. 네트워크 보안에서 비공개 클러스터 체크박스를 선택합니다.

  8. 승인된 외부 IP 범위에서 액세스할 수 있는 마스터를 만들려면 외부 IP 주소를 사용하여 마스터 액세스 체크박스를 선택한 상태로 둡니다.

  9. 마스터 IP 범위172.16.0.0/28로 설정합니다.

  10. 마스터 승인 네트워크 사용 체크박스를 선택한 상태로 둡니다.

  11. Kubernetes 대시보드 사용 체크박스의 선택을 취소합니다.

  12. 클라이언트 인증서 발급 체크박스의 선택을 취소합니다.

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

API

Cluster API 리소스에서 privateClusterConfig 필드를 지정합니다.

{
  "name": "private-cluster-0",
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "createSubnetwork": true,
  },
  ...
    "privateClusterConfig" {
      "enablePrivateNodes": boolean # Creates nodes with internal IP addresses only
      "enablePrivateEndpoint": boolean # false creates a cluster master with a publicly-reachable endpoint
      "masterIpv4CidrBlock": string # CIDR block for the cluster master
      "privateEndpoint": string # Output only
      "publicEndpoint": string # Output only
  }
}

이 시점에서, 다음의 IP 주소에서만 클러스터 마스터에 액세스할 수 있습니다.

  • my-subnet-0의 기본 범위
  • 포드에 사용되는 보조 범위

VPC 네트워크 외부에 203.0.113.0/29 범위의 주소를 가진 머신 그룹이 있다고 가정해 보겠습니다. 다음 명령어를 입력하여 이 머신들이 공개 엔드포인트에 액세스하도록 승인할 수 있습니다.

gcloud container clusters update private-cluster-0 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

그러면 다음의 IP 주소에서만 클러스터 마스터에 액세스할 수 있습니다.

  • my-subnet-0의 기본 범위
  • 포드에 사용되는 보조 범위
  • 승인한 주소 범위(예: 203.0.113.0/29)

커스텀 서브넷 사용

이 섹션에서는 이름이 private-cluster-1인 비공개 클러스터를 만듭니다. my-net-1 네트워크를 만듭니다. 클러스터 노드를 위해 기본 범위가 192.168.0.0/20인 서브넷 my-subnet-1을 만듭니다. 서브넷에는 2개의 보조 주소 범위(포드 IP 주소를 위한 my-pods-1서비스 IP 주소를 위한 my-services-1)가 있습니다.

gcloud

네트워크 만들기

먼저 클러스터의 네트워크를 만듭니다. 다음 명령어는 my-net-1 네트워크를 만듭니다.

gcloud compute networks create my-net-1 \
    --subnet-mode custom

서브넷 및 보조 범위 만들기

다음으로 my-net-1 네트워크에 포드를 위한 보조 범위 my-pods-1과 서비스를 위한 보조 범위 my-services-1이 있는 서브넷 my-subnet-1을 만듭니다.

gcloud compute networks subnets create my-subnet-1 \
    --network my-net-1\
    --region us-central1 \
    --range 192.168.0.0/20 \
    --secondary-range my-pods-1=10.4.0.0/14,my-services-1=10.0.32.0/20 \
    --enable-private-ip-google-access

비공개 클러스터 만들기

이제 생성한 네트워크, 서브넷, 보조 범위를 사용하여 비공개 클러스터 private-cluster-1을 만듭니다.

gcloud container clusters create private-cluster-1 \
    --zone us-central1-c \
    --enable-master-authorized-networks \
    --enable-ip-alias \
    --network my-net-1 \
    --subnetwork my-subnet-1 \
    --cluster-secondary-range-name my-pods-1 \
    --services-secondary-range-name my-services-1 \
    --enable-private-nodes \
    --master-ipv4-cidr 172.16.0.16/28 \
    --no-enable-basic-auth \
    --no-issue-client-certificate

콘솔

네트워크, 서브넷, 보조 범위 만들기

  1. GCP Console에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크 페이지로 이동

  2. VPC 네트워크 만들기를 클릭합니다.

  3. 이름에서 my-net-1을 입력합니다.

  4. 서브넷 생성 모드커스텀으로 설정되었는지 확인합니다.

  5. 새 서브넷에서 이름my-subnet-1을 입력합니다.

  6. 리전 드롭다운 메뉴에서 원하는 리전을 선택합니다.

  7. IP 주소 범위192.168.0.0/20을 입력합니다.

  8. 보조 IP 범위 만들기를 클릭합니다. 서브넷 범위 이름my-services-1을 입력하고, 보조 IP 범위10.0.32.0/20을 입력합니다.

  9. IP 범위 추가를 클릭합니다. 서브넷 범위 이름my-pods-1을 입력하고, 보조 IP 범위10.4.0.0/14를 입력합니다.

  10. 비공개 Google 액세스에서 켜기를 클릭합니다.

  11. 완료를 클릭합니다.

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

비공개 클러스터 만들기

서브넷을 사용하는 비공개 클러스터를 만듭니다.

  1. GCP Console에서 GKE 메뉴로 이동합니다.

    GKE 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 표준 클러스터 템플릿을 선택하거나 작업 부하에 적합한 템플릿을 선택합니다.

  4. 클러스터 이름private-cluster-1을 입력합니다.

  5. 메뉴 하단에서 고급 옵션을 클릭합니다.

  6. VPC 네이티브에서 VPC 네이티브 사용(별칭 IP 사용) 체크박스를 선택합니다.

  7. 네트워크 드롭다운 메뉴에서 my-net-1을 선택합니다.

  8. 노드 서브넷 드롭다운 메뉴에서 my-subnet-1을 선택합니다.

  9. 자동으로 보조 범위 만들기 체크박스 선택을 취소합니다.

  10. 포드 보조 CIDR 범위 드롭다운 메뉴에서 my-pods-1을 선택합니다.

  11. 서비스 보조 CIDR 범위 드롭다운 메뉴에서 my-services-1을 선택합니다.

  12. 네트워크 보안에서 비공개 클러스터 체크박스를 선택합니다.

  13. 마스터 IP 범위172.16.0.16/28로 설정합니다.

  14. 마스터 승인 네트워크 사용 체크박스를 선택한 상태로 둡니다.

  15. Kubernetes 대시보드 사용 체크박스의 선택을 취소합니다.

  16. 클라이언트 인증서 발급 체크박스의 선택을 취소합니다.

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

이 시점에서, 다음의 IP 주소에서만 클러스터 마스터에 액세스할 수 있습니다.

  • my-subnet-1의 기본 범위
  • 보조 범위 my-pods-1

my-net-1 외부에 203.0.113.0/29 범위의 주소를 가진 머신 그룹이 있다고 가정해 보겠습니다. 다음 명령어를 입력하여 이 머신들이 공개 엔드포인트에 액세스하도록 승인할 수 있습니다.

gcloud container clusters update private-cluster-1 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

이 시점에서, 다음의 IP 주소에서만 클러스터 마스터에 액세스할 수 있습니다.

  • my-subnet-1의 기본 범위
  • 보조 범위 my-pods-1
  • 승인한 주소 범위(예: 203.0.113.0/29)

공개 엔드포인트에 클라이언트가 액세스할 수 없는 비공개 클러스터 만들기

이 섹션에서는 비공개 노드가 있고 공개 엔드포인트에 액세스할 수 없는 비공개 클러스터를 만듭니다. VPC 네트워크 내에서만 클러스터 마스터에 액세스할 수 있습니다. VPC 네트워크 외부에서는 마스터에 전혀 액세스할 수 없습니다.

gcloud

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

gcloud container clusters create private-cluster-2 \
    --create-subnetwork name=my-subnet-2 \
    --enable-master-authorized-networks \
    --enable-ip-alias \
    --enable-private-nodes \
    --enable-private-endpoint \
    --master-ipv4-cidr 172.16.0.32/28 \
    --no-enable-basic-auth \
    --no-issue-client-certificate

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

  • --enable-master-authorized-networks는 공개 엔드포인트에 대한 액세스가 사용자가 승인하는 IP 주소 범위로 제한된다고 지정합니다.
  • --create-subnetwork name=my-subnet-2은 GKE가 my-subnet-2라는 서브넷을 자동으로 생성하도록 합니다.
  • --enable-ip-alias는 클러스터를 VPC 네이티브로 만듭니다.
  • --enable-private-nodes는 클러스터의 노드에 외부 IP 주소가 없음을 나타냅니다.
  • --master-ipv4-cidr 172.16.0.32/28은 마스터의 RFC 1918 범위를 지정합니다. 이 설정은 이 클러스터에 영구적으로 유지됩니다.

Console

다음 단계를 수행하세요.

  1. Google Cloud Platform Console에서 GKE 메뉴로 이동합니다.

    GKE 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 표준 클러스터 템플릿을 선택하거나 작업 부하에 적합한 템플릿을 선택합니다.

  4. 클러스터 이름my-subnet-2를 입력합니다.

  5. 메뉴 하단에서 고급 옵션을 클릭합니다.

  6. VPC 네이티브에서 VPC 네이티브 사용(별칭 IP 사용) 체크박스를 선택합니다. 네트워크 드롭다운 메뉴는 default로, 노드 서브넷 드롭다운 메뉴는 default로 설정된 상태로 둡니다. 이렇게 하면 GKE가 클러스터의 서브넷을 생성합니다.

  7. 네트워크 보안에서 비공개 클러스터 체크박스를 선택합니다.

  8. 외부 IP 주소를 사용하여 마스터에 액세스 체크박스의 선택을 취소합니다. 마스터 승인 네트워크 사용

  9. 마스터 IP 범위172.16.0.32/28로 설정합니다.

  10. 마스터 승인 네트워크 체크박스 사용은 자동으로 선택됩니다.

  11. Kubernetes 대시보드 사용 체크박스의 선택을 취소합니다.

  12. 클라이언트 인증서 발급 체크박스의 선택을 취소합니다.

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

API

공개적으로 연결 가능한 마스터가 있는 클러스터를 만들려면 privateClusterConfig 리소스에 enablePrivateEndpoint: true 필드를 지정합니다.

이 시점에서, 다음의 IP 주소에서만 클러스터 마스터에 액세스할 수 있습니다.

  • my-subnet-2의 기본 범위
  • 포드에 사용되는 보조 범위

예를 들어 기본 범위 my-subnet-2에 VM을 만들었다고 가정해 보겠습니다. 그런 다음 이 VM에서 마스터의 내부 IP 주소를 사용하도록 kubectl을 구성할 수 있습니다.

my-subnet-2 외부에서 클러스터 마스터에 액세스하려면 비공개 엔드포인트에 액세스할 수 있는 하나 이상의 주소 범위를 승인해야 합니다.

기본 네트워크에 있고 클러스터와 동일한 리전에 있지만 my-subnet-2에 있지 않은 VM이 있다고 가정해 보겠습니다.

예:

  • my-subnet-2: 10.0.0.0/22
  • 포드 보조 범위: 10.52.0.0/14
  • VM 주소: 10.128.0.3

다음 명령어를 사용하여 VM이 마스터에 액세스하도록 승인할 수 있습니다.

gcloud container clusters update private-cluster-2 \
    --enable-master-authorized-networks \
    --master-authorized-networks 10.128.0.3/32

공유 VPC 네트워크에서 비공개 클러스터 만들기

공유 VPC 네트워크에서 비공개 클러스터를 만드는 방법은 공유 VPC 문서를 참조하세요.

마스터 승인 네트워크 참고 사항

승인된 네트워크의 제한사항은 다음과 같습니다.

  • 프로젝트에서 승인된 네트워크(허용 목록에 포함된 CIDR 블록)를 최대 20개까지 추가할 수 있습니다.
  • 승인된 네트워크의 CIDR 최대 크기는 /24입니다.

자세한 내용은 기존 클러스터에 승인된 네트워크 추가를 참조하세요.

노드에 외부 IP가 없는지 확인

비공개 클러스터를 만든 후에 클러스터의 노드에 외부 IP 주소가 없는지 확인해야 합니다.

gcloud

클러스터 노드에 외부 IP 주소가 없는지 확인하려면 다음 명령어를 실행하세요.

kubectl get nodes --output wide

출력의 EXTERNAL-IP 열이 비어 있습니다.

STATUS ... VERSION   EXTERNAL-IP  OS-IMAGE ...
Ready      v.8.7-gke.1                 Container-Optimized OS from Google
Ready      v1.8.7-gke.1                Container-Optimized OS from Google
Ready      v1.8.7-gke.1                Container-Optimized OS from Google

Console

클러스터의 노드에 외부 IP 주소가 없는지 확인하기 위해 다음 단계를 수행합니다.

  1. GCP Console에서 GKE 메뉴로 이동합니다.

    GKE 메뉴로 이동

  2. 클러스터 목록에서 원하는 클러스터를 클릭합니다.

  3. 노드 풀 아래에서 인스턴스 그룹의 이름을 클릭합니다. 예: gke-private-cluster-0-default-pool-5c5add1f-grp.

  4. 인스턴스 목록에서 인스턴스에 외부 IP 주소가 없는지 확인합니다.

클러스터의 서브넷 및 보조 주소 범위 확인

비공개 클러스터를 만든 후에는 사용자 또는 GKE가 클러스터에 프로비저닝한 서브넷 및 보조 주소 범위를 확인할 수 있습니다.

gcloud

모든 서브넷 나열

클러스터의 네트워크에 있는 서브넷을 나열하려면 다음 명령어를 실행하세요.

gcloud compute networks subnets list --network [NETWORK]

여기서 [NETWORK]는 비공개 클러스터의 네트워크입니다. 자동 생성된 서브넷으로 클러스터를 만든 경우 default를 사용합니다.

명령 프롬프트에서 클러스터의 서브넷 이름을 찾습니다.

클러스터의 서브넷 보기

자동 생성된 서브넷에 대한 정보를 가져옵니다.

gcloud compute networks subnets describe [SUBNET_NAME]

여기서 [SUBNET_NAME]은 서브넷의 이름입니다.

출력에는 노드의 기본 주소 범위(첫 번째 ipCidrRange 필드) 및 포드 및 서비스의 보조 범위(secondaryIpRanges 아래)가 표시됩니다.

...
ipCidrRange: 10.0.0.0/22
kind: compute#subnetwork
name: gke-private-cluster-1-subnet-163e3c97
...
privateIpGoogleAccess: true
...
secondaryIpRanges:

  • ipCidrRange: 10.40.0.0/14 rangeName: gke-private-cluster-1-pods-163e3c97
  • ipCidrRange: 10.0.16.0/20 rangeName: gke-private-cluster-1-services-163e3c97 ...

Console

  1. GCP Console에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크 페이지로 이동

  2. 서브넷의 이름을 클릭합니다. 예: gke-private-cluster-0-subnet-163e3c97.

  3. IP 주소 범위 아래에서 서브넷의 기본 주소 범위를 볼 수 있습니다. 이것은 노드에 사용되는 범위입니다.

  4. 보조 IP 범위 아래에서 포드의 IP 주소 범위와 서비스의 범위를 볼 수 있습니다.

비공개 클러스터의 엔드포인트 보기

gcloud 명령줄 도구 또는 GCP Console을 사용하여 비공개 클러스터 엔드포인트를 볼 수 있습니다.

gcloud

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

gcloud container clusters describe [CLUSTER_NAME]

출력은 비공개 엔드포인트와 공개 엔드포인트를 모두 보여 줍니다.

...
privateClusterConfig:
enablePrivateEndpoint: true
enablePrivateNodes: true
masterIpv4CidrBlock: 172.16.0.32/28
privateEndpoint: 172.16.0.34
publicEndpoint: 35.239.154.67

Console

다음 단계를 수행하세요.

  1. GCP Console에서 GKE 메뉴로 이동합니다.

    GKE 메뉴로 이동

  2. 목록에서 원하는 클러스터를 클릭합니다.

  3. 세부정보 탭의 클러스터에서 엔드포인트 필드를 찾습니다.

이미지 레지스트리에서 컨테이너 이미지 가져오기

비공개 클러스터에서 컨테이너 런타임은 Container Registry에서 컨테이너 이미지를 가져올 수 있습니다. 인터넷에 있는 다른 컨테이너 이미지 레지스트리에서는 이미지를 가져올 수 없습니다. 비공개 클러스터의 노드는 외부 IP 주소가 없기 때문입니다. 따라서 기본적으로 Google 네트워크 외부의 서비스와 통신할 수 없습니다.

비공개 클러스터의 노드는 비공개 Google 액세스가 사용 설정된 네트워크에 있는 경우 Container Registry와 같은 Google 서비스와 통신할 수 있습니다.

다음 명령어는 Google 소유의 Container Registry 저장소에서 샘플 이미지를 가져오는 배포를 만듭니다.

kubectl run hello-deployment --image gcr.io/google-samples/hello-app:2.0

다른 비공개 클러스터 구성

앞에서 설명한 구성 외에도 다음과 같은 구성으로 비공개 클러스터를 실행할 수 있습니다.

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

비공개 노드는 외부 IP 주소가 없기 때문에 아웃바운드 인터넷 액세스 권한이 없습니다. 비공개 노드에 아웃바운드 인터넷 액세스 권한을 제공하려면 Cloud NAT를 사용하거나 자체 NAT 게이트웨이를 관리할 수 있습니다.

마스터에 대한 네트워크 프록시로 비공개 클러스터 실행

네트워크 프록시로 비공개 클러스터를 만들 수 있습니다. 따라서 사용자가 만들고 비공개 IP 공간에서 호스팅하는 프록시를 사용할 경우를 제외하면 네트워크 외부에서 클러스터 마스터에 연결할 수 없습니다.

자세한 내용은 외부 액세스를 위한 네트워크 프록시로 Google Kubernetes Engine 비공개 클러스터 만들기를 참조하세요.

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

기본적으로 방화벽 규칙은 클러스터 마스터가 포트 443(HTTPS) 및 10250(kubelet)에서만 노드에 대한 TCP 연결을 시작하도록 제한합니다. 일부 Kubernetes 기능의 경우, 추가 포트에서 액세스를 허용하도록 방화벽 규칙을 추가해야 할 수 있습니다. 예를 들어 Kubernetes 1.9 이하에서는 kubectl topheapster에 액세스하므로 포트 8080에서 TCP 연결을 허용하는 방화벽 규칙이 필요합니다. 이러한 액세스 권한을 부여하기 위해 방화벽 규칙을 추가할 수 있습니다.

다음 섹션에서는 비공개 클러스터에 방화벽 규칙을 추가하는 방법을 설명합니다.

클러스터 마스터의 CIDR 블록 보기

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

gcloud

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

gcloud container clusters describe [CLUSTER_NAME]

명령어 출력에서 masterIpv4CidrBlock 필드의 값을 기록해 둡니다.

Console

  1. GCP Console에서 GKE 메뉴로 이동합니다.

    GKE 메뉴로 이동

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

세부정보 탭의 클러스터 아래에서 마스터 주소 범위 필드의 값을 기록해 둡니다.

기존 방화벽 규칙 보기

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

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
    )'

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

Console

다음 단계를 수행하세요.

  1. GCP Console에서 방화벽 규칙 메뉴로 이동합니다.

    방화벽 규칙 메뉴로 이동

  2. 필터 리소스 상자에 gke-[CLUSTER_NAME]을 입력합니다.

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

방화벽 규칙 추가

gcloud

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

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

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

  • [FIREWALL_RULE_NAME]은 방화벽 규칙으로 선택한 이름입니다.
  • [MASTER_CIDR_BLOCK]은 이전에 수집한 클러스터 마스터의 CIDR 블록입니다.
  • [PROTOCOL]:[PORT]는 원하는 포트 및 해당 프로토콜(tcp 또는 udp)입니다.
  • [TARGET]은 이전에 수집한 대상 값입니다.

Console

다음 단계를 수행하세요.

  1. GCP Console에서 방화벽 규칙 메뉴로 이동합니다.

    방화벽 규칙 메뉴로 이동

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

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

  4. 네트워크 드롭다운 메뉴에서 관련 네트워크를 선택합니다.

  5. 트래픽 방향에서 수신을 클릭합니다.

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

  7. 대상 드롭다운 메뉴에서 지정된 대상 태그를 선택합니다.

  8. 대상 태그 상자에 이전에 수집한 대상 값을 입력합니다.

  9. 소스 필터 드롭다운 메뉴에서 IP 범위를 선택합니다.

  10. 소스 IP 범위 상자에 이전에 수집한 클러스터 마스터의 CIDR 블록을 입력합니다.

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

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

삭제

이 페이지의 작업을 완료한 후에는 다음 단계에 따라 리소스를 제거하여 계정에서 원치 않는 요금이 부과되지 않도록 합니다.

클러스터 삭제

gcloud

gcloud container clusters delete -q private-cluster-0 private-cluster-1

Console

  1. GCP Console에서 GKE 메뉴로 이동합니다.

    GKE 메뉴로 이동

  2. 각 클러스터를 선택합니다.

  3. 삭제를 클릭합니다.

네트워크 삭제

gcloud

gcloud compute networks delete net-0

Console

  1. GCP Console에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크 페이지로 이동

  2. 네트워크 목록의 net-0에서 휴지통 아이콘을 클릭합니다.

  3. 각 서브넷 옆에서 휴지통 아이콘을 클릭합니다.

문제해결

다음 섹션에서는 비공개 클러스터와 관련된 일반적인 문제를 해결하는 방법을 설명합니다.

클러스터가 활성 피어와 겹침

증상
비공개 클러스터를 만들려고 시도하면 Google Compute Engine: An IP range in the peer network overlaps with an IP range in an active peer of the local network.와 같은 오류가 반환됩니다.
가능한 원인
겹치는 마스터 CIDR을 선택했습니다.
해결 방법
클러스터를 삭제하고 다른 마스터 CIDR을 사용해서 클러스터를 다시 만듭니다.

마스터에 연결할 수 없음

증상
비공개 클러스터를 만든 후 클러스터에 대해 kubectl 명령어를 실행하려고 시도하면 Unable to connect to the server: dial tcp [IP_ADDRESS]: connect: connection timed out 또는 Unable to connect to the server: dial tcp [IP_ADDRESS]: i/o timeout과 같은 오류가 반환됩니다.
가능한 원인
kubectl이 클러스터 마스터에 연결할 수 없습니다.
해결 방법
네트워크의 IP 주소를 허용하도록 클러스터의 승인된 네트워크를 추가해야 합니다.

생략된 플래그로 인해 클러스터를 만들 수 없음

증상
gcloud container clusters createCannot specify --enable-private-endpoint without --enable-private-nodes.와 같은 오류를 반환합니다.
가능한 원인
필요한 플래그를 지정하지 않았습니다.
해결 방법
필요한 플래그를 지정해야 합니다. 또한 비공개 노드를 사용 설정하지 않으면 클러스터 마스터의 비공개 엔드포인트를 사용 설정할 수 없습니다.

겹치는 마스터 IPv4 CIDR 블록으로 인해 클러스터를 만들 수 없음

증상
gcloud container clusters createThe given master_ipv4_cidr 10.128.0.0/28 overlaps with an existing network 10.128.0.0/20.과 같은 오류를 반환합니다.
가능한 원인
VPC에서 기존 서브넷과 겹치는 마스터 CIDR 블록을 지정했습니다.
해결 방법
--master-ipv4-cidr에 대해 기존 서브넷과 겹치지 않는 CIDR 블록을 지정합니다.

서브넷을 만들 수 없음

증상
자동 서브넷으로 비공개 클러스터를 만들거나 커스텀 서브넷을 만들려고 시도할 때 다음 오류가 발생할 수 있습니다. An IP range in the peer network overlaps with an IP range in one of the active peers of the local network.
가능한 원인
지정한 마스터 CIDR 범위가 클러스터의 다른 IP 범위와 겹칩니다. 최근에 비공개 클러스터를 삭제하고 동일한 마스터 CIDR을 사용해서 새 비공개 클러스터를 만들려고 시도할 경우에도 이 문제가 발생할 수 있습니다.
해결 방법
다른 CIDR 범위를 사용해 봅니다.

공개 Docker 허브에서 이미지를 가져올 수 없음

증상
클러스터에서 실행 중인 포드가 kubectl describe에서 다음과 같은 경고를 표시합니다. Failed to pull image: rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
가능한 원인
비공개 클러스터의 노드에 공개 인터넷에 대한 아웃바운드 액세스 권한이 없습니다. Container Registry를 포함하여 Google API 및 서비스에 대한 액세스가 제한되어 있습니다.
해결 방법
비공개 클러스터에서 Docker 허브의 이미지를 사용하려면 Container Registry의 Docker 허브 미러에서 이미지를 가져오도록 Docker 데몬을 구성합니다. 그러면 Docker 허브에서 직접 가져오는 대신 미러에서 이미지를 가져옵니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine