Criar políticas de rede externas à organização

Esta página fornece instruções para configurar políticas de rede de tráfego externo à organização no Google Distributed Cloud (GDC) com isolamento físico.

O tráfego externo à organização se refere à comunicação entre serviços e cargas de trabalho de diferentes organizações e endpoints externos.

Antes de começar

Para configurar políticas de rede de tráfego externo à organização, você precisa ter o seguinte:

Criar uma política externa à organização

É possível definir políticas de tráfego externo à organização de entrada ou saída para gerenciar a comunicação entre serviços e cargas de trabalho de diferentes organizações e endpoints externos.

É possível criar políticas de rede de projetos de tráfego externo à organização global que se aplicam ao tráfego em todas as zonas da organização. Para mais informações sobre recursos globais em um universo do GDC, consulte Visão geral de várias zonas.

A conexão de serviços e cargas de trabalho a um destino fora do projeto em uma organização diferente requer aprovação explícita. É necessário desativar a proteção contra exfiltração de dados para permitir o tráfego externo à organização.

Criar uma regra de firewall de entrada global para tráfego externo à organização

Ao expor cargas de trabalho no projeto usando um balanceador de carga externo, também é necessário criar uma política de entrada ProjectNetworkPolicy para permitir que endereços IP de clientes externos acessem as cargas de trabalho.

Essa política de entrada global se aplica a todas as zonas da organização.

Siga estas etapas para criar uma regra de firewall e permitir o tráfego de entrada de cargas de trabalho em um projeto de uma organização diferente:

Console

  1. No console do GDC do projeto que você está configurando, acesse Rede > Firewall no menu de navegação para abrir a página Firewall.
  2. Clique em Criar na barra de ações para começar a criar uma regra de firewall.
  3. Na página Detalhes da regra de firewall, preencha as seguintes informações:

    1. No campo Nome, insira um nome válido para a regra de firewall.
    2. Na seção Direção do tráfego, selecione Entrada para permitir o tráfego de entrada de cargas de trabalho em outras organizações.
    3. Na seção Destino, selecione uma das seguintes opções:
      • Todas as cargas de trabalho do usuário:permite conexões com as cargas de trabalho do projeto que você está configurando.
      • Serviço:indica que essa regra de firewall segmenta um serviço específico no projeto que você está configurando.
    4. Se o destino for um serviço de projeto, selecione o nome do serviço na lista de serviços disponíveis no menu suspenso Serviço.
    5. Na seção De, selecione Fora da organização e insira o bloco CIDR de outra organização no campo CIDR para permitir conexões da rede dessa organização.
    6. Se o destino for todas as cargas de trabalho do usuário, selecione uma das seguintes opções na seção Protocolos e portas :
      • Permitir tudo:permite conexões usando qualquer protocolo ou porta.
      • Protocolos e portas especificados:permite conexões usando apenas os protocolos e portas especificados nos campos correspondentes para a regra de firewall de entrada.
  4. Na página Detalhes da regra de firewall, clique em Criar.

Agora você permitiu conexões de cargas de trabalho de projetos de uma organização diferente. Depois de criar a regra de firewall, ela fica visível em uma tabela na página Firewall.

API

Configure e aplique sua própria política de entrada ProjectNetworkPolicy personalizada:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: allow-inbound-traffic-from-external
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - ipBlock:
        cidr: CIDR
EOF

Substitua:

  • GLOBAL_API_SERVER: o caminho kubeconfig do servidor da API global. Para mais informações, consulte Servidores da API global e zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.
  • PROJECT: o nome do projeto do GDC.
  • CIDR: o bloco CIDR de outra organização.

Essa política é necessária porque o balanceador de carga externo usa o retorno direto do servidor (DSR, na sigla em inglês), que preserva o endereço IP externo de origem e ignora o balanceador de carga no caminho de retorno.

Criar uma regra de firewall de saída global para tráfego externo à organização

Para transferir dados para serviços fora da organização, primeiro desative a proteção contra exfiltração de dados. Em seguida, configure uma regra de firewall de saída para permitir o tráfego de saída das cargas de trabalho ou serviços do projeto.

Esta seção descreve o processo para ativar o tráfego de saída no nível do projeto. Para informações sobre como gerenciar a conectividade de saída no nível da carga de trabalho, consulte Visão geral do NAT.

Essa regra de firewall de saída global se aplica a todas as zonas da organização.

Siga estas etapas para criar uma regra de firewall e permitir o tráfego de saída de cargas de trabalho ou serviços de projetos para cargas de trabalho em outra organização:

