En esta página, se explica cómo configurar las políticas de red de todo el clúster de para Google Kubernetes Engine (GKE).
Las políticas de red y de FQDN te ayudan a definir reglas de tráfico de comunicación entre Pods. Las políticas de red controlan cómo los Pods se comunican entre sí dentro de sus aplicaciones y con extremos externos.
Como administrador de clúster, puedes configurar las políticas de red de todo el clúster (CCNP) de Cilium, que superan las limitaciones de la política de red para administrar el tráfico administrativo de todo el clúster. Las políticas de red de todo el clúster de Cilium aplican reglas de red estrictas para todas las cargas de trabajo en todo el clúster, en todos los espacios de nombres, anulando cualquier regla específica de la aplicación.
La política de red de todo el clúster de Cilium para GKE es una CustomResourceDefinition (CRD) centrada en el clúster que especifica las políticas que aplica GKE. Si habilitas la política de red de todo el clúster de Cilium en GKE, puedes administrar de forma centralizada las reglas de red para todo el clúster. Puedes controlar el acceso básico a la capa 3 (nivel de IP) y la capa 4 (nivel de puerto) para el tráfico que entra y sale del clúster.
Ventajas
Con la política de red de todo el clúster de Cilium, puedes hacer lo siguiente:
- Aplica la seguridad centralizada: Con CCNP, puedes definir reglas de acceso a la red que se aplican a toda tu red. Estas reglas de CCNP actúan como una capa de seguridad de nivel superior, anula cualquier política potencialmente conflictiva a nivel del espacio de nombres.
- Protege múltiples usuarios: Si tu clúster aloja varios equipos o usuarios, puedes proteger el aislamiento dentro de un clúster compartido implementando reglas de CCNP, que se enfocan en el control del tráfico de red. Para aplicar la separación a nivel de la red, asigna espacios de nombres o grupos de espacios de nombres a equipos específicos.
- Define políticas predeterminadas flexibles: Con CCNP, puedes definir reglas de red predeterminadas para todo el clúster. Puedes personalizar estas reglas cuando sea necesario sin comprometer la seguridad general del clúster.
Para implementar CCNP, habilita GKE Dataplane V2 en tu clúster. Asegúrate de que la CRD de CCNP esté habilitada y, luego, crea políticas que definan las reglas de acceso a la red para tu clúster.
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.
Requisitos
Las políticas de red de todo el clúster de Cilium tienen los siguientes requisitos:
- Versión 465.0.0 o posterior de Google Cloud CLI.
- Debes tener un clúster de GKE que ejecute una de las siguientes versiones:
- 1.28.6-gke.1095000 o superior
- 1.29.1-gke.1016000 o superior
- Tu clúster debe usar GKE Dataplane V2.
- Debes habilitar la CRD de la política de red de todo el clúster de Cilium.
Limitaciones
Las políticas de red de todo el clúster de Cilium tienen las siguientes limitaciones:
- No se admiten las políticas de la capa 7.
- No se admiten los selectores de nodos.
- La cantidad máxima de
CiliumClusterwideNetworkPolicy
por clúster es 1,000.
Habilita la política de red de todo el clúster de Cilium en un clúster nuevo
Puedes habilitar la política de red de todo el clúster de Cilium en un clúster nuevo mediante Google Cloud CLI o la API de Google Kubernetes Engine.
gcloud
Para habilitar la política de red de todo el clúster de Cilium en un clúster nuevo, crea un clúster nuevo con la marca --enable-cilium-clusterwide-network-policy
.
Autopilot
gcloud container clusters create-auto CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy
Reemplaza lo siguiente:
CLUSTER_NAME
por el nombre del clúster.COMPUTE_LOCATION
por la ubicación del clúster
Standard
gcloud container clusters create CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy \
--enable-dataplane-v2
Reemplaza lo siguiente:
CLUSTER_NAME
por el nombre del clúster.COMPUTE_LOCATION
por la ubicación del clúster
API
Para habilitar la política de red de todo el clúster de Cilium, debes especificar las siguientes opciones cuando crees un clúster nuevo:
El campo datapathProvider
en el objeto networkConfig
{
"cluster": {
...
"networkConfig": {
"datapathProvider": "ADVANCED_DATAPATH",
"enableCiliumClusterwideNetworkPolicy": true
}
}
}
Verifica que ciliumclusterwidenetworkpolicies.cilium.io
esté presente en el resultado del siguiente comando:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
El resultado debería ser similar al siguiente ejemplo:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Habilita la política de red de todo el clúster de Cilium en un clúster existente
Puedes habilitar la política de red de todo el clúster de Cilium en un clúster existente con Google Cloud CLI o la API de Google Kubernetes Engine.
gcloud
Confirma que el clúster tenga GKE Dataplane V2 habilitado.
gcloud container clusters describe CLUSTER_NAME \ --location COMPUTE_LOCATION \ --format="value(networkConfig.datapathProvider)" \
Reemplaza lo siguiente:
CLUSTER_NAME
por el nombre del clúster.COMPUTE_LOCATION
por la ubicación del clúster
Actualiza el clúster con la marca
--enable-cilium-clusterwide-network-policy
:gcloud container clusters update CLUSTER_NAME \ --location COMPUTE_LOCATION \ --enable-cilium-clusterwide-network-policy
Reinicia el DaemonSet anetd.
kubectl rollout restart ds -n kube-system anetd && \ kubectl rollout status ds -n kube-system anetd
API
Confirma que el clúster esté habilitado para GKE Dataplane V2:
{
"update": {
"desiredEnableCiliumClusterwideNetworkPolicy": true
},
"name": "cluster"
}
To update an existing cluster, run the following update cluster command:
{
"update": {
"desiredEnableCiliumClusterwideNetworkPolicy": true
}
"name": "cluster"
}
Verifica que ciliumclusterwidenetworkpolicies.cilium.io
esté presente en el resultado del siguiente comando:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
El resultado debería ser similar al siguiente ejemplo:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Usa la política de red de todo el clúster de Cilium
En esta sección, se enumeran ejemplos para configurar la política de red de todo el clúster de Cilium.
Ejemplo 1: Controla el tráfico de entrada a una carga de trabajo
En el siguiente ejemplo, se habilita que todos los extremos con la etiqueta role=backend
acepten conexiones de entrada en el puerto 80 desde extremos con la etiqueta role=frontend
. Los extremos con la etiqueta role=backend
rechazarán todas las conexiones de entrada que no estén permitidas por esta política.
Guarda el siguiente manifiesto como
l4-rule-ingress.yaml
:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "l4-rule-ingress" spec: endpointSelector: matchLabels: role: backend ingress: - fromEndpoints: - matchLabels: role: frontend toPorts: - ports: - port: "80" protocol: TCP
Aplica el manifiesto
kubectl apply -f l4-rule-ingress.yaml
Ejemplo 2: Restringe el tráfico de salida de una carga de trabajo en un puerto determinado
La siguiente regla limita todos los extremos con la etiqueta app=myService
para que solo puedan emitir paquetes con TCP en el puerto 80 a cualquier destino de la capa 3:
Guarda el siguiente manifiesto como
l4-rule-egress.yaml
:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "l4-rule-egress" spec: endpointSelector: matchLabels: app: myService egress: - toPorts: - ports: - port: "80" protocol: TCP
Aplica el manifiesto
kubectl apply -f l4-rule-egress.yaml
Ejemplo 3: restringe el tráfico de salida de una carga de trabajo en un puerto y CIDR determinados
En el siguiente ejemplo, se limitan todos los extremos con la etiqueta role=crawler
para que solo puedan enviar paquetes en el puerto 80, protocolos TCP, a un CIDR de destino 192.10.2.0/24
.
Guarda el siguiente manifiesto como
cidr-l4-rule.yaml
:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "cidr-l4-rule" spec: endpointSelector: matchLabels: role: crawler egress: - toCIDR: - 192.0.2.0/24 toPorts: - ports: - port: "80" protocol: TCP
Aplica el manifiesto
kubectl apply -f cidr-l4-rule.yaml
Supervisa y soluciona problemas de tráfico de red
Puedes supervisar y solucionar problemas del tráfico de red afectado por las políticas de red de todo el clúster de cilium mediante el registro de políticas de red y la observabilidad de GKE Dataplane V2.
Intenta usar políticas de capa 7 o selectores de nodos
Síntoma
Si usas GKE con GKE Dataplane V2 y tratas de definir políticas de CCNP que incluyen reglas de la capa 7 (por ejemplo: filtrado HTTP) y selectores de nodos, es posible que veas un mensaje de error similar al siguiente:
Error
Error from server (GKE Warden constraints violations): error when creating
"ccnp.yaml": admission webhook
"warden-validating.common-webhooks.networking.gke.io" denied the request: GKE
Warden rejected the request because it violates one or more constraints.
Violations details: {"[denied by gke-cilium-network-policy-limitation]":["L7
rules are not allowed in CiliumClusterwideNetworkPolicy"]} Requested by user:
'user@example.com', groups: 'system:authenticated'.
Posible causa:
GKE tiene limitaciones específicas en los CCNP. Las políticas de capa 7, que permiten el filtrado basado en datos a nivel de la aplicación (como encabezados HTTP) y los selectores de nodos no son compatibles con la integración de Cilium de GKE.
Solución
Si necesitas capacidades avanzadas de filtrado de capa 7 en tu clúster de GKE, considera usar Cloud Service Mesh. Esto proporciona un control del tráfico más detallado a nivel de la aplicación.
No se habilitó la política de red de todo el clúster de Cilium
Síntoma
Cuando intentes configurar las políticas de red del clúster de Cilium (CCNP) en un clúster en el que la función no se habilitó de forma explícita, no podrás configurarla y es posible que veas un mensaje de error similar al siguiente:
Error
error: resource mapping not found for name: "l4-rule" namespace: "" from
"ccnp.yaml": no matches for kind "CiliumClusterwideNetworkPolicy" in version
"cilium.io/v2" ensure CRDs are installed first
Posible causa:
Las políticas de red de todo el clúster de Cilium dependen de una definición de recursos personalizados (CRD). El mensaje de error indica que falta el CRD en el clúster.
Solución
Habilita la CRD de la política de red de todo el clúster de Cilium antes de usar las CCNPs.