Provisionar endereços IP para cargas de trabalho

Nesta página, descrevemos como criar sub-redes adicionais na nuvem privada virtual (VPC) interna ou na VPC padrão da sua organização para atender aos requisitos de rede interna. É necessário criar uma sub-rede VPC para garantir que as cargas de trabalho internas, como máquinas virtuais (VMs) e contêineres, tenham um número suficiente de endereços IP para atender aos requisitos de rede na organização.

Há várias tarefas descritas nesta página, que não precisam ser concluídas em ordem:

Para uma visão geral das sub-redes e dos conceitos antes de concluir as tarefas nesta página, consulte Sub-redes e endereços IP.

Esta página é destinada a administradores de rede no grupo de administradores da plataforma e desenvolvedores de aplicativos no grupo de operadores de aplicativos, que são responsáveis por gerenciar o tráfego de rede da organização. Para mais informações, consulte Públicos-alvo para documentação isolada do GDC.

Antes de começar

Para receber a permissão necessária para criar sub-redes, peça ao administrador do IAM da organização para conceder a você o papel do IAM de administrador da organização de sub-redes (subnet-org-admin). Essa função não está vinculada a um namespace.

Criar uma sub-rede de ramificação zonal para cargas de trabalho

É possível criar uma sub-rede interna zonal da sub-rede raiz zonal atual da zona para subdividir ainda mais os endereços IP na sua VPC padrão zonal. É necessário criar esse tipo de sub-rede no namespace platform. Se a sub-rede raiz zonal principal não tiver endereços IP suficientes disponíveis, alocar outra sub-rede zonal do intervalo de endereços IP global antes de continuar.

  • Em uma janela de terminal, crie a nova sub-rede zonal no servidor da API de gerenciamento:

    kubectl -kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/vpc: default-vpc
      name: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      networkSpec:
        enableGateway: true
        enableVLANID: false
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: platform
      type: Branch
    EOF
    

    Substitua:

    • MANAGEMENT_API_SERVER_KUBECONFIG: o caminho para o arquivo kubeconfig do servidor da API de gerenciamento. Para mais informações, consulte Recursos do servidor da API de gerenciamento zonal.

    • SUBNET_NAME: o nome da nova sub-rede.

    • CIDR_PREFIX_LENGTH: o comprimento do prefixo CIDR da nova sub-rede alocada dinamicamente, como 20. Para definir o CIDR de forma estática, substitua o campo prefixLength pelo campo cidr e defina o bloco CIDR, como 10.0.10.0/27.

    • PARENT_SUBNET_NAME: o nome da sub-rede principal, como default-vpc-zone0-cidr. A sub-rede principal geralmente é uma sub-rede raiz zonal na VPC padrão.

    Consulte a documentação de referência da API para o recurso Subnet para mais informações.

    É possível continuar subdividindo as sub-redes zonais ou criar uma sub-rede folha para alocar um endereço IP individual diretamente a uma carga de trabalho interna.

Criar uma sub-rede leaf para uma carga de trabalho individual

Você precisa criar uma sub-rede folha para alocar um único endereço IP para sua carga de trabalho. Essa sub-rede folha precisa ter o valor do campo type: Leaf e estar no mesmo namespace do projeto que o recurso de carga de trabalho, como uma VM ou um contêiner.

A sub-rede leaf precisa ser configurada com um valor prefixLength de 32, já que ela foi criada para alocar um único endereço IP. O valor parentReference faz referência a uma sub-rede alocada anteriormente, como a sub-rede zonal principal criada em Criar uma sub-rede zonal de ramificação para cargas de trabalho.

  • Em uma janela de terminal, crie a sub-rede leaf no servidor da API de gerenciamento:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/allocation-preference: default
        ipam.gdc.goog/vpc: default-vpc
      name: SUBNET_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ipv4Request:
        prefixLength: 32
      parentReference:
        name: PARENT_SUBNET
        namespace: platform
      type: Leaf
    EOF
    

    Substitua:

    • MANAGEMENT_API_SERVER_KUBECONFIG: o caminho para o arquivo kubeconfig do servidor da API de gerenciamento. Para mais informações, consulte Recursos do servidor da API de gerenciamento zonal.
    • SUBNET_NAME: o nome da sub-rede folha.
    • PROJECT_NAMESPACE: o namespace do projeto correspondente ao projeto em que as cargas de trabalho estão localizadas.
    • PARENT_SUBNET: o nome da sub-rede principal de que essa sub-rede leaf vai extrair o endereço IP.

