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à.
Personalizzare l’interfaccia di rete secondaria nei nodi di Amazon EKS
Prima di iniziare questo tutorial, completa le seguenti operazioni:
-
Esaminare le considerazioni
-
Familiarità con il modo in cui il plug-in CNI di Amazon VPC per Kubernetes crea interfacce di rete secondarie e assegna indirizzi IP ai Pod. Per ulteriori informazioni, consulta Allocazione di ENI
su GitHub. -
Versione
2.12.3o successiva o versione1.27.160o successiva dell'interfaccia a riga di AWS comando (AWS CLI) installata e configurata sul dispositivo o. AWS CloudShell Per verificare la versione attuale, usaaws --version | cut -d / -f2 | cut -d ' ' -f1. I gestori di pacchetti comeyumHomebrew per macOS sono spesso diverse versioni dell'ultima versione della CLI AWS .apt-getPer installare la versione più recente, consulta Installazione e configurazione rapida con aws configure nella Guida per l'utente dell'interfaccia a riga di AWS comando. La versione AWS CLI installata in AWS CloudShell potrebbe anche contenere diverse versioni precedenti alla versione più recente. Per aggiornarlo, consulta Installazione della AWS CLI nella tua home directory nella Guida per l' AWS CloudShell utente. -
Lo strumento a riga di comando
kubectlè installato sul dispositivo o AWS CloudShell. Per installare o aggiornarekubectl, consulta Impostazione di kubectl e eksctl: -
Ti consigliamo di completare la procedura descritta in questo argomento in una shell Bash. In alternativa, puoi apportare alcune modifiche alla tua shell per alcuni comandi di script, come i caratteri di continuazione della riga, e per il modo in cui le variabili vengono impostate e utilizzate. Inoltre, le regole di escape e di utilizzo delle virgolette per la shell (interprete di comandi) potrebbero essere diverse. Per ulteriori informazioni, consulta Uso delle virgolette con le stringhe nella AWS CLI nella Guida per l'utente dell'interfaccia a riga di AWS comando.
Per questo tutorial, ti consigliamo di utilizzare i valori di esempio tranne quando è indicato di sostituirli. Puoi sostituire qualsiasi valore di esempio al completamento delle fasi dedicate alla creazione del cluster. Consigliamo di completare tutte le fasi nello stesso terminale, dato che le variabili impostate e utilizzate durante la procedura non sono presenti in terminali diversi.
I comandi in questo argomento sono formattati utilizzando le convenzioni elencate in Utilizzo degli esempi CLI AWS. Se esegui comandi dalla riga di comando su risorse che si trovano in una AWS regione diversa da quella predefinita definita nel profilo AWS CLI che stai utilizzando, devi aggiungerli --region us-west-2 ai comandi, sostituendoli us-west-2 con la tua AWS AWS regione.
Per implementare le reti personalizzate nel cluster di produzione, passa alla Passaggio 2: configurazione del VPC.
Passaggio 1: creazione di un VPC e di un cluster di test
Le procedure seguenti illustrano la creazione di un VPC e un cluster di test, oltre alla configurazione di una rete personalizzata per tale cluster. Consigliamo di non utilizzare il cluster di test per i carichi di lavoro di produzione poiché alcune funzionalità da utilizzare con il cluster di produzione non sono trattate in questo argomento. Per ulteriori informazioni, consulta Crea un cluster Amazon EKS..
-
Eseguire il seguente comando per definire la variabile
account_id.account_id=$(aws sts get-caller-identity --query Account --output text) -
Crea un VPC.
-
Se esegui la distribuzione su un sistema di test, crea un VPC utilizzando un modello Amazon AWS CloudFormation EKS.
aws cloudformation create-stack --stack-name my-eks-custom-networking-vpc \ --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml \ --parameters ParameterKey=VpcBlock,ParameterValue=192.168.0.0/24 \ ParameterKey=PrivateSubnet01Block,ParameterValue=192.168.0.64/27 \ ParameterKey=PrivateSubnet02Block,ParameterValue=192.168.0.96/27 \ ParameterKey=PublicSubnet01Block,ParameterValue=192.168.0.0/27 \ ParameterKey=PublicSubnet02Block,ParameterValue=192.168.0.32/27 -
La AWS CloudFormation creazione dello stack richiede alcuni minuti. Utilizzare il comando seguente per verificare lo stato di implementazione dello stack.
aws cloudformation describe-stacks --stack-name my-eks-custom-networking-vpc --query Stacks\[\].StackStatus --output textNon passare alla Passaggio successiva finché l’output del comando non è
CREATE_COMPLETE. -
Definisci le variabili con i valori della sottorete privata IDs creata dal modello.
subnet_id_1=$(aws cloudformation describe-stack-resources --stack-name my-eks-custom-networking-vpc \ --query "StackResources[?LogicalResourceId=='PrivateSubnet01'].PhysicalResourceId" --output text) subnet_id_2=$(aws cloudformation describe-stack-resources --stack-name my-eks-custom-networking-vpc \ --query "StackResources[?LogicalResourceId=='PrivateSubnet02'].PhysicalResourceId" --output text) -
Definire le variabili con le zone di disponibilità delle sottoreti recuperate nel passaggio precedente.
az_1=$(aws ec2 describe-subnets --subnet-ids $subnet_id_1 --query 'Subnets[*].AvailabilityZone' --output text) az_2=$(aws ec2 describe-subnets --subnet-ids $subnet_id_2 --query 'Subnets[*].AvailabilityZone' --output text)
-
-
Crea un ruolo IAM del cluster.
-
Per creare un file JSON della policy di attendibilità IAM, esegui il comando seguente.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
Crea il ruolo IAM del cluster Amazon EKS. Se necessario, inserisci il prefisso
eks-cluster-role-trust-policy.jsonnel percorso del computer in cui hai eseguito la scrittura del file nella Passaggio precedente. Il comando associa il criterio di attendibilità creato nella Passaggio precedente al ruolo. Per creare un ruolo IAM, l’azioneiam:CreateRole(autorizzazione) deve essere assegnata al principale IAM che sta creando il ruolo.aws iam create-role --role-name myCustomNetworkingAmazonEKSClusterRole --assume-role-policy-document file://"eks-cluster-role-trust-policy.json" -
Allega la policy gestita di Amazon EKS denominata Amazon EKSCluster Policy al ruolo. Per allegare una policy IAM a un principale IAM, è necessario assegnare al principale che sta allegando la policy una delle azioni IAM (autorizzazioni) seguenti:
iam:AttachUserPolicyoiam:AttachRolePolicy.aws iam attach-role-policy --policy-arn arn:aws: iam::aws:policy/AmazonEKSClusterPolicy --role-name myCustomNetworkingAmazonEKSClusterRole
-
-
Crea un cluster Amazon EKS e configura il dispositivo per comunicare con esso.
-
Crea un cluster.
aws eks create-cluster --name my-custom-networking-cluster \ --role-arn arn:aws: iam::$account_id:role/myCustomNetworkingAmazonEKSClusterRole \ --resources-vpc-config subnetIds="$subnet_id_1","$subnet_id_2"Nota
Potresti ricevere un messaggio di errore indicante che una delle zone di disponibilità nella richiesta non dispone di capacità sufficiente per creare un cluster Amazon EKS. In questo caso, l’output di errore contiene le zone di disponibilità in grado di supportare un nuovo cluster. Riprova a creare il cluster con almeno due sottoreti che si trovano nelle zone di disponibilità supportate per il tuo account. Per ulteriori informazioni, consulta Capacità insufficiente.
-
La creazione del cluster richiede diversi minuti. Utilizzare il comando seguente per verificare lo stato di implementazione del cluster.
aws eks describe-cluster --name my-custom-networking-cluster --query cluster.statusNon passare alla Passaggio successiva finché l’output del comando non è
"ACTIVE". -
Configura
kubectlper comunicare con il cluster.aws eks update-kubeconfig --name my-custom-networking-cluster
-
Passaggio 2: configurazione del VPC
Questo tutorial richiede il VPC creato nella Passaggio 1: creazione di un VPC e di un cluster di test. Per un cluster di produzione, modificare i passaggi in base al VPC, sostituendo tutti i valori di esempio con i propri.
-
Accertati che la versione del plug-in CNI di Amazon VPC per Kubernetes installata sia l’ultima versione. Per determinare la versione più recente per il componente aggiuntivo del tipo Amazon EKS e aggiornarla, consulta la pagina Aggiornamento di un componente aggiuntivo di Amazon EKS. Per determinare la versione più recente per il componente aggiuntivo del tipo autogestito e aggiornarla, consulta la pagina Assegna IPs ai pod con Amazon VPC CNI.
-
Recupera l’ID del VPC in cui si trova il cluster e memorizzarlo in una variabile per l’utilizzo nei passaggi successivi.
vpc_id=$(aws eks describe-cluster --name my-custom-networking-cluster --query "cluster.resourcesVpcConfig.vpcId" --output text) -
Associare un intervallo di routing interdominio senza classi (CIDR) aggiuntivo al VPC del cluster. L’intervallo CIDR non può sovrapporsi agli intervalli CIDR esistenti già associati.
-
Visualizza i blocchi CIDR attualmente associati al tuo VPC.
aws ec2 describe-vpcs --vpc-ids $vpc_id \ --query 'Vpcs[*].CidrBlockAssociationSet[*].{CIDRBlock: CidrBlock, State: CidrBlockState.State}' --out tableDi seguito viene riportato un output di esempio:
---------------------------------- | DescribeVpcs | +-----------------+--------------+ | CIDRBlock | State | +-----------------+--------------+ | 192.168.0.0/24 | associated | +-----------------+--------------+ -
Associa un blocco CIDR aggiuntivo al VPC. Sostituire il valore dell’intervallo CIDR nel comando seguente. Per ulteriori informazioni, consulta Associare blocchi IPv4 CIDR aggiuntivi al tuo VPC nella Amazon VPC User Guide.
aws ec2 associate-vpc-cidr-block --vpc-id $vpc_id --cidr-block 192.168.1.0/24 -
Verifica che il nuovo blocco sia associato.
aws ec2 describe-vpcs --vpc-ids $vpc_id --query 'Vpcs[*].CidrBlockAssociationSet[*].{CIDRBlock: CidrBlock, State: CidrBlockState.State}' --out tableDi seguito viene riportato un output di esempio.
---------------------------------- | DescribeVpcs | +-----------------+--------------+ | CIDRBlock | State | +-----------------+--------------+ | 192.168.0.0/24 | associated | | 192.168.1.0/24 | associated | +-----------------+--------------+
Non andare al passaggio successivo finché il nuovo
Statedell’intervallo CIDR non èassociated. -
-
Crea tutte le sottoreti che vuoi utilizzare in ogni zona di disponibilità in cui si trovano le sottoreti esistenti. Specificare un intervallo CIDR all’interno dell’intervallo CIDR associato al VPC in una Passaggio precedente.
-
Crea nuove sottoreti. Sostituire i valori dell’intervallo CIDR nel seguente comando. È necessario creare le sottoreti in un blocco CIDR VPC diverso rispetto alle sottoreti esistenti, ma all’interno delle stesse zone di disponibilità. In questo esempio si crea una sottorete nel nuovo blocco CIDR in ogni zona di disponibilità in cui esistono le sottoreti private attuali. Le IDs sottoreti create vengono memorizzate in variabili da utilizzare nelle fasi successive. I valori
Namecorrispondono a quelli assegnati alle sottoreti create utilizzando il modello Amazon EKS VPC in un passaggio precedente. I nomi non sono obbligatori. È possibile utilizzare nomi diversi.new_subnet_id_1=$(aws ec2 create-subnet --vpc-id $vpc_id --availability-zone $az_1 --cidr-block 192.168.1.0/27 \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=my-eks-custom-networking-vpc-PrivateSubnet01},{Key=kubernetes.io/role/internal-elb,Value=1}]' \ --query Subnet.SubnetId --output text) new_subnet_id_2=$(aws ec2 create-subnet --vpc-id $vpc_id --availability-zone $az_2 --cidr-block 192.168.1.32/27 \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=my-eks-custom-networking-vpc-PrivateSubnet02},{Key=kubernetes.io/role/internal-elb,Value=1}]' \ --query Subnet.SubnetId --output text)Importante
Per impostazione predefinita, le nuove sottoreti sono implicitamente associate alla tabella di routing principale del VPC. Questa tabella di instradamento consente la comunicazione tra tutte le risorse implementate nel VPC, ad eccezione delle risorse con indirizzi IP esterni ai blocchi CIDR associate al VPC. Per modificare questo comportamento, associa la tabella di instradamento alle sottoreti. Per ulteriori informazioni, consulta Tabelle di instradamento per sottoreti nella Guida per l’utente di Amazon VPC.
-
Per visualizzare le sottoreti attuali nel tuo VPC.
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" \ --query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \ --output tableDi seguito viene riportato un output di esempio:
---------------------------------------------------------------------- | DescribeSubnets | +------------------+--------------------+----------------------------+ | AvailabilityZone | CidrBlock | SubnetId | +------------------+--------------------+----------------------------+ | us-west-2d | 192.168.0.0/27 | subnet-example1 | | us-west-2a | 192.168.0.32/27 | subnet-example2 | | us-west-2a | 192.168.0.64/27 | subnet-example3 | | us-west-2d | 192.168.0.96/27 | subnet-example4 | | us-west-2a | 192.168.1.0/27 | subnet-example5 | | us-west-2d | 192.168.1.32/27 | subnet-example6 | +------------------+--------------------+----------------------------+Come puoi vedere, le sottoreti create nel blocco CIDR
192.168.1.0si trovano nelle stesse zone di disponibilità di quelle create nel blocco CIDR192.168.0.0.
-
Passaggio 3: configurazione delle risorse Kubernetes
-
Imposta la variabile di
AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFGambiente sutruein.aws-nodeDaemonSetkubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true -
Recupera l'ID del gruppo di sicurezza del cluster e memorizzalo in una variabile da utilizzare nel passaggio successivo. Amazon EKS crea automaticamente questo gruppo di sicurezza durante la creazione del cluster.
cluster_security_group_id=$(aws eks describe-cluster --name my-custom-networking-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId --output text) -
Creare una risorsa personalizzata
ENIConfigper ogni sottorete in cui vuoi implementare i Pod.-
Crea un file univoco per ogni configurazione di interfaccia di rete.
I comandi seguenti creano file
ENIConfigseparati per le due sottoreti create in una Passaggio precedente. Il valore dinamedeve essere univoco. Il nome corrisponde alla zona di disponibilità in cui si trova la sottorete. Il gruppo di sicurezza del cluster viene assegnato aENIConfig.cat >$az_1.yaml <<EOF apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: $az_1 spec: securityGroups: - $cluster_security_group_id subnet: $new_subnet_id_1 EOFcat >$az_2.yaml <<EOF apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: $az_2 spec: securityGroups: - $cluster_security_group_id subnet: $new_subnet_id_2 EOFPer un cluster di produzione, puoi apportare le seguenti modifiche ai comandi precedenti:
-
Sostituire $cluster_security_group_id con l’ID di un gruppo di sicurezza esistente da utilizzare per ciascun
ENIConfig. -
Quando possibile, consigliamo di assegnare a
ENIConfigslo stesso nome della zona di disponibilità che verrà utilizzato perENIConfig. Per una serie di motivi, tuttavia, potrebbe essere necessario utilizzare nomi diversi perENIConfigse le zone di disponibilità. Ad esempio, se nella stessa zona di disponibilità sono presenti più di due sottoreti e si desidera utilizzarle entrambe con reti personalizzate, saranno necessari piùENIConfigsper la stessa zona di disponibilità. Dal momento che ogniENIConfigrichiede un nome univoco, non puoi assegnare lo stesso nome della zona di disponibilità a piùENIConfigs.Se i tuoi
ENIConfignomi non sono tutti uguali ai nomi delle zone di disponibilità, sostituisci $az_1 e $az_2 con i tuoi nomi nei comandi precedenti e annota i tuoi nodi con quelli successivi di questo tutorial. ENIConfigNota
Nel caso in cui non specifichi un gruppo di sicurezza valido da utilizzare con un cluster di produzione:
-
se utilizzi la versione
1.8.0o successiva del plug-in CNI di Amazon VPC per Kubernetes, vengono impiegati i gruppi di sicurezza associati all’interfaccia di rete elastica primaria del nodo. -
se utilizzi una versione del plug-in CNI di Amazon VPC per Kubernetes precedente alla
1.8.0, il gruppo di sicurezza di default per il VPC viene assegnato alle interfacce di rete secondarie.
Importante
-
AWS_VPC_K8S_CNI_EXTERNALSNAT=falseè un’impostazione predefinita per la configurazione del plugin CNI di Amazon VPC per Kubernetes. Per impostazione predefinita, il traffico destinato agli indirizzi IP che non si trovano all’interno di uno dei blocchi CIDR associati al VPC utilizza i gruppi di sicurezza e le sottoreti dell’interfaccia di rete primaria del nodo. Le sottoreti e i gruppi di sicurezza definiti inENIConfigsal fine di creare interfacce di rete secondarie non vengono utilizzati per questo traffico. Per ulteriori informazioni su questa impostazione, consulta Abilitare l’accesso a Internet in uscita per i pod. -
Se utilizzi gruppi di sicurezza anche per i Pod, il gruppo di sicurezza specificato in una
SecurityGroupPolicyviene utilizzato al posto di quello specificato inENIConfigs. Per ulteriori informazioni, consulta Assegnazione dei gruppi di sicurezza ai singoli pod.
-
-
Applica ogni file delle risorse personalizzato creato in precedenza al cluster con i comandi seguenti.
kubectl apply -f $az_1.yaml kubectl apply -f $az_2.yaml
-
-
Verifica che
ENIConfigssia stato creato.kubectl get ENIConfigsDi seguito viene riportato un output di esempio.
NAME AGE us-west-2a 117s us-west-2d 105s -
Se stai abilitando reti personalizzate su un cluster di produzione e hai un nome
ENIConfigsdiverso dalla Zona di disponibilità per cui le stai utilizzando, passa al passaggio successivo per distribuire i nodi Amazon EC2 .Consenti a Kubernetes di applicare automaticamente la zona
ENIConfigdi disponibilità a tutti i nuovi EC2 nodi Amazon creati nel tuo cluster.-
Per il cluster di test in questo tutorial, passa alla Passaggio successiva.
Per un cluster di produzione, controlla se esiste un'annotazione con la chiave
k8s.amazonaws.com/eniConfigper la variabile diENI_CONFIG_ANNOTATION_DEFambiente nelle specifiche del contenitore per.aws-nodeDaemonSetkubectl describe daemonset aws-node -n kube-system | grep ENI_CONFIG_ANNOTATION_DEFSe viene restituito un output, l’annotazione è presente. Se non viene restituito alcun output, la variabile non viene impostata. Per un cluster di produzione, puoi scegliere di utilizzare la presente impostazione o quella riportata nel passaggio successivo. L’utilizzo di questa impostazione sovrascrive quella del passaggio successivo. In questo tutorial viene utilizzata l’impostazione riportata nel passaggio successivo.
-
Aggiorna il tuo
aws-nodeDaemonSetENIConfigper applicare automaticamente la zona di disponibilità a tutti i nuovi EC2 nodi Amazon creati nel tuo cluster.kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone
-
Fase 4: Implementazione dei nodi Amazon EC2
-
Creare un ruolo IAM del nodo.
-
Per creare un file JSON della policy di attendibilità IAM, esegui il comando seguente.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
Creare un ruolo IAM e memorizzare il nome della risorsa Amazon (ARN) restituito in una variabile da utilizzare in una Passaggio successiva.
node_role_arn=$(aws iam create-role --role-name myCustomNetworkingNodeRole --assume-role-policy-document file://"node-role-trust-relationship.json" \ --query Role.Arn --output text) -
Allega al ruolo IAM le tre policy gestite IAM richieste.
aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name myCustomNetworkingNodeRole aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name myCustomNetworkingNodeRole aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name myCustomNetworkingNodeRoleImportante
Per semplicità, in questo tutorial la policy AmazonEKS_CNI_Policy è allegata al ruolo IAM del nodo. Tuttavia, in un cluster di produzione, consigliamo di allegare la policy a un ruolo IAM separato da utilizzare solo con il plug-in CNI di Amazon VPC per Kubernetes. Per ulteriori informazioni, consulta Configurare il plug-in CNI di Amazon VPC per l’utilizzo di IRSA.
-
-
Creare uno dei seguenti tipi di gruppi di nodi. Per determinare il tipo di istanza da implementare, consulta Scelta di una tipologia di istanza di nodo Amazon EC2 ottimale. Per questo tutorial, utilizza l’opzione Gestito, senza un modello di avvio o con un modello di avvio senza un ID AMI specificato. Se prevedi di utilizzare il gruppo di nodi per i carichi di lavoro di produzione, ti consigliamo di familiarizzare con tutte le opzioni del gruppo di nodi gestito e del gruppo di nodi autogestito prima di implementare il gruppo di nodi.
-
Gestito: implementare il gruppo di nodi utilizzando una delle opzioni seguenti:
-
Senza un modello di avvio o con un modello di avvio senza un ID AMI specificato: esegui il comando seguente. Per questo tutorial, utilizza i valori di esempio. Per un gruppo di nodi di produzione, sostituire tutti i valori di esempio con i propri. Il nome del gruppo di nodi non può contenere più di 63 caratteri. Deve iniziare con una lettera o un numero, ma può anche includere trattini e caratteri di sottolineatura.
aws eks create-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup \ --subnets $subnet_id_1 $subnet_id_2 --instance-types t3.medium --node-role $node_role_arn -
Con un modello di avvio con un ID AMI specificato
-
Determinare il numero massimo di Pod consigliato da Amazon EKS per i nodi. Segui le istruzioni riportate in Amazon EKS, il numero massimo di Pods consigliato per ogni tipo di EC2 istanza Amazon,
--cni-custom-networking-enabledaggiungendole al passaggio 3 di quell'argomento. Annota l'output restituito per l'utilizzo in un passaggio successivo. -
Nel modello di avvio, specifica un ID AMI ottimizzato per Amazon EKS o un’AMI personalizzata sviluppata con l’AMI ottimizzato per Amazon EKS, quindi implementa il gruppo di nodi utilizzando un modello di avvio e fornisci i seguenti dati utente nel modello di avvio. Questi dati utente passano gli argomenti alle
NodeConfigspecifiche. Per ulteriori informazioni in merito NodeConfig, consulta il riferimento all'NodeConfig API. Puoi sostituire 20con il valore del passaggio precedente (consigliato) o con un valore desiderato.--- MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="BOUNDARY" --BOUNDARY Content-Type: application/node.eks.aws --- apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: name: my-cluster ... kubelet: config: maxPods: 20Se hai creato un’AMI personalizzata che non è stata sviluppata con quella ottimizzata per Amazon EKS, devi creare autonomamente la configurazione.
-
-
-
Autogestito
-
Determinare il numero massimo di Pod consigliato da Amazon EKS per i nodi. Seguire le istruzioni riportate in Per ogni tipo di istanza Amazon EC2, Amazon EKS consiglia un numero massimo di pod, aggiungendo
--cni-custom-networking-enabledalla Passaggio 3 di questo argomento. Annota l’output restituito per l’utilizzo in un passaggio successivo. -
Implementa il gruppo di nodi utilizzando le istruzioni in Crea nodi Amazon Linux autogestiti.
-
Nota
Se vuoi che i nodi presenti in un cluster di produzione supportino un numero significativamente più elevato di Pod, esegui nuovamente lo script in Per ogni tipo di istanza Amazon EC2, Amazon EKS consiglia un numero massimo di pod. Aggiungi inoltre l’opzione
--cni-prefix-delegation-enabledal comando. Ad esempio, per un tipo di istanzam5.largeviene restituito110. Per istruzioni su come abilitare questa funzionalità, consulta Assegnazione di più indirizzi IP ai nodi Amazon EKS con prefissi. Puoi utilizzare questa funzionalità con una rete personalizzata. -
-
La creazione di gruppi di nodi richiede diversi minuti. Puoi verificare lo stato della creazione di un gruppo di nodi gestiti con il comando seguente.
aws eks describe-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup --query nodegroup.status --output textNon andare al passaggio successivo finché l’output restituito non è
ACTIVE. -
Ai fini di questo tutorial, puoi ignorare questo passaggio.
Per un cluster di produzione, se è stato assegnato a
ENIConfigsun nome diverso da quello della zona di disponibilità in cui lo stai utilizzando, devi annotare i nodi con il nomeENIConfigda utilizzare con il nodo. Questo passaggio non è necessario se disponi di una sola sottorete in ogni zona di disponibilità e hai assegnato aENIConfigsgli stessi nomi delle zone di disponibilità. Questo perché il plug-in CNI di Amazon VPC per Kubernetes associa automaticamente ilENIConfigcorretto al nodo se questa opzione è stata abilitata in una Passaggio precedente.-
Ottieni l’elenco dei nodi nel cluster.
kubectl get nodesDi seguito viene riportato un output di esempio:
NAME STATUS ROLES AGE VERSION ip-192-168-0-126.us-west-2.compute.internal Ready <none> 8m49s v1.22.9-eks-810597c ip-192-168-0-92.us-west-2.compute.internal Ready <none> 8m34s v1.22.9-eks-810597c -
Determina in quale zona di disponibilità si trova ogni nodo. Eseguire il comando seguente per ogni nodo restituito nella Passaggio precedente, sostituendo gli indirizzi IP in base all’output precedente.
aws ec2 describe-instances --filters Name=network-interface.private-dns-name,Values=ip-192-168-0-126.us-west-2.compute.internal \ --query 'Reservations[].Instances[].{AvailabilityZone: Placement.AvailabilityZone, SubnetId: SubnetId}'Di seguito viene riportato un output di esempio.
[ { "AvailabilityZone": "us-west-2d", "SubnetId": "subnet-Example5" } ] -
Annota ogni nodo con la risorsa
ENIConfigcreata per l’ID della sottorete e la zona di disponibilità. Puoi annotare solo un nodo con unENIConfig, ma più nodi con lo stessoENIConfig. Sostituire i valori di esempio con i propri valori.kubectl annotate node ip-192-168-0-126.us-west-2.compute.internal k8s.amazonaws.com/eniConfig=EniConfigName1 kubectl annotate node ip-192-168-0-92.us-west-2.compute.internal k8s.amazonaws.com/eniConfig=EniConfigName2
-
-
Se in un cluster di produzione erano presenti nodi con Pod in esecuzione prima di passare all’utilizzo della funzionalità di rete personalizzata, completare le attività seguenti:
-
Assicurati di avere dei nodi disponibili abilitati per la funzionalità di rete personalizzata.
-
Cordonare ed espellere i nodi per interrompere normalmente i Pod. Per ulteriori informazioni, consulta Safely Drain a Node
(Espellere un nodo in modo sicuro) nella documentazione Kubernetes. -
Termina i nodi. Se i nodi si trovano in un gruppo di nodi gestito esistente, puoi eliminare il gruppo di nodi. Eseguire il seguente comando seguente.
aws eks delete-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup
Solo i nuovi nodi registrati con l’etichetta
k8s.amazonaws.com/eniConfiguseranno la nuova funzionalità di rete personalizzata. -
-
Verificare che ai Pod venga assegnato un indirizzo IP da un intervallo CIDR associato a una delle sottoreti create in una Passaggio precedente.
kubectl get pods -A -o wideDi seguito viene riportato un output di esempio.
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system aws-node-2rkn4 1/1 Running 0 7m19s 192.168.0.92 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system aws-node-k96wp 1/1 Running 0 7m15s 192.168.0.126 ip-192-168-0-126.us-west-2.compute.internal <none> <none> kube-system coredns-657694c6f4-smcgr 1/1 Running 0 56m 192.168.1.23 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system coredns-657694c6f4-stwv9 1/1 Running 0 56m 192.168.1.28 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system kube-proxy-jgshq 1/1 Running 0 7m19s 192.168.0.92 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system kube-proxy-wx9vk 1/1 Running 0 7m15s 192.168.0.126 ip-192-168-0-126.us-west-2.compute.internal <none> <none>Puoi vedere che ai coredns vengono assegnati indirizzi IP dall’intervallo CIDR
192.168.1.0aggiunto al VPC. Senza una rete personalizzata, ai pod sarebbero stati assegnati indirizzi provenienti dall’unico blocco CIDR originariamente associato al VPC, ossia il blocco CIDR192.168.0.0.Se una
specdel Pod contiene il valorehostNetwork=true, viene assegnato l’indirizzo IP principale del nodo, non un indirizzo proveniente dalle sottoreti aggiunte. Per impostazione predefinita, questo valore è impostato sufalse. Questo valore è impostato sutrueper ilkube-proxye i pod (aws-node) del plug-in CNI di Amazon VPC per Kubernetes in esecuzione sul cluster. Per questo motivo alkube-proxye ai podaws-nodedel plug-in non vengono assegnati indirizzi 192.168.1.x nell’output precedente. Per ulteriori informazioni sull'hostNetworkimpostazione di un Pod, consulta PodSpec v1 corenel riferimento all'API Kubernetes.
Passaggio 5: eliminazione delle risorse del tutorial
Ti consigliamo di eliminare le risorse create dopo aver completato il tutorial. In seguito, potrai modificare i passaggi per abilitare la rete personalizzata di un cluster di produzione.
-
Se il gruppo di nodi creato era solo a scopo di test, eliminalo.
aws eks delete-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup -
Anche dopo che l'output della AWS CLI indica che il cluster è stato eliminato, il processo di eliminazione potrebbe non essere effettivamente completo. Questo processo di eliminazione richiede alcuni minuti. Verificare che il processo sia completo con il comando seguente.
aws eks describe-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup --query nodegroup.status --output textNon continuare finché l’output restituito non è simile al seguente.
An error occurred (ResourceNotFoundException) when calling the DescribeNodegroup operation: No node group found for name: my-nodegroup. -
Se il gruppo di nodi creato era solo a scopo di test, elimina il ruolo IAM del nodo.
-
Scollega le policy dal ruolo.
aws iam detach-role-policy --role-name myCustomNetworkingNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEKSWorkerNodePolicy aws iam detach-role-policy --role-name myCustomNetworkingNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEC2ContainerRegistryReadOnly aws iam detach-role-policy --role-name myCustomNetworkingNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy -
Elimina il ruolo.
aws iam delete-role --role-name myCustomNetworkingNodeRole
-
-
Elimina il cluster.
aws eks delete-cluster --name my-custom-networking-clusterVerifica l’eliminazione del cluster con il comando seguente.
aws eks describe-cluster --name my-custom-networking-cluster --query cluster.status --output textQuando viene restituito un output simile al seguente, il cluster è stato eliminato correttamente.
An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: my-custom-networking-cluster. -
Elimina il ruolo IAM del cluster.
-
Scollega le policy dal ruolo.
aws iam detach-role-policy --role-name myCustomNetworkingAmazonEKSClusterRole --policy-arn arn:aws: iam::aws:policy/AmazonEKSClusterPolicy -
Elimina il ruolo.
aws iam delete-role --role-name myCustomNetworkingAmazonEKSClusterRole
-
-
Elimina le sottoreti create in una Passaggio precedente.
aws ec2 delete-subnet --subnet-id $new_subnet_id_1 aws ec2 delete-subnet --subnet-id $new_subnet_id_2 -
Elimina il VPC creato.
aws cloudformation delete-stack --stack-name my-eks-custom-networking-vpc