Limita il traffico di rete Pod con le policy di rete Kubernetes - Amazon EKS

Aiutaci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Limita il traffico di rete Pod con le policy di rete Kubernetes

Puoi utilizzare una policy di rete Kubernetes per limitare il traffico di rete da e verso i tuoi Pods. Per ulteriori informazioni, consulta le politiche di rete nella documentazione di Kubernetes.

È necessario configurare quanto segue per utilizzare questa funzionalità:

  1. Imposta l'applicazione delle policy all'avvio di Pod. Lo fai nel aws-node contenitore del VPC CNI. DaemonSet

  2. Abilita il parametro di policy di rete per il componente aggiuntivo.

  3. Configura il cluster per utilizzare la policy di rete Kubernetes

Prima di iniziare, esamina le considerazioni. Per ulteriori informazioni, consulta Considerazioni.

Prerequisiti

Di seguito sono riportati i prerequisiti per la funzionalità:

Versione minima del cluster

Un cluster Amazon EKS esistente. Per implementarne uno, consulta Nozioni di base su Amazon EKS. Il cluster deve essere in versione Kubernetes o successiva. 1.25 Il cluster deve eseguire una delle versioni Kubernetes e della piattaforma elencate nella tabella seguente. Tieni presente che sono supportate anche tutte le versioni di Kubernetes e della piattaforma successive a quelle elencate. Puoi verificare la versione corrente di Kubernetes my-cluster sostituendo il seguente comando con il nome del cluster e quindi eseguendo il comando modificato:

aws eks describe-cluster --name my-cluster --query cluster.version --output text
Versione di Kubernetes Versione della piattaforma

1.27.4

eks.5

1.26.7

eks.6

1.25.12

eks.7

Versione minima VPC CNI

Versione 1.14 o successiva del plug-in Amazon VPC CNI per Kubernetes sul tuo cluster. È possibile verificare la versione attuale con il seguente comando.

kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3

Se la versione è precedente alla 1.14, consulta la pagina Aggiornamento del CNI di Amazon VPC (componente aggiuntivo Amazon EKS) per eseguire l'aggiornamento alla versione 1.14 o successiva.

Versione minima del kernel Linux

I nodi devono avere una versione del kernel Linux 5.10 o successiva. È possibile verificare la versione del kernel con uname -r. Se utilizzi le versioni più recenti di Amazon Linux ottimizzato per Amazon EKS, Amazon Linux accelerato ottimizzato per Amazon EKS e Bottlerocket AMIs, dispongono già della versione AMIs del kernel richiesta.

La versione v20231116 o successive delle AMI Amazon Linux accelerate ottimizzate per Amazon EKS dispone della versione del kernel 5.10.

Fase 1: configura l'applicazione delle policy all'avvio di Pod

Il plug-in Amazon VPC CNI per Kubernetes configura le politiche di rete per i pod in parallelo al provisioning dei pod. Fino a quando tutte le politiche non saranno configurate per il nuovo pod, i contenitori nel nuovo pod inizieranno con una politica di autorizzazione predefinita. Questa è chiamata modalità standard. Una politica di autorizzazione predefinita significa che tutto il traffico in entrata e in uscita è consentito da e verso i nuovi pod. Ad esempio, ai pod non verrà applicata alcuna regola del firewall (tutto il traffico è consentito) finché il nuovo pod non verrà aggiornato con le politiche attive.

Con la NETWORK_POLICY_ENFORCING_MODE variabile impostata sustrict, i pod che utilizzano il CNI VPC iniziano con una politica di negazione predefinita, quindi vengono configurate le politiche. Questa è chiamata modalità rigorosa. In modalità rigorosa, è necessario disporre di una politica di rete per ogni endpoint a cui i pod devono accedere nel cluster. Tieni presente che questo requisito si applica ai pod CoredNS. La politica di negazione predefinita non è configurata per i pod con rete host.

È possibile modificare la politica di rete predefinita impostando la variabile NETWORK_POLICY_ENFORCING_MODE di ambiente su strict nel aws-node contenitore del CNI VPC. DaemonSet

env: - name: NETWORK_POLICY_ENFORCING_MODE value: "strict"

Passaggio 2: abilitare il parametro della politica di rete per il componente aggiuntivo

