워크로드 네트워킹용 서브넷 구성

IP 주소 관리 (IPAM) 공개 API 서브넷이 있는 각 Google Distributed Cloud (GDC) 오프라인 영역에 할당된 전역 루트 서브넷이 있습니다. 전역 루트 서브넷은 조직 인프라 클러스터 및 워크로드 VM을 비롯한 테넌트 조직 내의 모든 클러스터를 부트스트랩하기 위해 각 영역으로 분할되는 루트 IP 주소 범위 (CIDR) 풀을 호스팅합니다. IP 주소 범위의 일부는 루트 서브넷에서 애니캐스트 IP 주소 풀로 사용할 수 있습니다.

조직을 만든 후 GDC 유니버스의 서브넷에 대해 다음 운영 작업을 완료할 수 있습니다.

새 영역의 루트 범위 전역 서브넷 만들기

각 영역에는 루트 범위 전역 서브넷이 있어야 합니다. GDC 유니버스의 초기 조직 부트스트랩 단계에서 각 영역에는 전역 서브넷이 자동으로 생성됩니다. 하지만 초기 설치 후 새 영역이 추가되면 새 영역의 루트 범위 전역 서브넷을 수동으로 만들어야 합니다.

새 영역의 네트워크 루트 범위 서브넷의 CIDR 범위 정의

CIDR 범위를 정의하기 위한 조직 설치 안내와 마찬가지로 CIDR 범위는 서로 겹칠 수 없으며 zone-infra-cidr 및 기존 루트 전역 서브넷과 겹칠 수 없습니다. 기존 루트 전역 서브넷은 맞춤 리소스 사양에 ipam.gdc.goog/usage: network-root-range 라벨이 있는 서브넷입니다.

zone-infra-cidr는 각 영역에 있으며 고객이 정의한 경우 고객 인테이크 설문지 (CIQ)에서 가져올 수 있습니다.

  1. zone-infra-cidr를 가져오려면 다음을 실행합니다.

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system zone-infra-cidr
    

    CIDR 범위를 확인합니다.

  2. 조직에 할당할 이름과 일치하는 이름의 네임스페이스가 있어야 합니다. 이 네임스페이스가 있는지 확인합니다.

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get namespace ORG_NAME
    
  3. 기존 루트 전역 서브넷을 가져옵니다.

    • 전역 루트 관리자 클러스터의 경우 다음을 실행합니다.

      kubectl –kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet \
          -n ORG_NAME  -l ipam.gdc.goog/usage=network-root-range
      
    • 전역 조직 관리자 API 서버의 경우 다음을 실행합니다.

      kubectl –kubeconfig GLOBAL_ORG_API_SERVER_KUBECONFIG get subnet \
          -n platform -l ipam.gdc.goog/usage=network-root-range
      

      출력의 모든 CIDR 범위를 기록해 둡니다.

  4. 새로 계획된 CIDR 범위가 이전 CIDR 범위와 겹치지 않는지 확인합니다.

새 CIDR 범위가 새 영역에 유효한지 확인한 후 CIDR 범위가 다음 규칙을 준수하는지 확인합니다.

CIDR 범위 필드입니다. 최소 크기 VPC/VRF 전역 API 서버
zoneInfraVPCCIDR 17 인프라 VPC 전역 루트
zoneDefaultVPCCIDR 18 기본 VPC 글로벌 조직
zoneOrgAdminExternalCIDR 23 관리 네트워크 세그먼트 전역 루트
zoneOrgDataExternalCIDR 23 데이터 네트워크 세그먼트 전역 루트

전역 루트 관리 API 서버에서 서브넷 만들기

전역 루트 관리자 API 서버에서 서브넷을 만들려면 다음 단계를 완료하세요.

  1. 유니버스에서 영역을 나열하고 새 영역 이름을 찾습니다.

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -A
    
  2. 조직의 새 영역에 대한 영역 네트워크 루트 범위 infra-vpc 서브넷을 만듭니다.

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/vpc: infra-vpc
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: infra-vpc-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneInfraVPCCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    
  3. 조직의 새 영역에 대한 영역 네트워크 루트 범위 데이터 네트워크 세그먼트 서브넷을 만듭니다.

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/network-segment: data
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: data-external-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneOrgDataExternalCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    
  4. 조직의 새 영역에 대한 영역 네트워크 루트 범위 관리 네트워크 세그먼트 서브넷을 만듭니다.

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/network-segment: admin
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: admin-external-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneOrgAdminExternalCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    

전역 조직 관리자 API 서버에서 서브넷 만들기

