Crear 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 de un clúster estándar mediante políticas de red de Kubernetes en Google Distributed Cloud (GDC) con air gap.

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

Antes de empezar

Para configurar las políticas de red de Kubernetes, debes tener los permisos necesarios en el clúster para crear, modificar y eliminar recursos NetworkPolicy en los espacios de nombres correspondientes.

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

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

Crear 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.
    • PEER_NAMESPACE: el espacio de nombres del mismo nivel en el clúster estándar.
    • SUBJECT_LABEL_KEY: la clave de la etiqueta usada para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: el valor asociado a 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: la clave de la etiqueta usada para seleccionar las cargas de trabajo del mismo nivel.
    • PEER_LABEL_VALUE: el valor asociado a PEER_LABEL_KEY.
    • PORT: el puerto de la carga de trabajo en cuestión en el que se permite el tráfico.

Crear 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.
    • PEER_NAMESPACE: el espacio de nombres del mismo nivel en el clúster estándar.
    • SUBJECT_LABEL_KEY: la clave de la etiqueta usada para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: el valor asociado a 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 están enviando el tráfico.
    • PEER_LABEL_KEY: la clave de la etiqueta usada para seleccionar las cargas de trabajo del mismo nivel.
    • PEER_LABEL_VALUE: el valor asociado a PEER_LABEL_KEY.
    • PORT: el puerto de la carga de trabajo del mismo nivel en el que se permite el tráfico.

Crear una política de pod a pod dentro del clúster mediante un balanceador de carga

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

Crear una política de entrada de pod a pod dentro del clúster mediante un balanceador de carga

  • Para permitir el tráfico de entrada de pod a pod dentro del clúster mediante un balanceador de carga, 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.
    • SUBJECT_LABEL_KEY: la clave de la etiqueta usada para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: el valor asociado a 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: la IP de NAT de salida del pod de origen.
    • PORT: el puerto de la carga de trabajo en cuestión en el que se permite el tráfico.

Crear una política de salida de pod a pod dentro del clúster mediante un balanceador de carga

  • Para permitir el tráfico de salida de pod a pod dentro del clúster mediante un balanceador de carga, 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.
    • SUBJECT_LABEL_KEY: la clave de la etiqueta usada para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: el valor asociado a 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 están enviando el tráfico.
    • ELB_EXTERNAL_IP: la dirección IP externa del balanceador de carga.
    • PORT: el puerto del endpoint externo al que se permite el tráfico.

Crear una política externa a la organización

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

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

  • Para permitir el tráfico entrante desde un endpoint 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.
    • SUBJECT_LABEL_KEY: la clave de la etiqueta usada para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: el valor asociado a 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: el CIDR externo. Por ejemplo, 20.0.0.0/16.
    • PORT: el puerto de la carga de trabajo en cuestión en el que se permite el tráfico.

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

  • Para permitir el tráfico de salida a un endpoint externo a una 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.
    • SUBJECT_LABEL_KEY: la clave de la etiqueta usada para seleccionar las cargas de trabajo del asunto. Por ejemplo, app, tier o role.
    • SUBJECT_LABEL_VALUE: el valor asociado a 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 están enviando el tráfico.
    • EXTERNAL_CIDR: el CIDR externo. Por ejemplo, 20.0.0.0/16.
    • PORT: el puerto del endpoint externo al que se permite el tráfico.

Crear una política que permita todo

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

Crear una política de permitir todo el tráfico de entrada

  • 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.

Crear 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
    

    Haz los cambios siguientes:

    • CLUSTER_API_SERVER: la ruta de kubeconfig del servidor de la API del clúster. Si aún no has generado un archivo kubeconfig para el servidor de la API, consulta Iniciar sesión para obtener más información.
    • SUBJECT_NAMESPACE: el espacio de nombres del asunto en el clúster estándar.