Come faccio a scegliere sottoreti IP specifiche da utilizzare per i pod nel mio cluster Amazon EKS?

7 minuti di lettura
0

Desidero utilizzare sottoreti o intervalli IP personalizzati per i miei pod in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

A volte i pod non utilizzano tutte le sottoreti disponibili nel cluster Amazon EKS. Ciò accade quando alcune sottoreti di nodi non hanno indirizzi IP disponibili, ma altre sottoreti in Amazon Virtual Private Cloud (Amazon VPC) rimangono sottoutilizzate.

I nodi e i pod in Amazon EKS utilizzano gli indirizzi IP dello stesso spazio di indirizzi: gli intervalli IP CIDR associati al cluster VPC. In particolare, Amazon EKS assegna gli IP ai pod dalla stessa sottorete del nodo worker in cui sono pianificati i pod.

Ad esempio, supponiamo che node-1 venga avviato nella subnet-1. Cioè, l'interfaccia di rete elastica primaria del nodo si trova nella subnet-1. Successivamente, pod-A potrebbe essere distribuito e programmato su node-1. Per impostazione predefinita, il plug-in Amazon VPC CNI alloca interfacce di rete elastiche secondarie e IP nella subnet-1 per assegnare un indirizzo IP a pod-A.

Di conseguenza, gli utenti non hanno il controllo diretto sull'allocazione personalizzata dei pod alle sottoreti IP, perché i pod e i nodi utilizzano la stessa sottorete. Se i nodi hanno una capacità di elaborazione sufficiente per eseguire molti pod, i pod potrebbero utilizzare tutti gli indirizzi IP disponibili nella sottorete del nodo. I nuovi pod non riescono a funzionare a causa dell'esaurimento degli indirizzi IP nella sottorete del nodo. Ciò si verifica anche quando altre sottoreti in Amazon VPC possono avere indirizzi IP disponibili.

Risoluzione

Puoi risolvere questo problema utilizzando il componente di rete personalizzato di Amazon VPC CNI. Questa funzionalità ti consente di definire sottoreti specifiche nel cluster Amazon VPC da utilizzare dai tuoi pod. Distingue le sottoreti da quelle utilizzate dai nodi worker. Come ulteriore vantaggio, puoi definire gruppi di sicurezza per i tuoi pod. Consulta Tutorial: Reti personalizzate per ulteriori informazioni sui casi d'uso delle reti personalizzate.

Prerequisito

Prima di iniziare, tieni presente quanto segue:

Come best practice, assicurati di avere la versione più recente del plug-in Amazon VPC CNI in esecuzione nel tuo cluster. Esegui il seguente comando per verificare la versione nel tuo cluster Amazon VPC:

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

Nota: per ulteriori informazioni sulla versione migliore da utilizzare, consultaAggiornamento del plug-in Amazon VPC CNI per il componente aggiuntivo autogestito.

Configura la sottorete e gli intervalli IP personalizzati

Segui questi passaggi per utilizzare la funzionalità di rete personalizzata Amazon VPC CNI:

1.    Attiva la funzionalità di rete personalizzata Amazon VPC CNI:

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

2.    Crea oggetti ENIConfig per definire sottoreti e gruppi di sicurezza da utilizzare per i pod.

Un oggetto ENIConfig definisce una sottorete e un elenco di gruppi di sicurezza. Quando un nodo è annotato o etichettato con un solo oggetto ENIConfig, tutti i pod programmati su quel nodo utilizzano la sottorete e i gruppi di sicurezza definiti in quell'oggetto ENIConfig.

È possibile associare automaticamente o manualmente un oggetto ENIConfig a un nodo.

Associa automaticamente gli oggetti ENIConfig ai nodi

Questa opzione consente un solo oggetto ENIConfig (una sottorete) per zona di disponibilità (AZ). Il nome ENIConfig deve essere il nome dell'AZ.

1.    Crea oggetti ENIConfig con il nome AZ:

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2b
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-YYYYYYYYY
EOF

2.    Abilita Amazon VPC-CNI per etichettare automaticamente i nodi con l'oggetto ENIConfig che corrisponde al nodo AZ.

kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone

Associare manualmente gli oggetti ENIConfig ai nodi