API 서버가 실행된 후 조직의 전역 조직 관리자 API 서버에서 platform 네임스페이스 내에 기본 VPC 서브넷을 만들어야 합니다.

다음 Subnet 커스텀 리소스를 만들고 적용합니다.

kubectl apply -f --kubeconfig=GLOBAL_ORG_API_SERVER_KUBECONFIG - <<EOF
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
    ipam.gdc.goog/vpc: default-vpc
    ipam.gdc.goog/usage: zone-network-root-range
  name: default-vpc-NEW_ZONE_NAME-root-cidr
  namespace: platform
spec:
  type: Root
  ipv4Request:
    cidr: zoneDefaultVPCCIDR
  zone: NEW_ZONE_NAME
  propagationStrategy: SingleZone
EOF

업스케일 서브넷

공개 Subnet 리소스는 자동 업스케일링을 지원하지 않습니다. 고객 관리 VPC 또는 네트워크 세그먼트에 CIDR 범위를 추가하려면 새 서브넷을 만들고 특정 라벨로 그룹화해야 합니다. 루트 관리자 클러스터에 대한 액세스가 필요하므로 고객이 서브넷을 독립적으로 확장할 수 없습니다.

서브넷 그룹화 규칙

서브넷은 라벨별로 여러 카테고리로 그룹화됩니다.

카테고리 라벨
기본 VPC ipam.gdc.goog/vpc: default-vpc
인프라 VPC ipam.gdc.goog/vpc: infra-vpc
관리 네트워크 세그먼트 ipam.gdc.goog/network-segment: admin
데이터 네트워크 세그먼트 ipam.gdc.goog/network-segment: data

초기 부트스트랩 중에 조직 인테이크 설문지 (OIQ)에 CIDR 범위 4개가 지정되었습니다. 이러한 4개의 전역 서브넷은 고객 조직 생성 중에 전역 API 서버에서 생성되었습니다. 이러한 전역 서브넷은 조직의 모든 영역에 걸쳐 각 카테고리의 루트 수준 CIDR 범위입니다. 모든 루트 수준 전역 서브넷에는 ipam.gdc.goog/usage: network-root-range 라벨이 있습니다.

각 영역에 대해 루트 수준 서브넷에서 잘라낸 하위 전역 서브넷이 전역 API 서버에 생성됩니다. 각 하위 전역 서브넷은 특정 영역의 카테고리에 대한 CIDR 범위를 호스팅하고 ipam.gdc.goog/usage: zone-network-root-range 라벨이 있습니다. 영역의 하위 전역 서브넷은 특정 영역에 자동으로 전파됩니다.

일반적인 업스케일링 사용 사례

기존 서브넷을 확장하기 위해 추가 서브넷을 가장 효율적으로 할당하려면 각 서브넷 카테고리에 권장되는 사용 사례를 고려하세요. 업스케일링 프로세스를 시작하기 전에 업스케일링할 카테고리를 결정합니다.

기본 VPC

default-vpc의 서브넷은 주로 공유 서비스 클러스터, 사용자 클러스터, 조직의 클러스터 노드 IP 주소 및 워크로드 IP 주소용 default-vpc-default-node-subnet의 포드 및 서비스 CIDR을 할당하는 데 사용됩니다.

사용자 클러스터를 만들지 못하는 것은 서브넷 업스케일링이 필요할 수 있는 일반적인 시나리오입니다.

사용자 클러스터의 포드 또는 서비스 CIDR의 상위 서브넷을 찾을 수 없어 사용자 클러스터 생성이 실패할 수 있습니다. 이 실패에 대한 샘플 메시지는 다음과 유사합니다.

could not find parent for subnet platform/user-vm-1-service-cidr

