Crea políticas de red de Kubernetes para clústeres estándar

En esta página, se proporcionan instrucciones para configurar el tráfico dentro del clúster para un clúster estándar con políticas de red de Kubernetes en Google Distributed Cloud (GDC) aislado.

Una NetworkPolicy de Kubernetes es una especificación de cómo los grupos de Pods pueden comunicarse entre sí y con otros extremos de la red. Los recursos NetworkPolicy usan etiquetas para seleccionar pods y definir reglas que especifican qué tráfico se permite en los pods seleccionados. Estas políticas tienen un alcance local y se aplican solo al tráfico dentro del clúster en el que se definen, a menos que se cree una política de permitir todo, que también permite la comunicación con extremos de otros clústeres estándares y compartidos.

Antes de comenzar

Para configurar políticas de red de Kubernetes, debes tener los permisos necesarios dentro del clúster para crear, modificar y borrar recursos NetworkPolicy en los espacios de nombres pertinentes.

Crea una política de pod a pod dentro del clúster

Estas políticas controlan el tráfico entre los pods dentro del mismo clúster estándar.

Crea una política de entrada de pod a pod dentro del clúster

  • Para permitir el tráfico de entrada de pod a pod dentro del clúster, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.
    • PEER_NAMESPACE: Es el espacio de nombres del par en el clúster estándar.
    • SUBJECT_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: Es el valor asociado con el SUBJECT_LABEL_KEY. Por ejemplo, si SUBJECT_LABEL_KEY es app y SUBJECT_LABEL_VALUE es backend, las cargas de trabajo con la etiqueta app: backend reciben el tráfico.
    • PEER_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo de los pares.
    • PEER_LABEL_VALUE: Es el valor asociado con el PEER_LABEL_KEY.
    • PORT: Es el puerto de la carga de trabajo del asunto en el que se permite el tráfico.

Crea una política de salida de pod a pod dentro del clúster

  • Para permitir el tráfico de salida de pod a pod dentro del clúster, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.
    • PEER_NAMESPACE: Es el espacio de nombres del par en el clúster estándar.
    • SUBJECT_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: Es el valor asociado con el SUBJECT_LABEL_KEY. Por ejemplo, si SUBJECT_LABEL_KEY es app y SUBJECT_LABEL_VALUE es backend, las cargas de trabajo con la etiqueta app: backend envían el tráfico.
    • PEER_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo de los pares.
    • PEER_LABEL_VALUE: Es el valor asociado con el PEER_LABEL_KEY.
    • PORT: Es el puerto de la carga de trabajo del par en el que se permite el tráfico.

Crea una política de pod a pod dentro del clúster con un balanceador de cargas

Estas políticas controlan el tráfico entre los pods dentro del mismo clúster cuando el tráfico se enruta a través de un balanceador de cargas externo.

Crea una política de entrada de pod a pod dentro del clúster con un balanceador de cargas

  • Para permitir el tráfico de entrada de pod a pod dentro del clúster con un balanceador de cargas, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.
    • SUBJECT_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: Es el valor asociado con el SUBJECT_LABEL_KEY. Por ejemplo, si SUBJECT_LABEL_KEY es app y SUBJECT_LABEL_VALUE es backend, las cargas de trabajo con la etiqueta app: backend reciben el tráfico.
    • EGRESS_NAT_IP: Es la IP NAT de salida del Pod de origen.
    • PORT: Es el puerto de la carga de trabajo del asunto en el que se permite el tráfico.

Crea una política de salida de pod a pod dentro del clúster con un balanceador de cargas

  • Para permitir el tráfico de salida de pod a pod dentro del clúster con un balanceador de cargas, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.
    • SUBJECT_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: Es el valor asociado con el SUBJECT_LABEL_KEY. Por ejemplo, si SUBJECT_LABEL_KEY es app y SUBJECT_LABEL_VALUE es backend, las cargas de trabajo con la etiqueta app: backend envían el tráfico.
    • ELB_EXTERNAL_IP: Es la dirección IP externa del balanceador de cargas.
    • PORT: Es el puerto del extremo externo al que se permite el tráfico.

Crea una política externa a la organización

Estas políticas controlan el tráfico entre un Pod en un clúster estándar y un extremo externo (cualquier dirección IP fuera del clúster).

Crea una política de entrada para el tráfico externo a la organización

  • Para permitir el tráfico de entrada desde un extremo externo a la organización, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.
    • SUBJECT_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: Es el valor asociado con el SUBJECT_LABEL_KEY. Por ejemplo, si SUBJECT_LABEL_KEY es app y SUBJECT_LABEL_VALUE es backend, las cargas de trabajo con la etiqueta app: backend reciben el tráfico.
    • EXTERNAL_CIDR: Es el CIDR externo, por ejemplo, 20.0.0.0/16.
    • PORT: Es el puerto de la carga de trabajo del asunto en el que se permite el tráfico.

Crea una política de salida para el tráfico externo a la organización

  • Para permitir el tráfico de salida a un extremo externo a la organización, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.
    • SUBJECT_LABEL_KEY: Es la clave de la etiqueta que se usa para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: Es el valor asociado con el SUBJECT_LABEL_KEY. Por ejemplo, si SUBJECT_LABEL_KEY es app y SUBJECT_LABEL_VALUE es backend, las cargas de trabajo con la etiqueta app: backend envían el tráfico.
    • EXTERNAL_CIDR: Es el CIDR externo, por ejemplo, 20.0.0.0/16.
    • PORT: Es el puerto del extremo externo al que se permite el tráfico.

Crea una política de "permitir todo"

Se pueden usar las siguientes políticas para permitir explícitamente todo el tráfico. Esto permite la comunicación con extremos de otros clústeres estándar y compartidos.

Crea una política de entrada que permita todo

  • Para permitir todo el tráfico entrante, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.

Crea una política de salida que permita todo

  • Para permitir todo el tráfico saliente, crea y aplica el siguiente 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
    

    Reemplaza lo siguiente:

    • CLUSTER_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API del clúster. Si aún no generaste un archivo kubeconfig para el servidor de la API, consulta Accede para obtener más detalles.
    • SUBJECT_NAMESPACE: Es el espacio de nombres del sujeto en el clúster estándar.