Seu endereço IP individual agora está disponível para uso pelas cargas de trabalho internas, como VMs e contêineres. Para mais informações sobre como configurar o endereço IP para suas cargas de trabalho, consulte Implantar cargas de trabalho de máquina virtual ou Implantar cargas de trabalho de contêiner.

Alocar sub-rede zonal do intervalo de endereços IP global

Se a sua zona não fornecer endereços IP suficientes para as cargas de trabalho do intervalo de endereços IP da sub-rede raiz zonal atual, aloque mais endereços IP do intervalo raiz de endereços IP global.

Conclua as etapas a seguir para a rede VPC padrão no namespace platform:

  1. Em uma janela de terminal, descreva todas as sub-redes raiz da VPC padrão e verifique os CIDRs disponíveis:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=network-root-range
    

    Substitua GLOBAL_API_SERVER_KUBECONFIG pelo caminho para o arquivo kubeconfig do servidor de API global. Para mais informações, consulte Recursos globais do servidor de API. Os rótulos são constantes e precisam permanecer iguais.

    O resultado será assim:

    Name:         default-vpc-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=default-vpc-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/vpc=default-vpc
    Annotations:  <none>
    API Version:  ipam.global.gdc.goog/v1
    Kind:         Subnet
    Metadata:
      Creation Timestamp:  2025-06-18T23:05:38Z
      Finalizers:
        global-subnet-finalizer
      Generation:        1
      Resource Version:  439434
      UID:               5ed1c51a-b5ee-473e-a185-8e065a87ae8f
    Spec:
      ipv4Request:
        Cidr:                10.252.0.0/14
      Propagation Strategy:  None
      Type:                  Root
    Status:
      Children Refs:
        Name:       default-vpc-zone1-root-cidr
        Namespace:  platform
        Type:       SingleSubnet
      Conditions:
        Last Transition Time:  2025-06-18T23:05:38Z
        Message:               IP allocation finished successfully
        Observed Generation:   1
        Reason:                AllocationSucceeded
        Status:                True
        Type:                  Ready
      ipv4Allocation:
        Available CIDRs:
          10.254.0.0/15
          10.253.0.0/16
        Cidr:  10.252.0.0/14
    Events:    <none>
    

    Anote os valores Status.ipv4Allocation.Available CIDRs como os CIDRs disponíveis, que serão referenciados na próxima etapa. Na saída anterior, os intervalos CIDR 10.254.0.0/15 e 10.253.0.0/16 estão disponíveis. Pode haver várias sub-redes na saída, dependendo do número de sub-redes raiz que você tem. Portanto, anote todos os CIDRs disponíveis e de qual sub-rede eles são.

  2. Compare o maior CIDR disponível que você observou na etapa anterior com o tamanho do CIDR que precisa ser alocado para sua zona. Se o maior CIDR disponível não for grande o suficiente para alocar sua nova sub-rede, adicione uma nova sub-rede global de intervalo raiz de rede antes de continuar. Anote a sub-rede principal de que você vai extrair o CIDR para sua nova sub-rede.

    Por exemplo, se você precisar de um CIDR /13, mas os CIDRs disponíveis incluírem apenas /15 e /16, adicione uma nova sub-rede global de intervalo raiz de rede. Se você precisar de uma sub-rede /15, aloque uma nova sub-rede zonal do CIDR /15 atual.

  3. Crie a nova sub-rede no servidor de API global:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<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: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      zone: ZONE_NAME
      propagationStrategy: SingleZone
      type: Branch
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: ORG_NAME
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER_KUBECONFIG: o caminho para o arquivo kubeconfig do servidor de API global. Para mais informações, consulte Recursos globais do servidor de API.
    • SUBNET_NAME: o nome da nova sub-rede;
    • CIDR_PREFIX_LENGTH: o tamanho do prefixo CIDR da nova sub-rede alocada dinamicamente, como 20. Para definir o CIDR de forma estática, substitua o campo prefixLength pelo campo cidr e defina o bloco CIDR, como 10.0.10.0/27.
    • ZONE_NAME: a zona em que a sub-rede será alocada, como zone1.
    • PARENT_SUBNET_NAME: o nome da sub-rede principal, como default-vpc-root-cidr, ou a nova sub-rede global do intervalo raiz da rede criada.
    • ORG_NAME: o nome da organização.

    Consulte a documentação de referência da API para o recurso global Subnet para mais informações.

  4. Verifique se a sub-rede está pronta e disponível no servidor de API global. Para isso, confira se o tipo de status Ready é true:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \
        SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
    

    O resultado será assim:

    status:
      conditions:
      - lastTransitionTime: "2025-06-06T07:28:48Z"
        message: IP allocation finished successfully
        observedGeneration: 1
        reason: AllocationSucceeded
        status: "True"
        type: Ready
    
  5. Verifique se a sub-rede zonal foi criada no servidor da API de gerenciamento zonal e se o tipo de status Ready é true:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet --namespace platform \
        SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
    

    Substitua MANAGEMENT_API_SERVER_KUBECONFIG pelo caminho do arquivo kubeconfig do servidor da API de gerenciamento. Para mais informações, consulte Recursos do servidor da API de gerenciamento zonal.

    O resultado será assim:

    status:
      conditions:
      - lastTransitionTime: "2025-06-06T07:29:34Z"
        message: IP allocation finished successfully
        observedGeneration: 1
        reason: AllocationSucceeded
        status: "True"
        type: Ready
    

    Nessa nova sub-rede zonal, é possível criar mais sub-redes filhas zonais ou alocar um endereço IP individual diretamente para uma carga de trabalho interna.

