클러스터에 서브넷 추가

이 페이지에서는 VPC 기반 클러스터에 추가 서브넷을 할당하는 방법을 보여줍니다. 클러스터에 할당된 추가 서브넷을 사용하면 노드 포드 모두의 IPv4 주소가 추가 서브넷 범위에서 가져오는 새 노드 풀을 만들 수 있습니다.

이 페이지는 조직의 네트워크를 설계하는 네트워킹 전문가를 대상으로 합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE 사용자 역할 및 태스크를 참고하세요.

개요

새 VPC 기반 GKE 클러스터를 만들 때 클러스터의 기본 서브넷을 선택합니다. 클러스터의 기본 서브넷은 VPC 기반 클러스터의 IP 주소 범위에 설명된 대로 노드, 포드, 서비스에 IPv4 주소를 제공합니다.

VPC 기반 클러스터에 최대 8개의 추가 서브넷을 할당하여 클러스터를 크게 확장할 수 있습니다. 새로 할당된 추가 서브넷을 기본이 아닌 서브넷이라고 합니다.

시작하기 전에

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

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면 gcloud components update 명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.

요구사항 및 제한사항

이 섹션에서는 클러스터에 추가 서브넷을 할당하고 사용할 때 적용되는 요구사항과 제한사항을 설명합니다. 추가 서브넷을 할당하기 전에 모든 요구사항을 충족해야 합니다.

  • GKE 클러스터가 GKE 버전 1.30.3-gke.1211000 이상을 실행하는 VPC 기반 클러스터인지 확인합니다. 경로 기반 클러스터와 기존 네트워크의 클러스터는 추가 서브넷을 지원하지 않습니다.
  • 클러스터당 최대 8개의 서브넷을 추가로 할당할 수 있습니다.
  • 추가 서브넷은 노드와 포드에 IPv4 주소만 제공합니다. 추가 서브넷은 노드 또는 포드에 IPv6 주소를 제공하는 데 사용할 수 없습니다.
  • 기존 노드 풀이 아닌 새 노드 풀만 추가 서브넷을 사용할 수 있습니다. 새 노드 풀을 만들 때 기본값이 아닌 여러 서브넷을 사용할 수 있는 경우 GKE는 IP 주소 요구사항과 모든 클러스터 서브넷의 IP 주소 가용성을 기반으로 노드 풀에 가장 적합한 서브넷을 선택합니다.
  • 새 노드 풀에서 사용하는 기본값이 아닌 서브넷을 제어할 수 없습니다. 예를 들어 클러스터에 기본 서브넷 (클러스터 생성 중에 사용되는 서브넷)과 기본이 아닌 서브넷 2개가 있는 경우 새 노드 풀에서 사용할 기본이 아닌 서브넷을 지정할 수 없습니다.
  • 기본값이 아닌 서브넷의 서브넷 보조 IPv4 주소 범위는 단일 클러스터에서만 사용할 수 있습니다.
  • 멀티 클러스터 게이트웨이에서는 추가 서브넷을 사용할 수 없습니다.
  • 포드에 대한 다중 네트워크 지원을 사용하는 경우 추가 서브넷의 기본 및 포드 IPv4 주소 범위가 다중 네트워크 설정 내에 구성된 CIDR 범위와 중복되어서는 안 됩니다. 구성하는 추가 서브넷은 기본 네트워크에만 적용됩니다. 이 제한으로 인해 노드와 포드의 추가 네트워크 인터페이스는 이러한 추가 서브넷에서 제공하는 IP 주소를 사용할 수 없습니다.
  • 기본 서브넷의 IP 주소 풀이 소진되면 추가 서브넷을 사용하더라도 클러스터를 자동 확장할 수 없습니다.
  • Cloud Service Mesh가 사용 설정된 클러스터에 서브넷을 추가하면 메시가 기본값이 아닌 서브넷의 Pod로 트래픽을 라우팅할 수 없습니다.

추가 서브넷이 있는 클러스터의 부하 분산기 요구사항

