Política de red

Para establecer una política de red para las cargas de trabajo de máquina virtual (VM) a nivel del espacio de nombres del proyecto, usa el recurso ProjectNetworkPolicy, una política de red de varios clústeres para Google Distributed Cloud con aislamiento de aire (GDC). Te permite definir políticas que permiten la comunicación dentro de los proyectos, entre proyectos y con direcciones IP externas.

Para el tráfico dentro de un proyecto, GDC aplica una política de red del proyecto predefinida, la política intraproyecto, a cada proyecto de forma predeterminada. Para habilitar y controlar el tráfico entre proyectos dentro de la misma organización, define políticas entre proyectos. Cuando hay varias políticas presentes, GDC combina de forma aditiva las reglas de cada proyecto. El GDC también permite el tráfico si coincide al menos una de las reglas.

Solicita permiso y acceso

Para realizar las tareas que se indican en esta página, debes tener el rol de administrador de ProjectNetworkPolicy. Pídele al administrador de IAM del proyecto que te otorgue el rol de administrador de NetworkPolicy del proyecto (project-networkpolicy-admin) en el espacio de nombres del proyecto en el que reside la VM.

Tráfico dentro del proyecto

De forma predeterminada, las cargas de trabajo de VM en un espacio de nombres del proyecto pueden comunicarse entre sí sin exponer servicios al mundo externo, incluso si las VMs forman parte de diferentes clústeres dentro del mismo proyecto.

Política de red de tráfico de entrada dentro del proyecto

Cuando creas un proyecto, creas un objeto ProjectNetworkPolicy base predeterminado en el servidor de la API de Management para permitir la comunicación dentro del proyecto. Esta política permite el tráfico de entrada de otras cargas de trabajo en el mismo proyecto. Puedes quitarlo, pero ten cuidado si lo haces, ya que esto provocará que se rechace la comunicación entre proyectos y la carga de trabajo del contenedor.

Política de red de tráfico de salida dentro del proyecto

De forma predeterminada, no es necesario que realices ninguna acción en relación con la salida. Esto se debe a que, en ausencia de una política de salida, se permite todo el tráfico. Sin embargo, cuando estableces una sola política, solo se permite el tráfico que especifica la política.

Cuando inhabilitas la Prevención de robo de datos y aplicas un ProjectNetworkPolicy de salida al proyecto, como impedir el acceso a un recurso externo, usa una política obligatoria para permitir la salida dentro del proyecto:

kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT_1
  name: allow-intra-project-egress-traffic
spec:
  policyType: Egress

  ingress:
  - from:
    - projects:
        matchNames:
        - PROJECT_1
EOF

Tráfico entre proyectos (dentro de la organización)

Las cargas de trabajo de VM de diferentes espacios de nombres de proyectos pero dentro de la misma organización pueden comunicarse entre sí aplicando una política de red entre proyectos.

Política de red de tráfico de entrada entre proyectos

Para que las cargas de trabajo del proyecto permitan conexiones de otras cargas de trabajo en otro proyecto, debes configurar una política de entrada para permitir que las otras cargas de trabajo del proyecto transfieran datos.

La siguiente política permite que las cargas de trabajo en el proyecto PROJECT_1 permitan conexiones de cargas de trabajo en el proyecto PROJECT_2, así como el tráfico de retorno para los mismos flujos. Si deseas acceder a tu VM en PROJECT_1 desde una fuente dentro de PROJECT_2, también puedes usar esta política. Ejecuta el siguiente comando para aplicar la política:

kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT_1
  name: allow-ingress-traffic-from-PROJECT_2
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - projects:
        matchNames:
        - PROJECT_2
EOF

El comando anterior permite que PROJECT_2 vaya a PROJECT_1, pero no permite las conexiones iniciadas desde PROJECT_1 a PROJECT_2. En el caso de la última, necesitas una política recíproca en el proyecto PROJECT_2. Ejecuta el siguiente comando para aplicar la política de reciprocidad:

kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT_2
  name: allow-ingress-traffic-from-PROJECT_1
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - projects:
        matchNames:
        - PROJECT_1
EOF

Ahora permitiste las conexiones iniciadas hacia PROJECT_1 y PROJECT_2, y desde ellas.

Usa las siguientes definiciones para tus variables.

VariableDefinición
MANAGEMENT_API_SERVEREs la ruta de acceso kubeconfig del servidor de la API de Management.
PROJECT_1Es el nombre de un proyecto de GDC que corresponde a PROJECT_1 en el ejemplo.
PROJECT_2Es el nombre de un proyecto de GDC que corresponde a PROJECT_2 en el ejemplo.

Política de red de tráfico de salida entre proyectos

