Configurazione del plugin CNI di Amazon VPC per Kubernetes per gruppi di sicurezza per i pod Amazon EKS - Amazon EKS

Contribuisci 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à.

Configurazione del plugin CNI di Amazon VPC per Kubernetes per gruppi di sicurezza per i pod Amazon EKS

Se si utilizzano pod con istanze Amazon EC2, devi configurare il plugin CNI di Amazon VPC per Kubernetes per gruppi di sicurezza

Se si utilizzano solo i pod di Fargate e non si dispone di nodi Amazon EC2 nel cluster, consulta Utilizzo di una policy di gruppo di sicurezza per un pod Amazon EKS.

  1. Controlla la versione corrente del plugin CNI di Amazon VPC per Kubernetes con il comando seguente:

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

    Di seguito viene riportato un output di esempio:

    v1.7.6

    Se la versione del plugin CNI di Amazon VPC per Kubernetes è precedente a 1.7.7, aggiorna il plugin alla versione 1.7.7 o successiva. Per ulteriori informazioni, consulta Assegna IPs ai pod con Amazon VPC CNI

  2. Aggiungi la policy IAM gestita da AmazonEKSVPCResourceControlleral ruolo del cluster associato al cluster Amazon EKS. La policy consente al ruolo di gestire le interfacce di rete, i relativi indirizzi IP privati e i relativi allegati e distacchi da e verso le istanze di rete.

    1. Recupera il nome del ruolo IAM del cluster e archivialo in una variabile. Sostituisci my-cluster con il nome del tuo cluster.

      cluster_role=$(aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2)
    2. Collegare la policy al ruolo.

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController --role-name $cluster_role
  3. Abilita il componente aggiuntivo CNI di Amazon VPC per gestire le interfacce di rete per i pod, impostando la variabileENABLE_POD_ENI su true in DaemonSet aws-node. Una volta impostato questo parametro su true, per ciascun nodo nel cluster il componente aggiuntivo crea una risorsa cninode personalizzata. Il controller di risorse VPC crea e allega un'interfaccia di rete speciale chiamata interfaccia di rete trunk con la descrizione aws-k8s-trunk-eni.

    kubectl set env daemonset aws-node -n kube-system ENABLE_POD_ENI=true
    Nota

    L'interfaccia di rete trunk è inclusa nel numero massimo di interfacce di rete supportate dal tipo di istanza. Per un elenco del numero massimo di interfacce di rete supportate da ciascun tipo di istanza, consulta Indirizzi IP per interfaccia di rete per tipo di istanza nella Guida per l’utente di Amazon EC2. Se il nodo ha già allegato il numero massimo di interfacce di rete standard, il controller di risorse VPC riserverà uno spazio. Sarà necessario ridurre verticalmente i pod in esecuzione abbastanza da consentire al controller di scollegare ed eliminare un’interfaccia di rete standard, creare l’interfaccia di rete trunk e allegarla all’istanza.

  4. Con il seguente comando è possibile vedere quale nodo ha una risorsa CNINode personalizzata. Se viene restituito l'output No resources found, attendere alcuni secondi e riprovare. La fase precedente richiede il riavvio del plugin CNI di Amazon VPC per pod Kubernetes, che richiede alcuni secondi.

    kubectl get cninode -A NAME FEATURES ip-192-168-64-141.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}] ip-192-168-7-203.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}]

    Se si utilizzano versioni VPC CNI precedenti alla 1.15, sono state utilizzate le etichette dei nodi anziché la risorsa CNINode personalizzata. Con il seguente comando, è possibile vedere quale nodo ha l’etichetta del nodo aws-k8s-trunk-eni impostata su true. Se viene restituito l'output No resources found, attendere alcuni secondi e riprovare. La fase precedente richiede il riavvio del plugin CNI di Amazon VPC per pod Kubernetes, che richiede alcuni secondi.

    kubectl get nodes -o wide -l vpc.amazonaws.com/has-trunk-attached=true

    Una volta creata l’interfaccia di rete trunk, ai pod possono essere assegnati indirizzi IP secondari dalla rete trunk o dalle interfacce di rete standard. L'interfaccia trunk viene eliminata automaticamente se il nodo viene eliminato.

    Quando si distribuisce un gruppo di sicurezza per un pod in un passaggio successivo, il controller di risorse VPC crea un’interfaccia di rete speciale denominata interfaccia di rete di filiali con una descrizione di aws-k8s-branch-eni e vi associa i gruppi di sicurezza. Le interfacce di rete di filiali vengono create in aggiunta alle interfacce di rete standard e trunk allegate al nodo.

    Se si utilizzano sonde liveness o readiness, è inoltre necessario disabilitare il demultiplexing precoce TCP, in modo che kubelet possa connettersi a pod su interfacce di rete di filiali tramite TCP. Per disabilitare demultiplexing precoce TCP, esegui il comando seguente:

    kubectl patch daemonset aws-node -n kube-system \ -p '{"spec": {"template": {"spec": {"initContainers": [{"env":[{"name":"DISABLE_TCP_EARLY_DEMUX","value":"true"}],"name":"aws-vpc-cni-init"}]}}}}'
    Nota

    Se non utilizzi il plugin CNI di Amazon VPC 1.11.0 o successivo per il componente aggiuntivo di Kubernetes e impostarlo POD_SECURITY_GROUP_ENFORCING_MODE=standard, come descritto nel passaggio successivo, non devi eseguire il comando precedente.

  5. Se il cluster utilizza NodeLocal DNSCache o desideri utilizzare la policy di rete Colico con i pod che dispongono dei propri gruppi di sicurezza, o se disponi di servizi Kubernetes di tipo NodePort e LoadBalancer che utilizzano le destinazioni di istanza con externalTrafficPolicy impostato su Local per pod a cui desideri assegnare i gruppi di sicurezza, dovrai utilizzare la versione 1.11.0 o successiva del plugin CNI di Amazon VPC per il componente aggiuntivo di Kubernetes e dovrai abilitare la seguente impostazione:

    kubectl set env daemonset aws-node -n kube-system POD_SECURITY_GROUP_ENFORCING_MODE=standard

    IMPORTANTE: le regole del gruppo di sicurezza dei pod non si applicano al traffico tra pod o tra pod e servizi, esempio kubelet o nodeLocalDNS, che si trovano sullo stesso nodo. I pod che utilizzano gruppi di sicurezza differenti sullo stesso nodo non possono comunicare perché sono configurati in sottoreti diverse e l’instradamento è disabilitato tra tali sottoreti. Traffico in uscita dai pod verso gli indirizzi esterni al VPC è l’indirizzo di rete convertito nell’indirizzo IP dell’interfaccia di rete primaria dell’istanza (a meno che non sia stato impostato AWS_VPC_K8S_CNI_EXTERNALSNAT=true). Per questo traffico sono utilizzate le regole nei gruppi di sicurezza per l’interfaccia di rete primaria, anziché le regole nei gruppi di sicurezza dei pod. ** Affinché questa impostazione si applichi ai pod esistenti, è necessario riavviare i pod o i nodi su cui i pod sono in esecuzione.

  6. Per scoprire come utilizzare una politica di gruppo di sicurezza per il pod, consulta Utilizzo di una policy di gruppo di sicurezza per un pod Amazon EKS.