이 섹션에서는 클러스터에서 추가 서브넷을 사용할 때 적용되는 부하 분산기 요구사항을 설명합니다. 이러한 요구사항은 외부 인그레스, 외부 게이트웨이 또는 외부 LoadBalancer 서비스를 만들 때마다 적용됩니다.

  • 서브넷이 추가된 클러스터에서 외부 인그레스, 게이트웨이 또는 LoadBalancer 서비스를 사용하려면 클러스터에서 GKE 버전 1.33.2-gke.4780000 이상을 실행해야 합니다.
  • GKE 인그레스 컨트롤러를 사용하는 외부 인그레스 객체는 컨테이너 기반 부하 분산을 사용해야 합니다.
  • 내부 LoadBalancer 서비스에 대해 GKE 하위 설정 사용 설정 GKE 하위 설정은 내부 LoadBalancer 서비스에만 영향을 미칩니다. 따라서 GKE 하위 설정을 사용 설정한 후 클러스터의 기존 서비스를 삭제하고 다시 만들어야 합니다.
  • 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기를 만들려면 새 외부 LoadBalancer 서비스에 cloud.google.com/l4-rbs: "enabled" 주석이 포함되어야 합니다. 이 주석은 외부 LoadBalancer 서비스에만 영향을 미치며 기존 외부 LoadBalancer 서비스에는 적용되지 않습니다. cloud.google.com/l4-rbs: "enabled" 주석 없이 생성된 모든 외부 LoadBalancer 서비스를 삭제하고 다시 만듭니다.

    사용되는 백엔드 유형 (GCE_VM_IP NEG 백엔드 또는 인스턴스 그룹 백엔드)은 외부 LoadBalancer 서비스를 만들 때의 GKE 버전에 따라 다릅니다. 자세한 내용은 노드 그룹화를 참고하세요.

포드 IPv4 주소 범위가 하나인 새 서브넷 추가

  1. 새 서브넷을 만들고 새 서브넷 보조 IPv4 주소 범위를 추가합니다. 서브넷은 클러스터와 동일한 리전 및 VPC 네트워크에 있어야 합니다.

       gcloud compute networks subnets create SUBNET_NAME \
         --network=NETWORK \
         --region=REGION \
         --range=PRIMARY_RANGE \
         --secondary-range=POD_RANGE_NAME=SECONDARY_RANGE \
         --enable-private-ip-google-access
    

    다음을 바꿉니다.

    • SUBNET_NAME: 새 서브넷의 이름입니다.
    • NETWORK: 새 서브넷이 포함된 VPC 네트워크의 이름
    • REGION: 서브넷이 있는 리전
    • PRIMARY_RANGE: CIDR 표기법으로 표시된 새 서브넷의 기본 IPv4 주소 범위. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.
    • POD_RANGE_NAME: 보조 범위의 이름
    • SECONDARY_RANGE: CIDR 표기법으로 표시된 보조 IPv4 범위. 유효한 범위는 IPv4 서브넷 범위를 참고하세요.

    자세한 내용은 서브넷 작업을 참조하세요.

  2. gcloud CLI를 사용하여 추가 서브넷을 사용하도록 클러스터를 업데이트합니다.

       gcloud container clusters update CLUSTER_NAME \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 기존 클러스터의 이름입니다.
    • SUBNET_NAME: 생성한 새 서브넷의 이름입니다.
    • POD_RANGE_NAME: 포드 IPv4 주소 범위에 사용할 서브넷 보조 IPv4 주소 범위의 이름입니다.

포드 IPv4 주소 범위가 여러 개인 새 서브넷 추가

  1. 클러스터와 동일한 리전 및 VPC 네트워크에 새 서브넷을 만듭니다. 서브넷 기본 IPv4 주소 범위를 노드의 추가 IPv4 주소 범위로 설정합니다.

  2. 필요한 각 추가 포드 IPv4 주소 범위에 대해 이전 단계에서 만든 서브넷에 새 서브넷 보조 IPv4 주소 범위를 추가합니다.

  3. gcloud CLI를 사용하여 추가 서브넷을 사용하도록 클러스터를 업데이트합니다. 다음 예시에서는 포드용 서브넷 보조 IPv4 주소 범위가 두 개인 서브넷을 추가합니다.

       gcloud container clusters update CLUSTER_NAME \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_1 \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_2
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 기존 클러스터의 이름입니다.
    • SUBNET_NAME: 생성한 새 서브넷의 이름입니다.
    • POD_RANGE_NAME_1POD_RANGE_NAME_2: 포드 IPv4 주소 범위에 사용할 서브넷 보조 IPv4 주소 범위의 이름입니다.

서브넷 확인

클러스터별: 클러스터와 연결된 모든 서브넷의 세부정보를 보려면 다음 명령어를 실행합니다.

   gcloud container clusters describe CLUSTER_NAME

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

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

