Questa pagina spiega come configurare i criteri di rete a livello di cluster per Google Kubernetes Engine (GKE).
I criteri di rete e i criteri di rete FQDN ti aiutano a definire le regole per il traffico di comunicazione tra i pod. I criteri di rete controllano il modo in cui i pod comunicano tra loro all'interno delle loro applicazioni e con endpoint esterni.
In qualità di amministratore del cluster, puoi configurare i criteri di rete per l'intero cluster (CCNP) di Cilium, che superano le limitazioni dei criteri di rete per la gestione del traffico amministrativo a livello di cluster. I criteri di rete a livello di cluster di Cilium applicano regole di rete rigorose per tutti i workload nell'intero cluster, negli spazi dei nomi, sostituendo eventuali regole specifiche per l'applicazione.
Il criterio di rete a livello di cluster Cilium per GKE è un CustomResourceDefinition (CRD) a livello di cluster che specifica i criteri applicati da GKE. Se attivi il criterio di rete a livello di cluster Cilium in GKE, puoi gestire in modo centralizzato le regole di rete per l'intero cluster. Puoi controllare l'accesso di base a livello 3 (a livello di IP) e 4 (a livello di porta) per il traffico in entrata e in uscita dal cluster.
Vantaggi
Con il criterio di rete a livello di cluster di Cilium puoi:
- Applica la sicurezza centralizzata: con CCNP, puoi definire regole di accesso alla rete che si applicano all'intera rete. Queste regole CCNP fungono da livello di sicurezza di primo livello, sostituendo eventuali criteri potenzialmente in conflitto a livello di spazio dei nomi.
- Proteggi il multitenancy: se il tuo cluster ospita più team o tenant, puoi garantire l'isolamento all'interno di un cluster condiviso implementando le regole CCNP, che si concentrano sul controllo del traffico di rete. Puoi applicare la separazione a livello di rete assegnando spazi dei nomi o gruppi di spazi dei nomi a team specifici.
- Definire criteri predefiniti flessibili: con CCNP puoi definire regole di rete predefinite per l'intero cluster. Puoi personalizzare queste regole se necessario senza compromettere la sicurezza complessiva del cluster.
Per implementare CCNP, abilita GKE Dataplane V2 nel tuo cluster. Assicurati che la CRD CCNP sia abilitata, quindi crea i criteri che definiscono le regole di accesso alla rete per il tuo cluster.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Requisiti
I criteri di rete a livello di cluster di Cilium hanno i seguenti requisiti:
- Google Cloud CLI versione 465.0.0 o successive.
- Devi disporre di un cluster GKE che esegue una delle seguenti versioni:
- 1.28.6-gke.1095000 o successive
- 1.29.1-gke.1016000 o successive
- Il cluster deve utilizzare GKE Dataplane V2.
- Devi abilitare la risorsa CRD del criterio di rete a livello di cluster Cilium.
Limitazioni
I criteri di rete a livello di cluster di Cilium presentano le seguenti limitazioni:
- I criteri a livello 7 non sono supportati.
- I selettori di nodi non sono supportati.
- Il numero massimo di
CiliumClusterwideNetworkPolicy
per cluster è 1000.
Abilita il criterio di rete a livello di cluster Cilium in un nuovo cluster
Puoi abilitare il criterio di rete a livello di cluster Cilium in un nuovo cluster utilizzando Google Cloud CLI o l'API Google Kubernetes Engine.
gcloud
Per abilitare il criterio di rete a livello di cluster Cilium in un nuovo cluster, crea un nuovo
cluster con il flag --enable-cilium-clusterwide-network-policy
.
Autopilot
gcloud container clusters create-auto CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy
Sostituisci quanto segue:
CLUSTER_NAME
con il nome del cluster.COMPUTE_LOCATION
con la posizione del tuo cluster.
Standard
gcloud container clusters create CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy \
--enable-dataplane-v2
Sostituisci quanto segue:
CLUSTER_NAME
con il nome del cluster.COMPUTE_LOCATION
con la posizione del tuo cluster.
API
Per abilitare il criterio di rete a livello di cluster Cilium, devi specificare le seguenti opzioni durante la creazione di un nuovo cluster:
Campo datapathProvider
nell'oggetto networkConfig
.
{
"cluster": {
...
"networkConfig": {
"datapathProvider": "ADVANCED_DATAPATH",
"enableCiliumClusterwideNetworkPolicy": true
}
}
}
Verifica che ciliumclusterwidenetworkpolicies.cilium.io
sia presente nell'output del seguente comando:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
L'output dovrebbe essere simile al seguente:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Attivare il criterio di rete a livello di cluster Cilium in un cluster esistente
Puoi abilitare i criteri di rete a livello di cluster Cilium in un cluster esistente utilizzando Google Cloud CLI o l'API Google Kubernetes Engine.
gcloud
Verifica che nel cluster sia abilitato GKE Dataplane V2.
gcloud container clusters describe CLUSTER_NAME \ --location COMPUTE_LOCATION \ --format="value(networkConfig.datapathProvider)" \
Sostituisci quanto segue:
CLUSTER_NAME
con il nome del cluster.COMPUTE_LOCATION
con la posizione del tuo cluster.
Aggiorna il cluster utilizzando il flag
--enable-cilium-clusterwide-network-policy
.gcloud container clusters update CLUSTER_NAME \ --location COMPUTE_LOCATION \ --enable-cilium-clusterwide-network-policy
Riavvia il DaemonSet anetd.
kubectl rollout restart ds -n kube-system anetd && \ kubectl rollout status ds -n kube-system anetd
API
Verifica che il cluster sia abilitato per 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 che ciliumclusterwidenetworkpolicies.cilium.io
sia presente nell'output del seguente comando:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
L'output dovrebbe essere simile al seguente:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Utilizzo del criterio di rete a livello di cluster di Cilium
Questa sezione elenca esempi per la configurazione del criterio di rete a livello di cluster di Cilium.
Esempio 1: controlla il traffico in entrata verso un carico di lavoro
L'esempio seguente consente a tutti gli endpoint con l'etichetta role=backend
di accettare connessioni in entrata sulla porta 80 da endpoint con l'etichetta role=frontend
. Gli endpoint con l'etichetta role=backend
rifiuteranno tutte le connessioni in entrata non consentite da questo criterio.
Salva il seguente manifest come
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
Applica il manifest:
kubectl apply -f l4-rule-ingress.yaml
Esempio 2: limita il traffico in uscita da un carico di lavoro su una determinata porta
La seguente regola limita tutti gli endpoint con l'etichetta app=myService
in modo che possano solo emettere pacchetti utilizzando TCP sulla porta 80 verso qualsiasi destinazione di livello 3:
Salva il seguente manifest come
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
Applica il manifest:
kubectl apply -f l4-rule-egress.yaml
Esempio 3: limita il traffico in uscita da un carico di lavoro su una determinata porta e un determinato CIDR
L'esempio seguente limita tutti gli endpoint con l'etichetta role=crawler
in modo che possano solo inviare pacchetti sulla porta 80, protocolli TCP, a un CIDR di destinazione 192.10.2.0/24
.
Salva il seguente manifest come
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
Applica il manifest:
kubectl apply -f cidr-l4-rule.yaml
Monitoraggio e risoluzione dei problemi relativi al traffico di rete
Puoi monitorare e risolvere i problemi relativi al traffico di rete interessato dai criteri di rete a livello di cluster di Cilium tramite il registro dei criteri di rete e l'osservabilità di GKE Dataplane V2.
Tentativo di utilizzare criteri di livello 7 o selettori di nodi
Sintomo
Se utilizzi GKE con GKE Dataplane V2 e provi a definire criteri CCNP che includono regole di livello 7 (ad esempio il filtro HTTP) e selettori di nodi, potresti visualizzare un messaggio di errore simile al seguente:
Errore
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'.
Possibile causa
GKE ha limitazioni specifiche per i CCNPs. I criteri di livello 7, che consentono di filtrare in base ai dati a livello di applicazione (come le intestazioni HTTP), e i selettori di nodi non sono supportati nell'integrazione di Cilium in GKE.
Risoluzione
Se hai bisogno di funzionalità di filtro di livello 7 avanzate nel tuo cluster GKE, ti consigliamo di utilizzare Cloud Service Mesh. In questo modo, il controllo del traffico avviene a livello di applicazione.
Criterio di rete a livello di cluster Cilium non abilitato
Sintomo
Quando provi a configurare i criteri di rete a livello di cluster Cilium (CCNP) in un cluster in cui la funzionalità non è stata attivata esplicitamente, non potrai configurarla e potresti visualizzare un messaggio di errore simile al seguente:
Errore
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
Possibile causa
I criteri di rete a livello di cluster di Cilium si basano su una definizione di risorsa personalizzata (CRD). Il messaggio di errore indica che il CRD non è presente nel cluster.
Risoluzione
Abilita il CRD dei criteri di rete a livello di cluster Cilium prima di utilizzare i CCNPs.