Traga seus próprios endereços IP com sub-redes externas

Esta página descreve como criar sub-redes adicionais no segmento de rede de dados da sua organização para atender aos requisitos de rede externa. É necessário adicionar sub-redes para garantir que seus serviços externos, como tradução de endereços de rede (NAT) de saída e balanceadores de carga externos, tenham um número suficiente de endereços IP para atender aos requisitos de rede de conexão com redes externas fora da sua 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 relacionados 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 serviços externos

É possível criar uma sub-rede externa zonal com base na sub-rede raiz zonal da zona para subdividir ainda mais os endereços IP no segmento de rede de dados zonal. Você precisa criar esse tipo de sub-rede no namespace platform. Se a sub-rede raiz zonal mãe não tiver endereços IP suficientes disponíveis, alocar outra sub-rede zonal do intervalo de endereços IP global primeiro e depois retornar a este procedimento.

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

    kubectl -kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/network-segment: data
      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 data-external-zone0-cidr. A sub-rede principal geralmente é uma sub-rede raiz zonal no segmento de rede de dados.

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

    Você pode continuar subdividindo as sub-redes zonais ou criar uma sub-rede folha para alocar um endereço IP individual diretamente a um serviço externo.

Criar uma sub-rede folha para um serviço individual

Você precisa criar uma sub-rede folha para alocar um único endereço IP para seu serviço. Essa sub-rede folha precisa ter o valor de campo type: Leaf e estar no mesmo namespace de projeto que seu serviço externo, como um balanceador de carga externo ou NAT de saída.

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/network-segment: data
      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 seus serviços estão localizados.
    • 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 pelo serviço externo. Para mais informações sobre como configurar o endereço IP do seu serviço, consulte a documentação correspondente, como Configurar balanceadores de carga externos.

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

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

Conclua as etapas a seguir para o segmento de rede de dados no namespace platform:

  1. Em uma janela de terminal, descreva todas as sub-redes raiz do segmento de rede de dados e verifique os CIDRs disponíveis:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label ipam.gdc.goog/network-segment=data,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:         data-external-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=data-external-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/network-segment=data
    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:       data-external-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, crie 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/network-segment: data
        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 data-external-root-cidr, ou o novo intervalo raiz da rede, a sub-rede global 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 para o 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 a um serviço externo.

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

Se você quiser continuar organizando seu intervalo de endereços IP acessíveis globalmente da sub-rede raiz global sem alocar os endereços IP para seus serviços externos zonais, crie uma sub-rede global e não defina uma estratégia de propagação no recurso personalizado Subnet.

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 do segmento de rede de dados e verifique os CIDRs disponíveis:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label ipam.gdc.goog/network-segment=data,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:         data-external-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=data-external-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/network-segment=data
    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:       data-external-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/network-segment: data
        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 data-external-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 da sua organização no segmento de rede de dados 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 o segmento de rede de dados 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/network-segment: data
        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