이 문제는 서브넷을 확장해야 하는 필요성과 직접적으로 관련된 여러 가지 이유로 인해 발생할 수 있습니다. 다음 단계를 고려하여 확인하세요.

  1. Cluster 커스텀 리소스의 .spec.clusterNetwork 섹션에서 podCIDRSizeserviceCIDRSize 필드를 확인합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get cluster \
        -n platform USER_CLUSTER_NAME -oyaml
    

    결과는 다음과 유사합니다.

    Example:
    spec:
      clusterNetwork:
        podCIDRSize: 20
        serviceCIDRSize: 20
    
  2. 기존 서브넷의 상위 서브넷을 찾습니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform  -l \
        ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=zone-network-root-range
    

    결과는 다음과 유사합니다.

    Example:
    NAME                     PARENT   READY   IPV4 CIDR        IPV6 CIDR
    default-vpc-zone0-cidr            True    198.51.100.0/18 
    
  3. 상위 서브넷에서 할당한 모든 서브넷을 찾습니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform  -l \
        ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage!=zone-network-root-range
    

    결과는 다음과 유사합니다.

    Example:
    default-vpc-default-node-subnet       {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.100.0/23
    g-org-1-shared-service-pod-cidr       {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.16.0/20
    g-org-1-shared-service-service-cidr   {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.2.0/23
    user-vm-1-pod-cidr                    {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.8.0/21
    user-vm-1-service-cidr                {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.4.0/23
    user-vm-2-pod-cidr                    {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.32.0/21
    user-vm-2-service-cidr                {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.6.0/23
    

이 예시에서 /18 상위 CIDR은 /23 CIDR 4개, /20 CIDR 1개, /21 CIDR 2개를 할당했으며 새 사용자 클러스터는 podCIDRSize에 /20 CIDR을 요청하고 serviceCIDRSize에 /20 CIDR을 요청하므로 충분하지 않습니다.

이 경우 기본 VPC의 카테고리에 서브넷을 추가해야 합니다.

인프라 VPC

infra-vpc의 서브넷은 주로 조직 인프라 클러스터 및 경계 클러스터의 조직 포드 및 서비스 CIDR과 경계 클러스터의 노드 IP 주소를 할당하는 데 사용됩니다.

이는 내부 GDC 인프라 설정에 속하며 각 조직에는 조직 인프라 클러스터 하나와 경계 클러스터 하나만 있으므로 일반적으로 infra-vpc에는 업스케일 작업이 필요하지 않습니다.

관리 네트워크 세그먼트

관리 네트워크 세그먼트의 서브넷은 주로 조직 관리 가상 라우팅 및 전달 (VRF)에서 IP 주소를 할당하는 데 사용됩니다. 조직에 기본 노드 서브넷 또는 게이트웨이 정보가 있는 서브넷이 생성되어 있습니다. 이 기본 서브넷은 조직 인프라 클러스터 노드 IP 주소와 경계 클러스터 노드 IP 주소의 IP 주소를 할당합니다.

관리자 네트워크 세그먼트는 내부 GDC 인프라 설정에 속하고 각 조직은 조직 인프라 클러스터 하나와 경계 클러스터 하나만 가질 수 있으므로 일반적으로 이 서브넷은 업스케일링할 필요가 없습니다.

데이터 네트워크 세그먼트

데이터 네트워크 세그먼트의 서브넷은 주로 조직 데이터 VRF에서 IP 주소를 할당하는 데 사용됩니다. 조직에 기본 노드 서브넷 또는 게이트웨이 정보가 있는 서브넷이 생성되어 있습니다. 이 기본 서브넷은 조직 인프라 클러스터 노드 IP 주소와 경계 클러스터 노드 IP 주소의 IP 주소를 할당합니다.

데이터 네트워크 세그먼트는 내부 GDC 인프라 설정에 속하고 각 조직은 조직 인프라 클러스터 하나와 경계 클러스터 하나만 가질 수 있으므로 일반적으로 이 서브넷은 스케일업할 필요가 없습니다.

카테고리에 서브넷 추가

서브넷 유형에 따라 카테고리에 서브넷을 추가할 수 있습니다. 다음 유형은 서브넷을 더 추가할 수 있습니다.

  • 인프라 VPC
  • 관리 네트워크 세그먼트
  • 데이터 네트워크 세그먼트
  • 기본 VPC

서브넷을 추가할 서브넷 유형을 확인한 후 해당 서브넷 유형에 대해 다음 단계를 완료합니다.

  1. 전역 루트 관리자 API 서버에서 루트 서브넷 유형을 가져오고 subnet.status.ipv4Allocation.cidr에서 CIDR maskSize 필드를 확인합니다.

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=network-root-range
    

    다음을 바꿉니다.

    • GLOBAL_ROOT_ADMIN_KUBECONFIG: 루트 관리자 클러스터의 kubeconfig 파일 경로입니다.
    • ORG_NAME: 조직 이름
    • SUBNET_TYPE: 서브넷 유형(예: vpc=infra-vpc, network-segment=admin, network-segment=data, vpc=default-vpc)

    이 값을 나중에 참조할 총 CIDR로 기록합니다.

  2. 루트 서브넷의 모든 하위 서브넷을 가져오고 subnet.status.ipv4Allocation.cidr에서 각 CIDR maskSize 필드를 확인합니다.

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage!=network-root-range
    

    각 값을 사용된 CIDR로 기록해 둡니다. 나중에 참조할 예정입니다.

  3. 총 CIDR과 사용된 CIDR을 기반으로 서브넷의 사용 가능한 CIDR을 계산합니다. 사용 가능한 CIDR이 새 서브넷을 할당하기에 충분히 크지 않으면 새 네트워크 루트 범위 전역 서브넷을 추가합니다. 그런 다음 다음 단계로 진행합니다.

  4. 전역 루트 관리자 API 서버에서 새 서브넷을 만듭니다.

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/SUBNET_TYPE_LABEL
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: SUBNET_NAME
      namespace: ORG_NAME
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      zone: ZONE_NAME
      propagationStrategy: SingleZone
      type: Branch
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: ORG_NAME
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_ROOT_ADMIN_KUBECONFIG: 루트 관리자 클러스터의 kubeconfig 파일 경로입니다.
    • SUBNET_TYPE_LABEL: 서브넷 유형입니다. vpc: infra-vpc, network-segment: admin, network-segment: data, vpc: default-vpc 중 하나여야 합니다.
    • SUBNET_NAME: 새 서브넷의 이름입니다.
    • ORG_NAME: 조직 이름
    • CIDR_PREFIX_LENGTH: 새 서브넷의 프리픽스 길이입니다(예: 20).
    • ZONE_NAME: 서브넷의 영역 이름입니다(예: zone1).
    • PARENT_SUBNET_NAME: 상위 서브넷의 이름입니다(예: infra-vpc-root-cidr, admin-external-root-cidr, data-external-root-cidr, default-vpc-root-cidr).
  5. 상태 Ready 유형이 true인지 확인하여 서브넷이 준비되었는지 확인합니다.

  6. 조직의 전역 API 서버에 전역 서브넷이 생성되었으며 준비되었는지 확인합니다.

    kubectl --kubeconfig GLOBAL_ORG_ADMIN_KUBECONFIG get subnet -n NAMESPACE -l \
        ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    

    NAMESPACE을 서브넷의 네임스페이스로 바꿉니다. infra-vpc 서브넷에는 infra-network를 사용하고 다른 서브넷 유형에는 platform를 사용합니다.

  7. 영역 서브넷이 루트 관리자 클러스터의 조직 네임스페이스에 생성되었고 준비되었는지 확인합니다.

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    
  8. 영역 서브넷이 platform 네임스페이스의 관리 API 서버에 생성되었으며 준비되었는지 확인합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n NAMESPACE \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    

지정한 영역에서 조직의 서브넷 업스케일이 완료되었습니다. 관리자는 새 서브넷에서 더 많은 하위 서브넷을 만들 수 있습니다.

새 네트워크 루트 범위 전역 서브넷 추가

ipam.gdc.goog/usage: network-root-range 라벨이 지정된 전역 서브넷은 이 카테고리의 모든 영역의 CIDR을 호스팅합니다. 모두 사용된 경우 전역 API 서버에서 새 network-root-range 서브넷을 만들어야 합니다. 필요한 경우 여러 루트 전역 서브넷을 만들 수 있습니다.

network-root-range 서브넷을 만들려면 다음 단계를 완료하세요.

  1. 새 네트워크 루트 범위 전역 서브넷의 YAML 파일(예: subnet-network-root.yaml)을 만듭니다.

    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/SUBNET_TYPE
        ipam.gdc.goog/usage: network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: SUBNET_NAME
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: NEW_CIDR
      type: Root
    

    다음을 바꿉니다.

    • SUBNET_TYPE: 서브넷 유형으로, vpc: infra-vpc, network-segment: admin, network-segment: data, vpc: default-vpc 중 하나여야 합니다.
    • API_SERVER_ANNOTATION: 이 서브넷이 다른 API 서버로 피벗해야 함을 식별하는 주석입니다. infra-vpc 또는 관리자 및 datanet 작업 세그먼트의 경우 ipam.gdc.goog/pivot-destination: global-org를 사용합니다. 새 default-vpc 루트 범위를 추가하는 경우 이 주석을 설정하지 마세요.
    • SUBNET_NAME: 새 서브넷의 이름입니다.
    • ORG_NAME: 조직 이름
    • NEW_CIDR: 서브넷의 새 CIDR입니다. 이 CIDR은 동일한 전역 루트 관리 API 서버에 있는 ipam.gdc.goog/usage: network-root-range 라벨이 있는 기존 서브넷의 CIDR과 중복될 수 없습니다.