En esta guía, se muestra cómo configurar la visibilidad dentro de los nodos en un clúster de Google Kubernetes Engine (GKE).
La visibilidad dentro de los nodos configura las redes en cada nodo del clúster para que la red de nube privada virtual (VPC) del clúster procese el tráfico enviado de un Pod a otro Pod, incluso si los Pods están en el mismo nodo.
La visibilidad dentro de los nodos está inhabilitada de forma predeterminada en los clústeres de Standard y habilitada de forma predeterminada en los clústeres de Autopilot.
Arquitectura
La visibilidad dentro de los nodos garantiza que la red de VPC procese siempre los paquetes enviados entre Pods, lo que garantiza que las reglas de firewall, las rutas, los registros de flujo y las opciones de configuración de duplicación de paquetes se apliquen a los paquetes.
Cuando un pod envía un paquete a otro Pod en el mismo nodo, el paquete abandona el nodo, y la red de Google Cloud lo procesa. Luego, el paquete se envía de inmediato al mismo nodo y se reenvía al Pod de destino.
La visibilidad dentro de los nodos implementa el DaemonSet netd
.
Ventajas
La visibilidad dentro de los nodos proporciona los siguientes beneficios:
- Consulta los registros de flujo para todo el tráfico entre Pods, incluido el tráfico entre Pods del mismo nodo.
- Crea reglas de firewall que se apliquen a todo el tráfico entre los pods, incluido el tráfico entre pods del mismo nodo.
- Usa la duplicación de paquetes a fin de clonar el tráfico, incluido el tráfico entre pods en el mismo nodo, y reenviarlo para su análisis.
Requisitos y limitaciones
La visibilidad dentro de los nodos tiene los siguientes requisitos y limitaciones:
- Tu clúster debe estar en la versión 1.15 o posterior de GKE.
- Nota: La visibilidad dentro de los nodos no es compatible con los grupos de nodos de Windows Server.
- Si habilitas la visibilidad dentro de los nodos y usas
ip-masq-agent
configurado con el parámetrononMasqueradeCIDRs
, debes incluir el rango CIDR del Pod ennonMasqueradeCIDRs
para evitar problemas de conectividad dentro de los nodos.
Reglas de firewall
Cuando habilitas la visibilidad dentro de los nodos, la red de VPC procesa todos los paquetes enviados entre Pods, incluidos los paquetes enviados entre Pods en el mismo nodo. Esto significa que las reglas de firewall de VPC y las políticas de firewall jerárquicas se aplican de manera coherente a la comunicación de Pod a Pod, sin importar la ubicación del Pod.
Si configuras reglas de firewall personalizadas para la comunicación dentro del clúster, evalúa con cuidado las necesidades de red del clúster a fin de determinar el conjunto de reglas de permiso de entrada y salida. Puedes usar las pruebas de conectividad para asegurarte de que el tráfico legítimo no se obstruya. Por ejemplo, se requiere la comunicación de Pod a Pod para que la política de red funcione.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta
gcloud components update
para obtener la versión más reciente.
Habilita la visibilidad dentro de los nodos en un clúster nuevo
Puedes crear un clúster con visibilidad dentro de los nodos habilitada con la CLI de gcloud o la consola de Google Cloud.
gcloud
Para crear un clúster de nodo único que tenga habilitada la visibilidad dentro de los nodos, usa la marca --enable-intra-node-visibility
:
gcloud container clusters create CLUSTER_NAME \
--region=COMPUTE_REGION \
--enable-intra-node-visibility
Reemplaza lo siguiente:
CLUSTER_NAME
: Es el nombre del clúster nuevo.COMPUTE_REGION
: es la región de procesamiento para el clúster.
Console
Para crear un clúster de nodo único que tenga habilitada la visibilidad dentro de los nodos, realiza los siguientes pasos:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
Haga clic en add_boxCrear.
Ingresa el nombre de tu clúster.
En el cuadro de diálogo Configurar clúster, haz clic en Configurar junto a GKE Standard.
Configura tu clúster según sea necesario.
En el panel de navegación, en Clúster, haz clic en Redes.
Selecciona la casilla de verificación Habilita la visibilidad dentro de los nodos.
Haz clic en Crear.
Habilita la visibilidad dentro de los nodos en un clúster existente
Puedes habilitar la visibilidad dentro de los nodos para un clúster existente mediante la CLI de gcloud o la consola de Google Cloud.
Cuando habilitas la visibilidad dentro de los nodos para un clúster existente, GKE reinicia los componentes en el plano de control y en los nodos trabajadores.
gcloud
Para habilitar la visibilidad dentro de los nodos en un clúster existente, usa la marca --enable-intra-node-visibility
:
gcloud container clusters update CLUSTER_NAME \
--enable-intra-node-visibility
Reemplaza CLUSTER_NAME
por el nombre del clúster.
Console
Para habilitar la visibilidad dentro de los nodos en un clúster existente, realiza los siguientes pasos:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En Herramientas de redes, haz clic en edit Editar visibilidad dentro de los nodos.
Selecciona la casilla de verificación Habilita la visibilidad dentro de los nodos.
Haz clic en Save Changes.
Inhabilita la visibilidad dentro de los nodos.
Puedes inhabilitar la visibilidad dentro de los nodos en un clúster con la CLI de gcloud o la consola de Google Cloud.
Cuando inhabilitas la visibilidad dentro de los nodos para un clúster existente, GKE reinicia los componentes en el plano de control y en los nodos trabajadores.
gcloud
Para inhabilitar la visibilidad dentro de los nodos, usa la marca --no-enable-intra-node-visibility
:
gcloud container clusters update CLUSTER_NAME \
--no-enable-intra-node-visibility
Reemplaza CLUSTER_NAME
por el nombre del clúster.
Console
Para inhabilitar la visibilidad dentro de los nodos, sigue estos pasos:
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En Herramientas de redes, haz clic en edit Editar visibilidad dentro de los nodos.
Desactiva la casilla de verificación Habilitar la visibilidad dentro de los nodos.
Haz clic en Save Changes.
Ejercicio: Verifica la visibilidad dentro de los nodos
En este ejercicio, se muestran los pasos necesarios a fin de habilitar la visibilidad dentro de los nodos y confirmar que funciona para tu clúster.
En este ejercicio, debes realizar los siguientes pasos:
- Habilitar los registros de flujo para la subred predeterminada en la región
us-central1
- Crear un clúster de nodo único con visibilidad dentro de los nodos habilitada en la zona
us-central1-a
- Crear dos pods en tu clúster
- Enviar una solicitud HTTP de un Pod a otro
- Ver la entrada de registro de flujo para la solicitud de pod a pod
Habilitar los registros de flujo
Habilitar los registros de flujo para la subred predeterminada:
gcloud compute networks subnets update default \ --region=us-central1 \ --enable-flow-logs
Verificar que la subred predeterminada tenga habilitados los registros de flujo:
gcloud compute networks subnets describe default \ --region=us-central1
El resultado muestra que los registros de flujo están habilitados, similares a los siguientes:
... enableFlowLogs: true ...
Crea un clúster
Crea un clúster de nodo único con visibilidad dentro de los nodos habilitada:
gcloud container clusters create flow-log-test \ --zone=us-central1-a \ --num-nodes=1 \ --enable-intra-node-visibility
Obtén las credenciales para su clúster.
gcloud container clusters get-credentials flow-log-test \ --zone=us-central1-a
Cree dos Pods
Crea un Pod.
Guarda el siguiente manifiesto como un archivo llamado
pod-1.yaml
:apiVersion: v1 kind: Pod metadata: name: pod-1 spec: containers: - name: container-1 image: google/cloud-sdk:slim command: - sh - -c - while true; do sleep 30; done
Aplica el manifiesto al clúster:
kubectl apply -f pod-1.yaml
Crea un segundo Pod.
Guarda el siguiente manifiesto como un archivo llamado
pod-2.yaml
:apiVersion: v1 kind: Pod metadata: name: pod-2 spec: containers: - name: container-2 image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
Aplica el manifiesto al clúster:
kubectl apply -f pod-2.yaml
Visualiza los pods:
kubectl get pod pod-1 pod-2 --output wide
En la salida, se mostrarán las direcciones IP de tus Pods, que son similares a las siguientes:
NAME READY STATUS RESTARTS AGE IP ... pod-1 1/1 Running 0 1d 10.52.0.13 ... pod-2 1/1 Running 0 1d 10.52.0.14 ...
Anota las direcciones IP de
pod-1
ypod-2
.
envía una solicitud:
Obtén una shell para el contenedor en
pod-1
:kubectl exec -it pod-1 -- sh
En tu shell, envía una solicitud a
pod-2
:curl -s POD_2_IP_ADDRESS:8080
Reemplaza
POD_2_IP_ADDRESS
por la dirección IP depod-2
.El resultado muestra la respuesta del contenedor que se ejecuta en
pod-2
.Hello, world! Version: 2.0.0 Hostname: pod-2
Escribe exit para salir de la shell y regresar al entorno de línea de comandos principal.
Visualiza entradas del registro de flujo
Para ver una entrada de registro de flujo, usa el siguiente comando:
gcloud logging read \
'logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND jsonPayload.connection.src_ip="POD_1_IP_ADDRESS" AND jsonPayload.connection.dest_ip="POD_2_IP_ADDRESS"'
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoPOD_1_IP_ADDRESS
: es la dirección IP depod-1
.POD_2_IP_ADDRESS
: es la dirección IP depod-2
.
El resultado muestra una entrada de registro de flujo para una solicitud de pod-1
a pod-2
. En este ejemplo, pod-1
tiene la dirección IP 10.56.0.13
y pod-2
tiene la dirección IP 10.56.0.14
.
...
jsonPayload:
bytes_sent: '0'
connection:
dest_ip: 10.56.0.14
dest_port: 8080
protocol: 6
src_ip: 10.56.0.13
src_port: 35414
...
Realiza una limpieza
Para evitar que se apliquen cargos no deseados a tu cuenta, sigue estos pasos a fin de quitar los recursos que creaste:
Borra el clúster:
gcloud container clusters delete -q flow-log-test
Inhabilita los registros de flujo para la subred predeterminada:
gcloud compute networks subnets update default --no-enable-flow-logs
¿Qué sigue?
- Obtén información sobre el control de la comunicación entre los servicios y los Pods de tu clúster mediante la creación de una política de red de clústeres.
- Obtén información sobre los beneficios de los clústeres nativos de la VPC.