Dividir a sub-rede global raiz sem alocação de zona

Para dividir ainda mais uma sub-rede global sem alocá-la a uma zona para uso dos seus workloads, crie uma sub-rede global e não defina uma estratégia de propagação no recurso personalizado Subnet. Essa abordagem é útil se você quiser continuar organizando seu intervalo de endereços IP acessível globalmente da sub-rede raiz global sem alocar os endereços IP para uma zona.

Conclua as etapas a seguir no namespace platform para dividir sua sub-rede raiz global apenas no escopo global:

  1. Em uma janela de terminal, descreva todas as sub-redes raiz da VPC padrão e verifique os CIDRs disponíveis:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=network-root-range
    

    Substitua GLOBAL_API_SERVER_KUBECONFIG pelo caminho para o arquivo kubeconfig do servidor de API global. Para mais informações, consulte Recursos globais do servidor de API. Os rótulos são constantes e precisam permanecer iguais.

    O resultado será assim:

    Name:         default-vpc-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=default-vpc-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/vpc=default-vpc
    Annotations:  <none>
    API Version:  ipam.global.gdc.goog/v1
    Kind:         Subnet
    Metadata:
      Creation Timestamp:  2025-06-18T23:05:38Z
      Finalizers:
        global-subnet-finalizer
      Generation:        1
      Resource Version:  439434
      UID:               5ed1c51a-b5ee-473e-a185-8e065a87ae8f
    Spec:
      ipv4Request:
        Cidr:                10.252.0.0/14
      Propagation Strategy:  None
      Type:                  Root
    Status:
      Children Refs:
        Name:       default-vpc-zone1-root-cidr
        Namespace:  platform
        Type:       SingleSubnet
      Conditions:
        Last Transition Time:  2025-06-18T23:05:38Z
        Message:               IP allocation finished successfully
        Observed Generation:   1
        Reason:                AllocationSucceeded
        Status:                True
        Type:                  Ready
      ipv4Allocation:
        Available CIDRs:
          10.254.0.0/15
          10.253.0.0/16
        Cidr:  10.252.0.0/14
    Events:    <none>
    

    Anote os valores Status.ipv4Allocation.Available CIDRs como os CIDRs disponíveis, que serão referenciados na próxima etapa. Na saída anterior, os intervalos CIDR 10.254.0.0/15 e 10.253.0.0/16 estão disponíveis. Pode haver várias sub-redes na saída, dependendo do número de sub-redes raiz que você tem. Portanto, anote todos os CIDRs disponíveis e de qual sub-rede eles são.

  2. Compare o maior CIDR disponível que você anotou na etapa anterior com o tamanho do CIDR que precisa ser alocado para sua nova sub-rede global. Se o maior CIDR disponível não for grande o suficiente para alocar sua nova sub-rede, adicione uma nova sub-rede global de intervalo raiz de rede antes de continuar. Anote a sub-rede principal de que você vai extrair o CIDR para sua nova sub-rede.

    Por exemplo, se você precisar de um CIDR /13, mas os CIDRs disponíveis incluírem apenas /15 e /16, crie uma nova sub-rede global de intervalo raiz de rede. Se você precisar de uma sub-rede /15, aloque a nova sub-rede global do CIDR /15 atual.

  3. Crie a nova sub-rede no servidor de API global:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<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: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      propagationStrategy: None
      type: Branch
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: ORG_NAME
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER_KUBECONFIG: o caminho para o arquivo kubeconfig do servidor de API global. Para mais informações, consulte Recursos globais do servidor de API.
    • SUBNET_NAME: o nome da nova sub-rede;
    • CIDR_PREFIX_LENGTH: o tamanho do prefixo CIDR da nova sub-rede alocada dinamicamente, como 20. Para definir o CIDR de forma estática, substitua o campo prefixLength pelo campo cidr e defina o bloco CIDR, como 10.0.10.0/27.
    • PARENT_SUBNET_NAME: o nome da sub-rede principal, como default-vpc-root-cidr, ou a nova sub-rede global do intervalo raiz da rede criada.
    • ORG_NAME: o nome da organização.

    Consulte a documentação de referência da API para o recurso global Subnet para mais informações.

  4. Verifique se a sub-rede está pronta e disponível no servidor de API global. Para isso, confira se o tipo de status Ready é true:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \
        SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
    

    O resultado será assim:

    status:
      conditions:
      - lastTransitionTime: "2025-06-06T07:28:48Z"
        message: IP allocation finished successfully
        observedGeneration: 1
        reason: AllocationSucceeded
        status: "True"
        type: Ready
    