Console

  1. No console do GDC do projeto que você está configurando, acesse Rede > Firewall no menu de navegação para abrir a página Firewall.
  2. Clique em Criar na barra de ações para começar a criar uma regra de firewall.
  3. Na página Detalhes da regra de firewall, preencha as seguintes informações:

    1. No campo Nome, insira um nome válido para a regra de firewall.
    2. Na seção Direção do tráfego, selecione Saída para indicar que essa regra de firewall está controlando o tráfego de saída.
    3. Na seção Destino, selecione uma das seguintes opções:
      • Todas as cargas de trabalho do usuário:permite conexões das cargas de trabalho do projeto que você está configurando.
      • Serviço:indica que essa regra de firewall segmenta um serviço específico no projeto que você está configurando.
    4. Se o destino for um serviço de projeto, selecione o nome do serviço na lista de serviços disponíveis no menu suspenso Serviço.
    5. Na seção Para, selecione Fora da organização e insira o bloco CIDR de outra organização no campo CIDR para permitir conexões com a rede dessa organização.
    6. Se o destino for todas as cargas de trabalho do usuário, selecione uma das seguintes opções na seção Protocolos e portas :
      • Permitir tudo:permite conexões usando qualquer protocolo ou porta.
      • Protocolos e portas especificados:permite conexões usando apenas os protocolos e portas especificados nos campos correspondentes para a regra de firewall de saída.
  4. Na página Detalhes da regra de firewall, clique em Criar.

Agora você permitiu conexões com outra organização. Depois de criar a regra de firewall, ela fica visível em uma tabela na página Firewall.

API

Para ativar o tráfego de saída para serviços fora da organização, personalize o recurso ProjectNetworkPolicy. No entanto, como a prevenção contra exfiltração de dados está ativada por padrão, a política de saída ProjectNetworkPolicy personalizada mostra um erro de validação no campo de status, e o plano de dados a ignora. Esse comportamento acontece por design.

É possível transferir cargas de trabalho de um determinado projeto quando você permite a exfiltração de dados para esse projeto. O tráfego de saída permitido é uma conversão de endereços de rede de origem (NAT) usando um endereço IP conhecido alocado para o projeto.

Para ativar sua política de saída personalizada, siga estas etapas:

  1. Configure e aplique sua própria política de saída ProjectNetworkPolicy personalizada em todas as cargas de trabalho do usuário em um projeto.

    Use o exemplo a seguir:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-outbound-traffic-to-external
    spec:
      subject:
        subjectType: UserWorkload
      egress:
      - to:
        - ipBlock:
            cidr: CIDR
    EOF
    

    A política permite o tráfego de saída para todos os hosts no bloco CIDR, que residem fora da organização. Sua primeira tentativa precisa causar um erro de status intencional e necessário.

  2. Confirme se há um erro de validação no status.

  3. Peça ao administrador do IAM da organização para desativar a prevenção contra exfiltração de dados. Essa ação ativa sua configuração, evitando todo o outro tráfego de saída.

  4. Verifique o ProjectNetworkPolicy criado e confirme se o erro no campo de status de validação desapareceu e se o status Ready é True, indicando que sua política está em vigor:

    kubectl --kubeconfig GLOBAL_API_SERVER \
        get projectnetworkpolicy allow-outbound-traffic-to-external \
        -n PROJECT -o yaml
    

    Substitua:

    • GLOBAL_API_SERVER: o caminho kubeconfig do servidor da API global. Para mais informações, consulte Servidores da API global e zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.

    • PROJECT: o nome do projeto do GDC.

Depois de aplicar essa política e, desde que você não tenha definido outras políticas de saída, todo o outro tráfego de saída será negado para PROJECT.

Criar uma política externa à organização para clusters padrão

Os clusters padrão são clusters do Kubernetes com escopo de projeto que oferecem maior controle, flexibilidade e permissões de administrador de cluster.

Criar uma política externa à organização de entrada para clusters padrão

  1. Para criar uma política externa à organização de entrada para clusters padrão, crie e aplique o seguinte recurso personalizado:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-ingress-from-external-endpoint-to-standard-cluster-pod
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - ipBlocks:
          - cidr: EXTERNAL_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER: o caminho kubeconfig do servidor da API global. Para mais informações, consulte Servidores da API global e zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para detalhes.
    • STANDARD_CLUSTER_PROJECT: o nome do projeto de cluster padrão.
    • STANDARD_CLUSTER_NAME: o nome do cluster padrão.
    • SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado à SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com o rótulo app: backend vão receber o tráfego.
    • EXTERNAL_IP: o endereço IP do endpoint externo.
    • PORT: a porta na carga de trabalho do assunto em que o tráfego é permitido.

Criar uma política externa à organização de saída para clusters padrão

  1. Para criar uma política externa à organização de saída para clusters padrão, crie e aplique o seguinte recurso personalizado:

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-egress-from-standard-cluster-pod-to-external-endpoint
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - ipBlocks:
          - cidr: EXTERNAL_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER: o caminho kubeconfig do servidor da API global. Para mais informações, consulte Servidores da API global e zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para detalhes.
    • STANDARD_CLUSTER_PROJECT: o nome do projeto de cluster padrão.
    • STANDARD_CLUSTER_NAME: o nome do cluster padrão.
    • SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado à SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com o rótulo app: backend vão enviar o tráfego.
    • EXTERNAL_IP: o endereço IP do endpoint externo.
    • PORT: a porta no endpoint externo para o qual o tráfego é permitido.