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 del clúster, puedes configurar las políticas de red de todo el clúster de Cilium (CCNP), que superan las limitaciones de las políticas 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 para todas las cargas de trabajo en todo el clúster. En la jerarquía de evaluación de políticas de GKE, estas políticas residen en el nivel NetworkPolicy. Aunque
las reglas de denegación explícitas en una CCNP anulan las reglas de permiso en las políticas con alcance de espacio de nombres,
las reglas de permiso de CCNP tienen la misma prioridad que las políticas de espacio de nombres estándar.
Todas las reglas de CCNP están subordinadas a las políticas del nivel de administrador.
La política de red de todo el clúster de Cilium para GKE es una CustomResourceDefinition (CRD) con alcance de 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 apliquen a todo el clúster. Estas reglas anulan cualquier
política potencialmente conflictiva a nivel del espacio de nombres si son
reglas de Rechazo explícitas. Las reglas Allow de CCNP residen en el mismo nivel
que las políticas de espacio de nombres estándar. Para los mandatos, usa el nivel de administrador
en
ClusterNetworkPolicy. - 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. Puedes aplicar la separación a nivel de la red asignando 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 CustomResourceDefinition 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
- Para usar Google Cloud CLI en esta tarea,
instala y, luego,
inicializa la
gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando
gcloud components updatepara obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos de este documento.
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.
- Tu clúster debe usar GKE Dataplane V2.
- Debes habilitar la CustomResourceDefinition 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 capa 7.
- No se admiten los selectores de nodos.
- La cantidad máxima de
CiliumClusterwideNetworkPolicypor 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 con Google Cloud CLI o la API de 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_NAMEpor el nombre del clúster.COMPUTE_LOCATIONpor 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_NAMEpor el nombre del clúster.COMPUTE_LOCATIONpor 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:
Campo datapathProvider en el objeto networkConfig.
{
"cluster": {
...
"networkConfig": {
"datapathProvider": "ADVANCED_DATAPATH",
"enableCiliumClusterwideNetworkPolicy": true
}
}
}
Verifica que la CustomResourceDefinition 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 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_NAMEpor el nombre del clúster.COMPUTE_LOCATIONpor 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-policyReinicia el DaemonSet de 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 la CustomResourceDefinition de 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 habilitan todos los extremos con la etiqueta role=backend para
aceptar 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: TCPAplica 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 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: TCPAplica 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: TCPAplica el manifiesto
kubectl apply -f cidr-l4-rule.yaml
Supervisa y soluciona problemas del 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.
La política de red de todo el clúster de Cilium no está habilitada
Síntoma
Cuando intentes configurar las políticas de red de todo el clúster de Cilium (CCNP) en un clúster en el que la función no se haya habilitado 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 se basan en una definición de recurso personalizado (CRD). El mensaje de error indica que falta la CustomResourceDefinition en el clúster.
Solución
Habilita la CustomResourceDefinition de la política de red de todo el clúster de Cilium antes de usar las CCNP.
¿Qué sigue?
Obtén información para aplicar barreras de seguridad en todo el clúster con ClusterNetworkPolicy.