Per impostazione predefinita, per i parametri la funzionalità di policy di rete utilizza la porta 8162 sul nodo. Inoltre, la funzionalità utilizzava la porta 8163 per le sonde dell'integrità. Se esegui un'altra applicazione sui nodi o all'interno dei pod che deve utilizzare queste porte, l'app non viene eseguita. Nella versione VPC CNI v1.14.1 o successiva, puoi modificare queste porte.

Utilizzare la procedura seguente per abilitare il parametro di policy di rete per il componente aggiuntivo.

AWS Management Console

  1. Aprire la Console Amazon EKS.

  2. Nel riquadro di navigazione a sinistra, seleziona Cluster, quindi seleziona il nome del cluster per cui desideri configurare il componente aggiuntivo CNI di Amazon VPC.

  3. Seleziona la scheda Componenti aggiuntivi.

  4. Seleziona la casella nella parte superiore destra della casella del componente aggiuntivo e scegli Edit (Modifica).

  5. Nella name of add-on pagina Configura:

    1. Seleziona una v1.14.0-eksbuild.3 o una versione successiva nell'elenco delle versioni.

    2. Scegli Impostazioni di configurazione facoltative.

    3. Inserisci la chiave JSON "enableNetworkPolicy": e il valore "true" nei Valori di configurazione. Il testo risultante deve essere un oggetto JSON valido. Se questa chiave e questo valore sono gli unici dati nella casella di testo, racchiudi la chiave e il valore tra parentesi graffe { }.

      L'esempio seguente ha la funzionalità dei criteri di rete abilitata e le metriche e i sensori di stato sono impostati sui numeri di porta predefiniti:

      { "enableNetworkPolicy": "true", "nodeAgent": { "healthProbeBindAddr": "8163", "metricsBindAddr": "8162" } }

Helm

Se hai installato il plug-in Amazon VPC CNI per Kubernetes tramitehelm, puoi aggiornare la configurazione per modificare le porte.

  1. Esegui il seguente comando per modificare le porte. Imposta il numero di porta nel valore, rispettivamente, della chiave nodeAgent.metricsBindAddr o nodeAgent.healthProbeBindAddr.

    helm upgrade --set nodeAgent.metricsBindAddr=8162 --set nodeAgent.healthProbeBindAddr=8163 aws-vpc-cni --namespace kube-system eks/aws-vpc-cni

kubectl

  1. Apri la DaemonSet del aws-node nell'editor.

    kubectl edit daemonset -n kube-system aws-node
  2. Sostituisci i numeri di porta negli argomenti del comando seguente nel args: del container aws-network-policy-agent nel manifesto del daemonset aws-node della CNI del VPC.

    - args: - --metrics-bind-addr=:8162 - --health-probe-bind-addr=:8163

Passaggio 3: installa il file system Berkeley Packet Filter (BPF) sui tuoi nodi

È necessario montare il file system Berkeley Packet Filter (BPF) su ciascuno dei nodi.

Nota

Se il tuo cluster è una versione 1.27 o successiva, puoi saltare questo passaggio poiché tutti gli Amazon Linux e Bottlerocket ottimizzati per Amazon EKS AMIs per 1.27 o versioni successive dispongono già di questa funzionalità.

Per tutte le altre versioni del cluster, se si esegue l'upgrade di Amazon Linux ottimizzato per Amazon EKS alla versione v20230703 o successiva oppure si aggiorna l'AMI Bottlerocket alla versione v1.0.2 o successiva, è possibile saltare questo passaggio.

  1. Installa il file system Berkeley Packet Filter (BPF) su ciascuno dei nodi.

    sudo mount -t bpf bpffs /sys/fs/bpf
  2. Quindi, aggiungi lo stesso comando ai dati utente nel modello di lancio per i tuoi gruppi Amazon EC2 Auto Scaling.

Passaggio 4: configura il cluster per utilizzare le politiche di rete Kubernetes

