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

Nesta página, descrevemos como criar mais sub-redes 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 serviços externos, como a tradução de endereços de rede (NAT) de saída e balanceadores de carga externos, tenham endereços IP suficientes para se conectar a redes 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 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 de 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 da documentação do GDC com isolamento físico.

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 principal 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.

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

    É possível 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, porque ela é destinada a 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 de ramificação zonal 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 a 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 \
        -l 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á o seguinte:

    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 de Status.ipv4Allocation.Available CIDRs. Estes são os CIDRs disponíveis que a próxima etapa referencia. 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 a sub-rede de origem de cada um deles.

  2. Compare o maior CIDR disponível da etapa anterior com o tamanho do CIDR necessário 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 o nome da sub-rede mãe para referenciar a 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.

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

  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á o seguinte:

    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á o seguinte:

    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 \
        -l 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á o seguinte:

    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 de Status.ipv4Allocation.Available CIDRs. Estes são os CIDRs disponíveis que a próxima etapa referencia. 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 da etapa anterior com o tamanho do CIDR necessário 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.

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

  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á o seguinte:

    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 na 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