Criar políticas de rede intraprojeto

Nesta página, fornecemos instruções para configurar políticas de rede de tráfego intraprojeto no Google Distributed Cloud (GDC) com isolamento físico.

As políticas de rede do projeto definem regras de entrada ou saída. É possível definir políticas que permitem a comunicação dentro de projetos, entre projetos e com endereços IP externo.

Por padrão, essas políticas são aplicadas globalmente em todas as zonas. Para mais informações sobre recursos globais em um universo do GDC, consulte Visão geral de várias zonas.

Se for necessário aplicar o tráfego intraprojeto em uma única zona, consulte Criar uma política intraprojeto no nível da carga de trabalho de uma única zona.

Antes de começar

Para configurar políticas de rede de tráfego entre projetos, você precisa ter o seguinte:

  • Os papéis necessários de identidade e acesso. Para gerenciar políticas de um projeto específico, você precisa da função project-networkpolicy-admin. Para ambientes multizona em que é necessário gerenciar políticas que abrangem todas as zonas, você precisa da função global-project-networkpolicy-admin. Para mais informações, consulte Preparar papéis predefinidos e acesso.
  • Um projeto atual. Para mais informações, consulte Criar um projeto.

Criar uma política intraprojeto

Para o tráfego em um projeto, o GDC aplica uma política de rede predefinida, a política intraprojeto, a cada projeto por padrão. Por padrão, as cargas de trabalho em um namespace de projeto podem se comunicar entre si sem expor nada a recursos externos.

Por padrão, não há política de saída, então o tráfego de saída é permitido para todo o tráfego intraprojeto. No entanto, quando você define uma única política de saída, apenas o tráfego especificado por ela é permitido.

Criar uma política de entrada entre projetos

Ao criar um projeto, você cria implicitamente um recurso ProjectNetworkPolicy base padrão que permite a comunicação entre projetos. Essa política permite o tráfego de entrada de outras cargas de trabalho no mesmo projeto.

Você pode remover a política padrão, mas saiba que isso vai negar a comunicação entre projetos para todos os serviços e cargas de trabalho dentro do projeto. Para remover a política, use o comando kubectl delete:

kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT

É possível adicionar a política padrão novamente aplicando o seguinte manifesto:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: base-policy-allow-intra-project-traffic
spec:
  policyType: Ingress
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

Substitua:

  • GLOBAL_API_SERVER: o caminho do kubeconfig do servidor de API global. Para mais informações, consulte Servidores de API globais e zonais. 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.

Criar uma política de saída entre projetos

Quando você desativa a prevenção de exfiltração de dados e aplica uma política de saída do ProjectNetworkPolicy ao projeto, como impedir o acesso a um recurso externo, use a seguinte política obrigatória para permitir o tráfego de saída entre projetos:

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: allow-intra-project-outbound-traffic
spec:
  policyType: Egress
  egress:
  - to:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

Substitua:

  • GLOBAL_API_SERVER: o caminho do kubeconfig do servidor de API global. Para mais informações, consulte Servidores de API globais e zonais. 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.

Criar uma política intraprojeto no nível da carga de trabalho

As políticas de rede no nível da carga de trabalho oferecem controle granular sobre a comunicação entre cargas de trabalho individuais em um projeto. Essa granularidade permite um controle mais rígido do acesso à rede, melhorando a segurança e o uso de recursos.

Criar uma política de entrada no nível da carga de trabalho intraprojeto

Ao criar um projeto, você cria implicitamente um recurso ProjectNetworkPolicy básico padrão que permite a comunicação entre todas as cargas de trabalho dentro do projeto. Essa política permite o tráfego de entrada de outras cargas de trabalho no mesmo projeto.

Para criar uma política de entrada no nível da carga de trabalho entre projetos, primeiro é necessário excluir a política de base padrão. Caso contrário, pode ocorrer um comportamento inesperado.

  1. Para excluir a política de base padrão, execute o seguinte comando:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. Para criar uma política de entrada no nível da carga de trabalho intraprojeto, 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: PROJECT
      name: allow-intra-project-inbound-traffic-from-target-to-subject
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER: o caminho do kubeconfig do servidor de API global. Para mais informações, consulte Servidores de API globais e zonais. 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.
    • SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de origem. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com o rótulo app: backend serão a origem do tráfego.
    • TARGET_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de destino.
    • TARGET_LABEL_VALUE: o valor associado ao TARGET_LABEL_KEY. Ele especifica quais cargas de trabalho são o destino do tráfego permitido.