Configura il cluster per utilizzare le politiche di rete Kubernetes. Puoi impostarlo per un componente aggiuntivo Amazon EKS o un componente aggiuntivo autogestito.

  1. Aprire la Console Amazon EKS.

  2. Nel riquadro di navigazione a sinistra, seleziona Cluster, quindi seleziona il nome del cluster per cui desideri configurare il componente aggiuntivo CNI di Amazon VPC.

  3. Seleziona la scheda Componenti aggiuntivi.

  4. Seleziona la casella nella parte superiore destra della casella del componente aggiuntivo e scegli Edit (Modifica).

  5. Nella pagina Configura: name of addon

    1. Seleziona una v1.14.0-eksbuild.3 o una versione successiva nell'elenco delle versioni.

    2. Scegli Impostazioni di configurazione facoltative.

    3. Inserisci la chiave JSON "enableNetworkPolicy": e il valore "true" nei Valori di configurazione. Il testo risultante deve essere un oggetto JSON valido. Se questa chiave e questo valore sono gli unici dati nella casella di testo, racchiudi la chiave e il valore tra parentesi graffe { }. L'esempio seguente mostra che la policy di rete è abilitata:

      { "enableNetworkPolicy": "true" }

      Lo screenshot seguente mostra un esempio di tale scenario.

      <shared id="consolelong"/>mostrando il componente aggiuntivo VPC CNI con policy di rete nella configurazione opzionale.
  1. Esegui il seguente comando AWS CLI. Sostituisci my-cluster con il nome del cluster e l'ARN del ruolo IAM con il ruolo che stai utilizzando.

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws: iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"enableNetworkPolicy": "true"}'

Se hai installato il plug-in Amazon VPC CNI per Kubernetes tramitehelm, puoi aggiornare la configurazione per abilitare la politica di rete.

  1. Esegui il comando seguente per abilitare la policy di rete.

    helm upgrade --set enableNetworkPolicy=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
  1. Apri la ConfigMap del amazon-vpc-cni nell'editor.

    kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
  2. Aggiungi la seguente riga ai data nella ConfigMap.

    enable-network-policy-controller: "true"

    Una volta aggiunta la riga, ConfigMap dovrebbe apparire come nell'esempio seguente.

    apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-network-policy-controller: "true"
  3. Apri la DaemonSet del aws-node nell'editor.

    kubectl edit daemonset -n kube-system aws-node
    1. Sostituisci il valore false con true nell'argomento del comando --enable-network-policy=false in args: nel container aws-network-policy-agent nel manifesto del daemonset aws-node della CNI di VPC.

      - args: - --enable-network-policy=true

Fase 5. Passaggi successivi

Dopo aver completato la configurazione, verifica che i aws-node pod siano in esecuzione sul cluster.

kubectl get pods -n kube-system | grep 'aws-node\|amazon'

Di seguito viene riportato un output di esempio:

aws-node-gmqp7 2/2 Running 1 (24h ago) 24h aws-node-prnsh 2/2 Running 1 (24h ago) 24h

Nei aws-node pod sono presenti 2 contenitori nelle versioni 1.14 e successive. Nelle versioni precedenti e se le policy di rete sono disabilitate, nei pod aws-node è presente un solo container.

Ora puoi implementare le policy di rete Kubernetes nel tuo cluster.

Per implementare le politiche di rete Kubernetes, crei oggetti Kubernetes e li distribuisci nel tuo clusterNetworkPolicy. NetworkPolicygli oggetti rientrano nell'ambito di un namespace. Implementate politiche per consentire o negare il traffico tra i Pod in base a selettori di etichette, namespace e intervalli di indirizzi IP. Per ulteriori informazioni sulla creazione di NetworkPolicy oggetti, consulta le politiche di rete nella documentazione di Kubernetes.

L'applicazione degli NetworkPolicy oggetti Kubernetes viene implementata utilizzando l'Extended Berkeley Packet Filter (eBPF). Relativo alle implementazioni basate su iptables, offre caratteristiche di latenza e prestazioni inferiori, tra cui un utilizzo ridotto della CPU e l'evitamento delle ricerche sequenziali. Inoltre, le sonde eBPF forniscono l'accesso a dati ricchi di contesto che aiutano a eseguire il debug di problemi complessi a livello di kernel e a migliorare l'osservabilità. Amazon EKS supporta un esportatore basato su EBPF che sfrutta le sonde per registrare i risultati delle politiche su ciascun nodo ed esportare i dati in raccoglitori di log esterni per facilitare il debug. Per ulteriori informazioni, consulta la documentazione eBPF.