ipAllocationPolicy:
  additionalIPRangesConfig:
  - podIpv4RangeNames:
    - pod-range-1
    subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets

노드 풀별: 노드 풀과 연결된 모든 서브넷의 세부정보를 확인하려면 다음 명령어를 실행합니다.

gcloud container node-pools describe POOL_NAME \
    --cluster=CLUSTER_NAME \

다음을 바꿉니다.

  • POOL_NAME: 노드 풀의 이름
  • CLUSTER_NAME: 클러스터의 이름입니다.

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

name: pool-1
networkConfig:
  podRange: pod-range-1
  subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets

기본값이 아닌 서브넷 삭제

클러스터에서 기본값이 아닌 서브넷을 삭제하면 클러스터가 클러스터의 노드 풀에서 더 이상 서브넷의 범위를 사용하지 않도록 지시합니다. 삭제하면 다음과 같은 효과가 있습니다.

  • 기본값이 아닌 서브넷의 기본 IPv4 주소 범위는 노드 IPv4 주소 범위에 사용할 수 없습니다.
  • 기본값이 아닌 서브넷의 서브넷 보조 IPv4 범위는 포드 IPv4 범위에 사용할 수 없습니다.

기본값이 아닌 서브넷을 삭제하기 전에 이 서브넷을 사용하는 모든 노드 풀을 삭제해야 합니다. 서브넷을 드레이닝 상태로 설정하는 것이 좋습니다. 드레이닝 상태의 서브넷은 새로 생성된 노드 풀에서 사용되는 것으로 간주되지 않습니다. 이렇게 하면 전체 클러스터의 자동 확장 처리를 사용 중지하지 않고도 클러스터 자동 확장 처리 작업 (예: 노드 풀 수직 확장)에서 삭제하려는 서브넷을 선택하지 못하도록 할 수 있습니다.

서브넷을 삭제하는 단계는 다음과 같습니다.

  1. 기본값이 아닌 서브넷을 드레이닝 상태로 설정합니다. 이렇게 하면 새 노드 풀에서 이 서브넷을 선택할 수 없으므로 클러스터에서 자동 확장을 사용 설정할 때 유용합니다.
  2. 이 서브넷을 사용하는 모든 노드 풀을 삭제합니다.
  3. 클러스터에서 서브넷을 삭제합니다.

클러스터에서 기본값이 아닌 서브넷을 삭제하려면 다음 명령어를 실행합니다.

   gcloud container clusters update CLUSTER_NAME \
     --remove-additional-ip-ranges=subnetwork=SUBNET_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름입니다.
  • SUBNET_NAME: 클러스터에서 삭제할 서브넷의 이름입니다.

기본값이 아닌 서브넷의 상태를 드레이닝으로 설정하려면 다음 명령어를 실행합니다.

   gcloud container clusters update CLUSTER_NAME \
     --drain-additional-ip-ranges=subnetwork=SUBNET_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름입니다.
  • SUBNET_NAME: 드레인 상태로 설정할 서브넷의 이름입니다.

기본값이 아닌 서브넷의 드레인을 해제하려면 다음 명령어를 실행합니다.

   gcloud container clusters update CLUSTER_NAME \
     --undrain-additional-ip-ranges=subnetwork=SUBNET_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름입니다.
  • SUBNET_NAME: 드레인을 해제할 서브넷의 이름입니다.

클러스터에서 기본값이 아닌 서브넷을 삭제한 후 기본값이 아닌 서브넷을 삭제할 수 있습니다.

기본값이 아닌 서브넷 보조 IPv4 범위 삭제

클러스터에서 기본값이 아닌 서브넷 보조 IPv4 범위를 삭제하면 GKE는 클러스터에 노드 풀의 포드 IPv4 범위에 해당 범위를 사용하지 않도록 지시합니다. 삭제하는 기본값이 아닌 서브넷 보조 IPv4 범위가 이 클러스터에서 사용하는 기본값이 아닌 서브넷의 유일한 범위인 경우 GKE는 클러스터에 노드 IPv4 주소에 이 서브넷의 기본 IPv4 주소를 사용하지 않도록 지시합니다.

기본값이 아닌 서브넷 보조 IPv4 범위를 삭제하기 전에 포드 IPv4 주소에 해당 범위를 사용하는 모든 노드 풀을 삭제해야 합니다.