Questa opzione consente più oggetti ENIConfig per zona di disponibilità. Notare che si può usare un nome personalizzato per ogni oggetto ENIConfig. Assicurarsi che il nodo e l'oggetto ENIConfig associato si trovino nella stessa zona di disponibilità.

Nota: è possibile annotare solo un nodo con un oggetto ENIConfig, ma è possibile annotare più nodi con lo stesso oggetto ENIConfig.

1.    Crea oggetti ENIConfig con nomi personalizzati, come segue:

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-1-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-2-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-ZZZZZZZZZZ
EOF

2.    Annotare manualmente i nodi con oggetti ENIConfig. Assicurarsi che il nodo e la sottorete nell'oggetto ENIConfig associato si trovino nella stessa zona di disponibilità.

kubectl annotate node ip-192-168-0-126.us-east-2.compute.internal k8s.amazonaws.com/eniConfig=my-conf-1-us-east-2a

Questa annotazione manuale ha la precedenza sull'etichetta aggiunta automaticamente da Amazon VPC CNI.

Avvia nuovi nodi per sostituire l'attuale nodo worker

I nodi worker esistenti possono avere interfacce di rete elastiche secondarie e IP provenienti dalla sottorete del nodo prima di attivare la funzionalità di rete personalizzata in Amazon VPC CNI. Per questo motivo, è necessario avviare nuovi nodi in modo che possano allocare interfacce di rete elastiche secondarie e IP dalle sottoreti definite nell'oggetto ENIConfig associato al nodo

1.    Verificare se si sta utilizzando una di queste opzioni per i gruppi di nodi:

  • gruppo di nodi autogestito
  • gruppo di nodi gestito con ID AMI personalizzato

Nota: se stai creando nodi in questi tipi di gruppi di nodi, continua con il passaggio 2 per definire manualmente il numero massimo di pod per i tuoi nodi. Se stai avviando nodi nel gruppo Managed Nodes senza specificare un'AMI personalizzata, Amazon EKS aggiorna automaticamente il numero massimo di pod per i tuoi nodi. Per ulteriori informazioni, consulta Errori del gruppo di nodi gestiti.

2.    Determinare il numero massimo di pod per nodo. Quando si utilizza una rete personalizzata, l'interfaccia di rete principale del nodo non viene utilizzata per gli IP dei pod. Per determinare il valore massimo dei pod utilizzando lo script del calcolatore max pod, consulta il numero massimo di pod consigliati da Amazon EKS per ogni tipo di istanza EC2.

Nota: utilizza il flag cni-custom-networking-enabled con lo script precedente per lanciare i pod in una sottorete diversa dalla propria istanza.

3.    Aggiornare lo script User Data sui tuoi nuovi nodi per includere i flag richiesti. Ad esempio:

#!/bin/bash
/etc/eks/bootstrap.sh my_cluster_name --use-max-pods false --kubelet-extra-args '--max-pods=20'

Nota: sostituisci my-cluster-name con il nome del cluster EKS. Per ulteriori informazioni sulla funzionalità Bootstrap, consulta awslabs/amazon-eks-ami sul sito web di GitHub.

4.    Ricrea i pod per utilizzare la nuova configurazione di rete personalizzata del pod.

Ulteriori considerazioni

  • Per impostazione predefinita, il traffico dai pod agli indirizzi IP esterni al cluster VPC CIDR utilizza l'interfaccia principale e l'indirizzo IP del nodo. Pertanto, questo traffico non utilizza la sottorete e i gruppi di sicurezza definiti in ENIConfig. Il traffico utilizza invece i gruppi di sicurezza e la sottorete dell'interfaccia di rete primaria del nodo. Consulta SNAT per i pod per maggiori informazioni.
  • Se si utilizzano anche i gruppi di sicurezza per i pod, viene utilizzato il gruppo di sicurezza specificato in SecurityGroupPolicy anziché il gruppo di sicurezza specificato negli oggetti ENIConfig**.**
  • Consulta la rete personalizzata Simplify CNI per gli ultimi aggiornamenti sul sito Web di GitHub.
  • Per aggiungere altri intervalli IP CIDR al tuo VPC, segui i passaggi in Come si utilizzano più intervalli CIDR in Amazon EKS?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa