Nesta página, fornecemos instruções para configurar o tráfego intracluster em um cluster padrão usando políticas de rede do Kubernetes no Google Distributed Cloud (GDC) com isolamento físico.
Uma NetworkPolicy do Kubernetes é uma especificação de como grupos de pods podem se comunicar uns com os outros e com outros endpoints da rede. Os recursos NetworkPolicy usam rótulos para selecionar pods e definir regras que especificam qual tráfego é permitido para os pods selecionados. Essas políticas têm escopo local e se aplicam apenas ao tráfego no cluster em que são definidas, a menos que uma política de permissão total seja criada, o que também permite a comunicação com endpoints de outros clusters padrão e compartilhados.
Antes de começar
Para configurar políticas de rede do Kubernetes, você precisa ter as permissões necessárias no cluster para criar, modificar e excluir recursos NetworkPolicy nos namespaces relevantes.
Criar uma política de pod para pod intracluster
Essas políticas controlam o tráfego entre pods no mesmo cluster padrão.
Criar uma política de entrada de pod para pod intracluster
Para permitir o tráfego de entrada de pod para pod no cluster, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-intra-cluster-ingress-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: Kubernetes.io/metadata.name: PEER_NAMESPACE podSelector: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE ports: - protocol: TCP port: PORT EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.PEER_NAMESPACE: o namespace do peer no cluster padrão.SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho em questão. Por exemplo,app,tierourole.SUBJECT_LABEL_VALUE: o valor associado aoSUBJECT_LABEL_KEY. Por exemplo, seSUBJECT_LABEL_KEYforappeSUBJECT_LABEL_VALUEforbackend, as cargas de trabalho com o rótuloapp: backendvão receber o tráfego.PEER_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho do mesmo nível.PEER_LABEL_VALUE: o valor associado aoPEER_LABEL_KEY.PORT: a porta na carga de trabalho em questão em que o tráfego é permitido.
Criar uma política de saída de pod para pod intracluster
Para permitir o tráfego de saída de pod para pod no cluster, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-egress-intra-cluster-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: Kubernetes.io/metadata.name: PEER_NAMESPACE podSelector: matchLabels: PEER_LABEL_KEY: PEER_LABEL_VALUE ports: - protocol: TCP port: PORT EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.PEER_NAMESPACE: o namespace do peer no cluster padrão.SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho em questão. Por exemplo,app,tierourole.SUBJECT_LABEL_VALUE: o valor associado aoSUBJECT_LABEL_KEY. Por exemplo, seSUBJECT_LABEL_KEYforappeSUBJECT_LABEL_VALUEforbackend, as cargas de trabalho com o rótuloapp: backendestarão enviando o tráfego.PEER_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho do mesmo nível.PEER_LABEL_VALUE: o valor associado aoPEER_LABEL_KEY.PORT: a porta na carga de trabalho do mesmo nível em que o tráfego é permitido.
Criar uma política de pod para pod intracluster usando um balanceador de carga
Essas políticas controlam o tráfego entre pods no mesmo cluster quando ele é encaminhado por um balanceador de carga externo.
Criar uma política de entrada de pod para pod intracluster usando um balanceador de carga
Para permitir o tráfego de entrada de pod para pod intracluster usando um balanceador de carga, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-intra-cluster-ingress-traffic-via-elb namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Ingress ingress: - from: - ipBlock: cidr: EGRESS_NAT_IP/32 ports: - protocol: TCP port: PORT EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho em questão. Por exemplo,app,tierourole.SUBJECT_LABEL_VALUE: o valor associado aoSUBJECT_LABEL_KEY. Por exemplo, seSUBJECT_LABEL_KEYforappeSUBJECT_LABEL_VALUEforbackend, as cargas de trabalho com o rótuloapp: backendvão receber o tráfego.EGRESS_NAT_IP: o IP NAT de saída do pod de origem.PORT: a porta na carga de trabalho em questão em que o tráfego é permitido.
Criar uma política de saída de pod para pod intracluster usando um balanceador de carga
Para permitir o tráfego de saída de pod para pod intracluster usando um balanceador de carga, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-intra-cluster-egress-traffic-via-elb namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Egress egress: - to: - ipBlock: cidr: ELB_EXTERNAL_IP/32 ports: - protocol: TCP port: PORT EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho em questão. Por exemplo,app,tierourole.SUBJECT_LABEL_VALUE: o valor associado aoSUBJECT_LABEL_KEY. Por exemplo, seSUBJECT_LABEL_KEYforappeSUBJECT_LABEL_VALUEforbackend, as cargas de trabalho com o rótuloapp: backendestarão enviando o tráfego.ELB_EXTERNAL_IP: o endereço IP externo do balanceador de carga.PORT: a porta no endpoint externo para a qual o tráfego é permitido.
Criar uma política externa à organização
Essas políticas controlam o tráfego entre um pod em um cluster padrão e um endpoint externo (qualquer endereço IP fora do cluster).
Criar uma política de entrada para tráfego externo à organização
Para permitir o tráfego de entrada de um endpoint externo à organização, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-ingress-from-organization-external-to-standard-cluster-pod namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Ingress ingress: - from: - ipBlock: cidr: EXTERNAL_CIDR ports: - protocol: TCP port: PORT EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho em questão. Por exemplo,app,tierourole.SUBJECT_LABEL_VALUE: o valor associado aoSUBJECT_LABEL_KEY. Por exemplo, seSUBJECT_LABEL_KEYforappeSUBJECT_LABEL_VALUEforbackend, as cargas de trabalho com o rótuloapp: backendvão receber o tráfego.EXTERNAL_CIDR: o CIDR externo. Por exemplo:20.0.0.0/16.PORT: a porta na carga de trabalho em questão em que o tráfego é permitido.
Criar uma política de saída para tráfego externo à organização
Para permitir o tráfego de saída para um endpoint externo à organização, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-egress-from-standard-cluster-pod-to-organization-external namespace: SUBJECT_NAMESPACE spec: podSelector: matchLabels: SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE policyTypes: - Egress egress: - to: - ipBlock: cidr: EXTERNAL_CIDR ports: - protocol: TCP port: PORT EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.SUBJECT_LABEL_KEY: a chave do rótulo usado para selecionar as cargas de trabalho em questão. Por exemplo,app,tierourole.SUBJECT_LABEL_VALUE: o valor associado aoSUBJECT_LABEL_KEY. Por exemplo, seSUBJECT_LABEL_KEYforappeSUBJECT_LABEL_VALUEforbackend, as cargas de trabalho com o rótuloapp: backendestarão enviando o tráfego.EXTERNAL_CIDR: o CIDR externo. Por exemplo:20.0.0.0/16.PORT: a porta no endpoint externo para a qual o tráfego é permitido.
Criar uma política de permissão total
As políticas a seguir podem ser usadas para permitir explicitamente todo o tráfego. Isso permite a comunicação com endpoints de outros clusters padrão e compartilhados.
Criar uma política de entrada que permite tudo
Para permitir todo o tráfego de entrada, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all-ingress-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: {} policyTypes: - Ingress ingress: - {} EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.
Criar uma política de saída que permite tudo
Para permitir todo o tráfego de saída, crie e aplique o seguinte recurso:
kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all-egress-traffic namespace: SUBJECT_NAMESPACE spec: podSelector: {} policyTypes: - Egress egress: - {} EOFSubstitua:
CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se você ainda não gerou um arquivo kubeconfig para o servidor da API, consulte Fazer login para mais detalhes.SUBJECT_NAMESPACE: o namespace do assunto no cluster padrão.