Criar uma política de saída no nível da carga de trabalho entre projetos

  • Para criar uma política de saída no nível da carga de trabalho intraprojeto, 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: PROJECT
      name: allow-intra-project-outbound-traffic-to-subject-from-target
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER: o caminho do kubeconfig do servidor de API global. Para mais informações, consulte Servidores de API globais e zonais. 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.
    • SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de origem. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com o rótulo app: backend serão a origem do tráfego.
    • TARGET_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de destino.
    • TARGET_LABEL_VALUE: o valor associado ao TARGET_LABEL_KEY. Ele especifica quais cargas de trabalho são o destino do tráfego permitido.

Criar uma política intraprojeto no nível da carga de trabalho de uma única zona

As políticas de rede no nível da carga de trabalho podem aplicar o PNP em uma única zona. Rótulos específicos podem ser adicionados a cargas de trabalho em uma única zona, permitindo controlar a comunicação entre cargas de trabalho individuais em um projeto ou em projetos diferentes para essa zona.

Criar uma política de entrada de zona única no nível da carga de trabalho entre projetos

Ao criar um projeto, você cria implicitamente um recurso ProjectNetworkPolicy básico padrão que permite a comunicação entre todas as cargas de trabalho dentro do projeto. Essa política permite o tráfego de entrada de outras cargas de trabalho no mesmo projeto.

Para criar uma política de entrada de zona única no nível da carga de trabalho entre projetos, primeiro exclua a política básica padrão. Caso contrário, pode ocorrer um comportamento inesperado.

  1. Para excluir a política de base padrão, execute o seguinte comando:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. Para criar uma política de rede de tráfego intraprojeto no nível da carga de trabalho de entrada de uma única zona, 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: PROJECT
      name: allow-single-zone-intra-project-inbound-traffic-from-target-to-subject
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
            ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
                ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER: o caminho do kubeconfig do servidor de API global. Para mais informações, consulte Servidores de API globais e zonais. 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.
    • SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de origem. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com o rótulo app: backend serão a origem do tráfego.
    • TARGET_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de destino.
    • TARGET_LABEL_VALUE: o valor associado ao TARGET_LABEL_KEY. Ele especifica quais cargas de trabalho são o destino do tráfego permitido.
    • ZONE_SUBJECT_LABEL_KEY: a chave do rótulo usada para selecionar a zona de origem. Por exemplo, zone ou region.
    • ZONE_SUBJECT_LABEL_VALUE: o valor associado ao ZONE_SUBJECT_LABEL_KEY. Ela especifica qual zona é a origem do tráfego permitido. Por exemplo, se ZONE_SUBJECT_LABEL_KEY for zone e ZONE_SUBJECT_LABEL_VALUE for us-central1-a, as cargas de trabalho com o rótulo zone: us-central1-a serão a origem do tráfego.
    • ZONE_TARGET_LABEL_KEY: a chave do rótulo usado para selecionar a zona de destino.
    • ZONE_TARGET_LABEL_VALUE: o valor associado ao ZONE_TARGET_LABEL_KEY. Ela especifica qual zona é o destino do tráfego permitido.

Criar uma política de saída de zona única no nível da carga de trabalho intraprojeto

  • Para criar uma política de saída de zona única no nível da carga de trabalho intraprojeto, 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: PROJECT
      name: allow-single-zone-intra-project-outbound-traffic-to-subject-from-target
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
            ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
                ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE
    EOF
    

    Substitua:

    • GLOBAL_API_SERVER: o caminho do kubeconfig do servidor de API global. Para mais informações, consulte Servidores de API globais e zonais. 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.
    • SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de origem. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com o rótulo app: backend serão a origem do tráfego.
    • TARGET_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho de destino.
    • TARGET_LABEL_VALUE: o valor associado ao TARGET_LABEL_KEY. Ele especifica quais cargas de trabalho são o destino do tráfego permitido.
    • ZONE_SUBJECT_LABEL_KEY: a chave do rótulo usada para selecionar a zona de origem. Por exemplo, zone ou region.
    • ZONE_SUBJECT_LABEL_VALUE: o valor associado ao ZONE_SUBJECT_LABEL_KEY. Ela especifica qual zona é a origem do tráfego permitido. Por exemplo, se ZONE_SUBJECT_LABEL_KEY for zone e ZONE_SUBJECT_LABEL_VALUE for us-central1-a, as cargas de trabalho com o rótulo zone: us-central1-a serão a origem do tráfego.
    • ZONE_TARGET_LABEL_KEY: a chave do rótulo usado para selecionar a zona de destino.
    • ZONE_TARGET_LABEL_VALUE: o valor associado ao ZONE_TARGET_LABEL_KEY. Ela especifica qual zona é o destino do tráfego permitido.