Crie políticas de rede do Kubernetes para clusters padrão

Esta página fornece instruções para configurar o tráfego intra-cluster para um cluster padrão através de políticas de rede do Kubernetes no Google Distributed Cloud (GDC) air-gapped.

Um NetworkPolicy do Kubernetes NetworkPolicy é uma especificação de como os grupos de pods podem comunicar entre si e com outros pontos finais de rede. Os recursos NetworkPolicy usam etiquetas para selecionar pods e definir regras que especificam o tráfego permitido para os pods selecionados. Estas políticas têm âmbito local e aplicam-se apenas ao tráfego no cluster onde são definidas, a menos que seja criada uma política de permissão total, que também permite a comunicação com pontos finais de outros clusters padrão e partilhados.

Antes de começar

Para configurar políticas de rede do Kubernetes, tem de ter as autorizações necessárias no cluster para criar, modificar e eliminar recursos NetworkPolicy nos espaços de nomes relevantes.

Crie uma política de pod para pod intra-cluster

Estas políticas controlam o tráfego entre pods no mesmo cluster padrão.

Crie uma política de entrada de pod para pod intra-cluster

  • Para permitir o tráfego de entrada de pod para pod intra-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
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.
    • PEER_NAMESPACE: o espaço de nomes de pares no cluster padrão.
    • SUBJECT_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com a etiqueta app: backend estão a receber o tráfego.
    • PEER_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho pares.
    • PEER_LABEL_VALUE: o valor associado ao PEER_LABEL_KEY.
    • PORT: a porta na carga de trabalho em questão onde o tráfego é permitido.

Crie uma política de saída de pod para pod intra-cluster

  • Para permitir o tráfego de saída de pod para pod intra-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
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.
    • PEER_NAMESPACE: o espaço de nomes de pares no cluster padrão.
    • SUBJECT_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com a etiqueta app: backend estão a enviar o tráfego.
    • PEER_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho pares.
    • PEER_LABEL_VALUE: o valor associado ao PEER_LABEL_KEY.
    • PORT: a porta na carga de trabalho de pares onde o tráfego é permitido.

Crie uma política de pod a pod intra-cluster com um balanceador de carga

Estas políticas controlam o tráfego entre pods no mesmo cluster quando o tráfego é encaminhado através de um equilibrador de carga externo.

Crie uma política de entrada de pod para pod intra-cluster com um equilibrador de carga

  • Para permitir o tráfego de entrada de pod para pod intra-cluster através de um equilibrador 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
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.
    • SUBJECT_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com a etiqueta app: backend estão a 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 onde o tráfego é permitido.

Crie uma política de saída de pod para pod intra-cluster com um equilibrador de carga

  • Para permitir o tráfego de saída de pod para pod intra-cluster através de um equilibrador 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
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.
    • SUBJECT_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com a etiqueta app: backend estão a enviar o tráfego.
    • ELB_EXTERNAL_IP: o endereço IP externo do equilibrador de carga.
    • PORT: a porta no ponto final externo para a qual o tráfego é permitido.

Crie uma política externa à organização

Estas políticas controlam o tráfego entre um pod num cluster padrão e um ponto final externo (qualquer endereço IP fora do cluster).

Crie uma política de entrada para tráfego externo à organização

  • Para permitir o tráfego de entrada a partir de um ponto final 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
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.
    • SUBJECT_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com a etiqueta app: backend estão a 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 onde o tráfego é permitido.

Crie uma política de saída para tráfego externo à organização

  • Para permitir o tráfego de saída para um ponto final 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
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.
    • SUBJECT_LABEL_KEY: a chave da etiqueta usada para selecionar as cargas de trabalho do assunto. Por exemplo, app, tier ou role.
    • SUBJECT_LABEL_VALUE: o valor associado ao SUBJECT_LABEL_KEY. Por exemplo, se SUBJECT_LABEL_KEY for app e SUBJECT_LABEL_VALUE for backend, as cargas de trabalho com a etiqueta app: backend estão a enviar o tráfego.
    • EXTERNAL_CIDR: o CIDR externo, por exemplo: 20.0.0.0/16.
    • PORT: a porta no ponto final externo para a qual o tráfego é permitido.

Crie uma política de permissão total

As seguintes políticas podem ser usadas para permitir explicitamente todo o tráfego. Isto permite a comunicação com pontos finais de outros clusters padrão e partilhados.

Crie uma política de entrada que permita 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:
      - {}
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.

Crie uma política de saída que permita 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:
      - {}
    EOF
    

    Substitua o seguinte:

    • CLUSTER_API_SERVER: o caminho kubeconfig do servidor da API do cluster. Se ainda não gerou um ficheiro kubeconfig para o servidor da API, consulte o artigo Iniciar sessão para ver detalhes.
    • SUBJECT_NAMESPACE: o espaço de nomes do assunto no cluster padrão.