클러스터에서 기본값이 아닌 서브넷 보조 IPv4 범위를 삭제하려면 다음 명령어를 실행합니다.

   gcloud container clusters update CLUSTER_NAME \
     --remove-additional-ip-ranges=\
       subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • SUBNET_NAME: 기본값이 아닌 서브넷의 이름입니다.
  • POD_RANGE_NAME: 클러스터에서 삭제할 기본값이 아닌 서브넷 보조 IPv4 범위의 이름입니다.

클러스터에서 기본값이 아닌 서브넷 보조 IPv4 범위를 삭제한 후 기본값이 아닌 서브넷 보조 IPv4 범위를 삭제할 수 있습니다.

공유 VPC에서 추가 서브넷 사용

계속하기 전에 다음 사항을 확인하세요.

  • 호스트 및 서비스 프로젝트가 연결된 기능 공유 VPC 환경 안내는 공유 VPC로 클러스터 설정을 참고하세요.
  • 서비스 프로젝트에 있는 실행 중인 GKE 클러스터
  • 호스트 프로젝트와 서비스 프로젝트 모두에서 필요한 모든 API가 사용 설정되어 있습니다.
  1. GKE 클러스터와 동일한 네트워크 아래 호스트 프로젝트에 추가 서브넷을 만듭니다.

    gcloud compute networks subnets create ADDITIONAL_SUBNET_NAME \
      --project HOST_PROJECT_ID \
      --network shared-net \
      --range 172.16.4.0/22 \
      --region COMPUTE_REGION \
      --secondary-range ADDITIONAL_SUBNET_NAME-services=172.16.16.0/20,ADDITIONAL_SUBNET_NAME-pods=172.20.0.0/14
    
  2. IAM 정책을 가져옵니다. 서비스 프로젝트의 GKE 클러스터가 호스트 프로젝트의 공유 VPC 내 추가 서브넷에 액세스하도록 하려면 필요한 IAM 권한을 구성해야 합니다. 권한이 아직 구성되지 않은 경우 다음 단계를 진행합니다. 권한이 이미 있는 경우 별도의 조치가 필요하지 않습니다.

    gcloud compute networks subnets get-iam-policy ADDITIONAL_SUBNET_NAME \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    

    출력에 etag 필드가 포함됩니다. etag 값을 기록해 둡니다.

  3. 다음 내용이 포함된 ADDITIONAL_SUBNET_NAME-policy.yaml이라는 파일을 만듭니다.

      bindings:
      - members:
        - serviceAccount:SERVICE_PROJECT_NUM@cloudservices.gserviceaccount.com
        - serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com
        role: roles/compute.networkUser
      etag: ETAG_STRING
    

    ETAG_STRING을 앞에서 기록해 둔 etag 값으로 바꿉니다.

  4. ADDITIONAL_SUBNET_NAME 서브넷의 IAM 정책을 설정합니다.

      gcloud compute networks subnets set-iam-policy ADDITIONAL_SUBNET_NAME \
          ADDITIONAL_SUBNET_NAME-policy.yaml \
          --project HOST_PROJECT_ID \
          --region COMPUTE_REGION
    
  5. 공유 vpc 사용 가능한 서브넷 확인에 설명된 대로 사용 가능한 서브넷과 보조 IP 주소 범위를 확인합니다.

  6. 추가 서브넷의 공유 VPC 클러스터를 업데이트합니다.

    gcloud container clusters update CLUSTER_NAME \
        --project=SERVICE_PROJECT_ID \
        --location=CONTROL_PLANE_LOCATION \
        --additional-ip-ranges=subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/ADDITIONAL_SUBNET_NAME,pod-ipv4-range=ADDITIONAL_SUBNET_NAME-pods

다음을 바꿉니다.

  • CLUSTER_NAME: 서비스 프로젝트의 GKE 클러스터 이름입니다.
  • ADDITIONAL_SUBNET_NAME: 호스트 프로젝트에서 만든 추가 서브넷의 이름입니다 (예: tier-2).
  • HOST_PROJECT_ID: 호스트 프로젝트 ID입니다.
  • SERVICE_PROJECT_NUM: 서비스 프로젝트 이름
  • COMPUTE_REGION: 서브넷이 있는 리전

이렇게 하면 공유 VPC 환경에서 추가 서브넷을 사용할 수 있습니다.

다음 단계