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çãoglobal-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.
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
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
ourole
.SUBJECT_LABEL_VALUE
: o valor associado aoSUBJECT_LABEL_KEY
. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, seSUBJECT_LABEL_KEY
forapp
eSUBJECT_LABEL_VALUE
forbackend
, as cargas de trabalho com o rótuloapp: 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 aoTARGET_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
ourole
.SUBJECT_LABEL_VALUE
: o valor associado aoSUBJECT_LABEL_KEY
. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, seSUBJECT_LABEL_KEY
forapp
eSUBJECT_LABEL_VALUE
forbackend
, as cargas de trabalho com o rótuloapp: 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 aoTARGET_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.
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
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
ourole
.SUBJECT_LABEL_VALUE
: o valor associado aoSUBJECT_LABEL_KEY
. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, seSUBJECT_LABEL_KEY
forapp
eSUBJECT_LABEL_VALUE
forbackend
, as cargas de trabalho com o rótuloapp: 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 aoTARGET_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
ouregion
.ZONE_SUBJECT_LABEL_VALUE
: o valor associado aoZONE_SUBJECT_LABEL_KEY
. Ela especifica qual zona é a origem do tráfego permitido. Por exemplo, seZONE_SUBJECT_LABEL_KEY
forzone
eZONE_SUBJECT_LABEL_VALUE
forus-central1-a
, as cargas de trabalho com o rótulozone: 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 aoZONE_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
ourole
.SUBJECT_LABEL_VALUE
: o valor associado aoSUBJECT_LABEL_KEY
. Ele especifica quais cargas de trabalho são a origem do tráfego permitido. Por exemplo, seSUBJECT_LABEL_KEY
forapp
eSUBJECT_LABEL_VALUE
forbackend
, as cargas de trabalho com o rótuloapp: 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 aoTARGET_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
ouregion
.ZONE_SUBJECT_LABEL_VALUE
: o valor associado aoZONE_SUBJECT_LABEL_KEY
. Ela especifica qual zona é a origem do tráfego permitido. Por exemplo, seZONE_SUBJECT_LABEL_KEY
forzone
eZONE_SUBJECT_LABEL_VALUE
forus-central1-a
, as cargas de trabalho com o rótulozone: 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 aoZONE_TARGET_LABEL_KEY
. Ela especifica qual zona é o destino do tráfego permitido.