Cuando otorgas una política de tráfico entre proyectos de entrada para habilitar cargas de trabajo en un proyecto, PROJECT_1, para permitir conexiones desde cargas de trabajo en otro proyecto, PROJECT_2, esto también otorga el tráfico de retorno para los mismos flujos. Por lo tanto, no necesitas una política de red de tráfico entre proyectos de salida.

Tráfico entre organizaciones

Para conectar una carga de trabajo de VM a un destino fuera de tu proyecto que se encuentra en una organización diferente, se requiere aprobación explícita. Esa aprobación se debe a la prevención de robo de datos, que GDC habilita de forma predeterminada y evita que un proyecto tenga salida a cargas de trabajo fuera de la organización en la que reside el proyecto. En esta sección, se incluyen las instrucciones para agregar una política de salida específica y habilitar la robo de datos.

Política de red de tráfico de entrada entre organizaciones

Para permitir el tráfico de entrada entre diferentes organizaciones, se debe aplicar un ProjectNetworkPolicy que permita el tráfico de clientes externos de la organización a tu proyecto, por ejemplo, conectarse a la VM con SSH.

No se requiere una política de salida correspondiente para el tráfico de respuesta. El tráfico de retorno se permite de forma implícita.

Si deseas acceder a tu VM en PROJECT_1 desde una fuente externa a la organización en la que reside la VM, debes aplicar la siguiente política para lograrlo. Debes obtener y usar el CIDR que contiene tu dirección IP de origen. El CIDR debe estar en notación network/len. Por ejemplo, 192.0.2.0/21 es un valor válido.

  1. Configura y aplica tu ProjectNetworkPolicy de Ingress, siguiendo el ejemplo de kubectl. Aplica la política a todas las cargas de trabajo del usuario en PROJECT_1. Permite el tráfico de entrada a todos los hosts en CIDR, que residen fuera de la organización.

  2. Aplica la configuración de ProjectNetworkPolicy:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT_1
      name: allow-external-traffic
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
      ingress:
       - from:
         - ipBlock:
             cidr: CIDR
    EOF
    

Política de red de tráfico de salida entre organizaciones

Para habilitar la transferencia de datos a servicios fuera de la organización, personaliza la política de red de tu proyecto, ProjectNetworkPolicy. Dado que la Prevención de exfiltración de datos está habilitada de forma predeterminada, tu ProjectNetworkPolicy de salida personalizado muestra un error de validación en el campo de estado, y el plano de datos lo ignora. Este proceso se realiza de forma predeterminada.

Como se indica en Seguridad y conectividad, las cargas de trabajo pueden transferir datos cuando permites la robo de datos para un proyecto determinado. El tráfico que permites para la transferencia de datos salientes es una traducción de direcciones de red (NAT) de origen que usa una dirección IP conocida asignada al proyecto. Seguridad y conectividad también proporciona detalles sobre la aplicación de la política de red del proyecto (ProjectNetworkPolicy).

No se requiere una política de Ingress correspondiente para el tráfico de respuesta. El tráfico de retorno se permite de forma implícita.

Habilita tu política de salida personalizada:

  1. Configura y aplica tu propio Egress personalizado ProjectNetworkPolicy, siguiendo el ejemplo de kubectl. Aplica la política a todas las cargas de trabajo de los usuarios en PROJECT_1. Permite el tráfico de salida a todos los hosts en CIDR, que residen fuera de la organización. Tu primer intento genera un error de estado necesario, lo que es intencional.

  2. Aplica la configuración de ProjectNetworkPolicy:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT_1
      name: allow-egress-traffic-to-NAME
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
      egress:
       - to:
         - ipBlock:
             cidr: CIDR
    EOF
    
  3. Cuando termines, confirma que ves un error de validación en tu estado.

  4. Pídele al usuario administrador que inhabilite la Prevención de robo de datos. Esto habilita tu configuración y, al mismo tiempo, evita cualquier otro tráfico de salida.

  5. Revisa el ProjectNetworkPolicy que acabas de crear y verifica que el error en el campo de estado de validación haya desaparecido y que el estado Ready sea True, lo que indica que tu política está vigente:

    kubectl --kubeconfig MANAGEMENT_API_SERVER get projectnetworkpolicy
    allow-egress-traffic-to-NAME -n PROJECT_1 -o yaml
    

    Reemplaza las variables con las siguientes definiciones.

    VariableDefinición
    MANAGEMENT_API_SERVEREs la ruta de acceso a kubeconfig del servidor de la API de Management.
    PROJECT_1Es el nombre del proyecto de GDC.
    CIDRBloque de enrutamiento entre dominios sin clases (CIDR) del destino permitido.
    NAMEEs un nombre asociado con el destino.

    Después de aplicar esta política, y siempre que no hayas definido otras políticas de salida, se rechazará todo el tráfico de salida para PROJECT_1.