A nova sub-rede global para sua organização na VPC padrão está disponível. É possível criar uma sub-rede para uma zona específica com base nessa nova sub-rede global principal.

Adicionar nova sub-rede global de intervalo raiz de rede

As sub-redes globais com o rótulo ipam.gdc.goog/usage: network-root-range hospedam o CIDR de todas as zonas da rede. Se o CIDR estiver esgotado, crie uma nova sub-rede de intervalo raiz da rede no servidor de API global. É possível criar várias sub-redes globais raiz, se necessário.

Para criar uma sub-rede de intervalo raiz de rede, faça o seguinte:

  • Em uma janela de terminal, crie a nova sub-rede global de intervalo raiz da rede para a VPC padrão no namespace platform:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/vpc: default-vpc
        ipam.gdc.goog/usage: network-root-range
      name: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        cidr: NEW_CIDR
      type: Root
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER_KUBECONFIG: o caminho para o arquivo kubeconfig do servidor de API global. Para mais informações, consulte Recursos globais do servidor de API.
    • SUBNET_NAME: o nome da nova sub-rede;
    • NEW_CIDR: o novo CIDR da sub-rede. Esse CIDR não pode se sobrepor a nenhum CIDR em todas as sub-redes atuais com o rótulo ipam.gdc.goog/usage: network-root-range no mesmo servidor da API global.

Essa nova sub-rede de intervalo de raiz global pode ser subdividida no servidor de API global ou alocada para uma zona específica.

A seguir