Contribuisci a migliorare questa pagina
Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.
Implementare un cluster IPv6 Amazon EKS e nodi Amazon Linux gestiti
In questo tutorial, implementi un Amazon VPC IPv6, un cluster Amazon EKS con la famiglia IPv6 e un gruppo di nodi gestiti con nodi Amazon Linux per Amazon EC2. Non è possibile implementare nodi Windows per Amazon EC2 in un cluster IPv6. È inoltre possibile implementare nodi Fargate nel cluster, sebbene tali istruzioni non siano fornite in questo argomento per semplicità.
Prerequisiti
Prima di iniziare questo tutorial, completare le seguenti operazioni:
Installare e configurare gli strumenti e le risorse elencati di seguito, che sono necessari per creare e gestire un cluster Amazon EKS.
-
Ѐ consigliabile acquisire familiarità con tutte le impostazioni e implementare un cluster con le impostazioni che soddisfano i requisiti specifici. Per ulteriori informazioni, consultare Crea un cluster Amazon EKS., Semplifica il ciclo di vita dei nodi con gruppi di nodi gestiti e le considerazioni per questo argomento. Alcune impostazioni possono essere abilitate solo quando viene creato il cluster.
-
Lo strumento a riga di comando
kubectlè installato sul dispositivo o su AWS CloudShell. La versione può essere la stessa o immediatamente precedente o successiva alla versione Kubernetes del cluster. Ad esempio, se la versione del cluster è1.29, puoi usarekubectlversione1.28,1.29o1.30. Per installare o aggiornarekubectl, consulta Impostazione di kubectl e eksctl: -
Il principale di sicurezza IAM utilizzato deve disporre delle autorizzazioni per funzionare con i ruoli IAM di Amazon EKS e i ruoli collegati al servizio, AWS CloudFormation, un VPC e risorse correlate. Per ulteriori informazioni, consultare le pagine Actions e Using service-linked roles nella Guida per l’utente di IAM.
-
Se si utilizza eksctl, installare la versione
0.214.0o successiva sul computer. Per installarlo o aggiornarlo, consulta la sezione Installationnella documentazione di eksctl. -
La versione
2.12.3o successiva oppure la versione1.27.160o successiva dell’interfaccia a riga di comando AWS (AWS CLI) installata e configurata sul dispositivo o AWS CloudShell. Per verificare la versione attuale, usaaws --version | cut -d / -f2 | cut -d ' ' -f1. I programmi di gestione dei pacchetti, comeyum,apt-geto Homebrew per macOS, spesso sono aggiornati a versioni precedenti dell’AWS CLI. Per installare la versione più recente, consulta Installing e Quick configuration with aws configure della Guida per l’utente dell’Interfaccia della linea di comando AWS. La versione della AWS CLI installata in AWS CloudShell potrebbe anche essere precedente di diverse versioni rispetto alla più recente. Per aggiornarla, consultare la pagina Installing AWS CLI to your home directory della Guida per l’utente di AWS CloudShell. Se si utilizza AWS CloudShell, potrebbe essere necessario installare la versione 2.12.3 o successiva oppure 1.27.160 o successiva di AWS CLI, perché la versione di default di AWS CLI installata in AWS CloudShell potrebbe essere una versione precedente.
È possibile utilizzare eksctl o la CLI per implementare un cluster IPv6.
Implementare un cluster IPv6 con eksctl
-
Crea il file
ipv6-cluster.yaml. Copia il comando seguente sul tuo dispositivo. Apportare le seguenti modifiche al comando, se necessario, quindi esegui il comando modificato:-
Sostituire
my-clustercon un nome per il cluster. Il nome può contenere solo caratteri alfanumerici (con distinzione tra lettere maiuscole e minuscole) e trattini. Deve iniziare con un carattere alfanumerico e non può avere una lunghezza superiore a 100 caratteri. Il nome deve essere univoco all’interno della Regione AWS e dell’account AWS in cui si crea il cluster. -
Sostituire
region-codecon qualsiasi Regione AWS supportata da Amazon EKS. Per un elenco delle Regioni AWS supportate, consultare la pagina Amazon EKS endpoints and quotas nella AWS General Reference Guide. -
Il valore per
versioncon la versione del tuo cluster. Per ulteriori informazioni, consultare la pagina Amazon EKS supported versions. -
Sostituisci
my-nodegroupcon un nome per il gruppo di nodi. 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. -
Sostituire
t3.mediumcon qualsiasi tipo di istanza di AWS Nitro System.cat >ipv6-cluster.yaml <<EOF --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "X.XX" kubernetesNetworkConfig: ipFamily: IPv6 addons: - name: vpc-cni version: latest - name: coredns version: latest - name: kube-proxy version: latest iam: withOIDC: true managedNodeGroups: - name: my-nodegroup instanceType: t3.medium EOF
-
-
Creare il cluster.
eksctl create cluster -f ipv6-cluster.yamlLa creazione di cluster richiede diversi minuti. Non procedere fino a quando non viene visualizzata l’ultima riga di output, simile alla seguente.
[...] [✓] EKS cluster "my-cluster" in "region-code" region is ready -
Confermare che ai pod predefiniti siano assegnati indirizzi
IPv6.kubectl get pods -n kube-system -o wideDi seguito viene riportato un output di esempio:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES aws-node-rslts 1/1 Running 1 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> aws-node-t74jh 1/1 Running 0 5m32s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-cw7w2 1/1 Running 0 56m 2600:1f13:b66:8203:34e5:: ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-tx6n8 1/1 Running 0 56m 2600:1f13:b66:8203:34e5::1 ip-192-168-253-70.region-code.compute.internal <none> <none> kube-proxy-btpbk 1/1 Running 0 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> kube-proxy-jjk2g 1/1 Running 0 5m33s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none> -
Confermare che ai servizi di default siano assegnati indirizzi
IPv6.kubectl get services -n kube-system -o wideDi seguito viene riportato un output di esempio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kube-dns ClusterIP fd30:3087:b6c2::a <none> 53/UDP,53/TCP 57m k8s-app=kube-dns -
(Facoltativo) Implementare un’applicazione di esempio o implementare AWS Load Balancer Controller e un’applicazione di esempio per eseguire il bilanciamento del carico delle applicazioni HTTP con Instradare il traffico di applicazioni e HTTP con Application Load Balancer o del traffico di rete con Esecuzione del routing del traffico TCP e UDP con Network Load Balancer verso i pod
IPv6. -
Una volta terminato con il cluster e i nodi creati per questo tutorial, è necessario eliminare le risorse create con il seguente comando.
eksctl delete cluster my-cluster
Implementare un cluster IPv6 con AWS CLI
Importante
-
È necessario che tutti i passaggi di questa guida siano completati dallo stesso utente. Esegui il comando seguente per controllare l'utente corrente:
aws sts get-caller-identity -
È necessario completare tutti i passaggi di questa procedura nella stessa shell. Diversi passaggi utilizzano le variabili impostate nelle fasi precedenti. Le fasi che utilizzano le variabili non funzioneranno correttamente se i relativi valori sono impostati in una shell diversa. Se si utilizza AWS CloudShell per completare la procedura seguente, tenere presente che, se non si interagisce con la tastiera o il puntatore per circa 20-30 minuti, la sessione di shell termina. I processi in esecuzione non sono considerati interazioni.
-
Le istruzioni sono scritte per la shell Bash e per altre shell potrebbero essere necessarie ulteriori regolazioni.
Sostituire tutti i valori di esempio nelle fasi di questa procedura con i propri valori.
-
Emettere i seguenti comandi per impostare alcune variabili utilizzate nelle fasi successive. Sostituire
region-codecon la Regione AWS in cui si desidera implementare le risorse. Il valore può essere qualsiasi Regione AWS supportata da Amazon EKS. Per un elenco delle Regioni AWS supportate, consultare la pagina Amazon EKS endpoints and quotas nella AWS General Reference Guide. Sostituiremy-clustercon un nome per il cluster. Il nome può contenere solo caratteri alfanumerici (con distinzione tra lettere maiuscole e minuscole) e trattini. Deve iniziare con un carattere alfanumerico e non può avere una lunghezza superiore a 100 caratteri. Il nome deve essere univoco all’interno della Regione AWS e dell’account AWS in cui si crea il cluster. Sostituiscimy-nodegroupcon un nome per il gruppo di nodi. 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. Sostituire111122223333con l'ID account.export region_code=region-code export cluster_name=my-cluster export nodegroup_name=my-nodegroup export account_id=111122223333 -
Creare un Amazon VPC con sottoreti pubbliche e private che soddisfino i requisiti Amazon EKS e
IPv6.-
Eseguire questo comando per impostare una variabile per il nome dello stack AWS CloudFormation. È possibile sostituire
my-eks-ipv6-vpccon qualsiasi nome scelto.export vpc_stack_name=my-eks-ipv6-vpc -
Creare un VPC
IPv6utilizzando un modello AWS CloudFormation.aws cloudformation create-stack --region $region_code --stack-name $vpc_stack_name \ --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-ipv6-vpc-public-private-subnets.yamlLa creazione dello stack richiede alcuni minuti. Esegui il comando seguente. Non passare alla fase successiva finché l’output del comando non è
CREATE_COMPLETE.aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name --query Stacks[].StackStatus --output text -
Recuperare gli ID delle sottoreti pubbliche che sono state create.
aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output textDi seguito viene riportato un output di esempio:
subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE -
Abilitare l'opzione di assegnazione automatica dell'indirizzo
IPv6per le sottoreti pubbliche create.aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-0a1a56c486EXAMPLE --assign-ipv6-address-on-creation aws ec2 modify-subnet-attribute --region $region_code --subnet-id subnet-099e6ca77aEXAMPLE --assign-ipv6-address-on-creation -
Recuperare i nomi delle sottoreti e dei gruppi di sicurezza creati dal modello dallo stack AWS CloudFormation implementato e memorizzarli in variabili da utilizzare in una fase successiva.
security_groups=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SecurityGroups`].OutputValue' --output text) public_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SubnetsPublic`].OutputValue' --output text) private_subnets=$(aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name \ --query='Stacks[].Outputs[?OutputKey==`SubnetsPrivate`].OutputValue' --output text) subnets=${public_subnets},${private_subnets}
-
-
Creare un ruolo IAM del cluster e collegarvi la policy gestita IAM richiesta dall'AMI per Amazon EKS. I cluster Kubernetes gestiti da Amazon EKS effettuano chiamate ad altri servizi AWS per conto dell'utente per gestire le risorse utilizzate con il servizio.
-
Per creare il file
eks-cluster-role-trust-policy.json, emetti il seguente comando:cat >eks-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF -
Eseguire questo comando per impostare una variabile per il nome del ruolo. È possibile sostituire
myAmazonEKSClusterRolecon qualsiasi nome scelto.export cluster_role_name=myAmazonEKSClusterRole -
Crea il ruolo.
aws iam create-role --role-name $cluster_role_name --assume-role-policy-document file://"eks-cluster-role-trust-policy.json" -
Recuperare l'ARN del ruolo IAM e memorizzarlo in una variabile per una fase successiva.
CLUSTER_IAM_ROLE=$(aws iam get-role --role-name $cluster_role_name --query="Role.Arn" --output text) -
Allegare la policy IAM gestita da Amazon EKS richiesta al ruolo.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name $cluster_role_name
-
-
Creare il cluster.
aws eks create-cluster --region $region_code --name $cluster_name --kubernetes-version 1.XX \ --role-arn $CLUSTER_IAM_ROLE --resources-vpc-config subnetIds=$subnets,securityGroupIds=$security_groups \ --kubernetes-network-config ipFamily=ipv6-
NOTA: è possibile 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. Esegui il comando seguente. Non passare alla fase successiva fino a quando l’output del comando non è
ACTIVE.aws eks describe-cluster --region $region_code --name $cluster_name --query cluster.status
-
-
Creare o aggiornare un file
kubeconfigper il cluster in modo che sia possibile comunicare con il cluster.aws eks update-kubeconfig --region $region_code --name $cluster_namePer impostazione predefinita, il file
configviene creato in~/.kubeo la configurazione del nuovo cluster viene aggiunta a un fileconfigesistente in~/.kube. -
Creare un ruolo IAM del nodo.
-
Per creare il file
vpc-cni-ipv6-policy.json, emetti il seguente comando:cat >vpc-cni-ipv6-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] } EOF -
Creare la policy IAM.
aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json -
Per creare il file
node-role-trust-relationship.json, emetti il seguente comando:cat >node-role-trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF -
Eseguire questo comando per impostare una variabile per il nome del ruolo. È possibile sostituire
AmazonEKSNodeRolecon qualsiasi nome scelto.export node_role_name=AmazonEKSNodeRole -
Crea il ruolo IAM.
aws iam create-role --role-name $node_role_name --assume-role-policy-document file://"node-role-trust-relationship.json" -
Allegare la policy IAM al ruolo IAM.
aws iam attach-role-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name $node_role_nameImportante
Per semplicità, in questo tutorial la policy è allegata a questo ruolo IAM. Tuttavia, in un cluster di produzione, si consiglia di allegare la policy a un ruolo IAM separato. Per ulteriori informazioni, consulta Configurare il plug-in CNI di Amazon VPC per l’utilizzo di IRSA.
-
Allegare al ruolo IAM le due policy gestite IAM richieste.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name $node_role_name aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name $node_role_name -
Recuperare l'ARN del ruolo IAM e memorizzarlo in una variabile per una fase successiva.
node_iam_role=$(aws iam get-role --role-name $node_role_name --query="Role.Arn" --output text)
-
-
Creare un gruppo di nodi gestito.
-
Visualizzare gli ID delle sottoreti creati in una fase precedente.
echo $subnetsDi seguito viene riportato un output di esempio:
subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE,subnet-0377963d69EXAMPLE,subnet-0c05f819d5EXAMPLE -
Creare il gruppo di nodi. Sostituisci
0a1a56c486EXAMPLE,099e6ca77aEXAMPLE,0377963d69EXAMPLEe0c05f819d5EXAMPLEcon i valori restituiti nell'output della fase precedente. Assicurarsi di rimuovere le virgole tra gli ID delle sottoreti dall'output precedente nel comando seguente. È possibile sostituiret3.mediumcon qualsiasi tipo di istanza di AWS Nitro System.aws eks create-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \ --subnets subnet-0a1a56c486EXAMPLE subnet-099e6ca77aEXAMPLE subnet-0377963d69EXAMPLE subnet-0c05f819d5EXAMPLE \ --instance-types t3.medium --node-role $node_iam_roleLa creazione del gruppo di nodi richiede alcuni minuti. Esegui il comando seguente. Non passare alla fase successiva finché l’output restituito non è
ACTIVE.aws eks describe-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \ --query nodegroup.status --output text
-
-
Confermare che ai pod predefiniti siano assegnati indirizzi
IPv6nella colonnaIP.kubectl get pods -n kube-system -o wideDi seguito viene riportato un output di esempio:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES aws-node-rslts 1/1 Running 1 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> aws-node-t74jh 1/1 Running 0 5m32s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-cw7w2 1/1 Running 0 56m 2600:1f13:b66:8203:34e5:: ip-192-168-253-70.region-code.compute.internal <none> <none> coredns-85d5b4454c-tx6n8 1/1 Running 0 56m 2600:1f13:b66:8203:34e5::1 ip-192-168-253-70.region-code.compute.internal <none> <none> kube-proxy-btpbk 1/1 Running 0 5m36s 2600:1f13:b66:8200:11a5:ade0:c590:6ac8 ip-192-168-34-75.region-code.compute.internal <none> <none> kube-proxy-jjk2g 1/1 Running 0 5m33s 2600:1f13:b66:8203:4516:2080:8ced:1ca9 ip-192-168-253-70.region-code.compute.internal <none> <none> -
Confermare che ai servizi di default siano assegnati gli indirizzi
IPv6nella colonnaIP.kubectl get services -n kube-system -o wideDi seguito viene riportato un output di esempio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kube-dns ClusterIP fd30:3087:b6c2::a <none> 53/UDP,53/TCP 57m k8s-app=kube-dns -
(Facoltativo) Implementare un’applicazione di esempio o implementare AWS Load Balancer Controller e un’applicazione di esempio per eseguire il bilanciamento del carico delle applicazioni HTTP con Instradare il traffico di applicazioni e HTTP con Application Load Balancer o del traffico di rete con Esecuzione del routing del traffico TCP e UDP con Network Load Balancer verso i pod
IPv6. -
Una volta terminato con il cluster e i nodi creati per questo tutorial, è necessario eliminare le risorse create con i seguenti comandi. Assicurarsi di non utilizzare nessuna delle risorse al di fuori di questo tutorial prima di eliminarle.
-
Se si sta completando questo passaggio in una shell diversa da quella in cui sono state completate le fasi precedenti, impostare i valori di tutte le variabili utilizzate nelle fasi precedenti sostituendo i
valori di esempiocon quelli specificate durante le fasi precedenti. Se si sta completando questo passaggio nella stessa shell in cui sono state completate le fasi precedenti, andare alla fase successiva.export region_code=region-code export vpc_stack_name=my-eks-ipv6-vpc export cluster_name=my-cluster export nodegroup_name=my-nodegroup export account_id=111122223333 export node_role_name=AmazonEKSNodeRole export cluster_role_name=myAmazonEKSClusterRole -
Eliminare il gruppo di nodi.
aws eks delete-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_nameL'eliminazione richiede pochi minuti. Esegui il comando seguente. Non passare alla fase successiva se viene restituito un output.
aws eks list-nodegroups --region $region_code --cluster-name $cluster_name --query nodegroups --output text -
Elimina il cluster.
aws eks delete-cluster --region $region_code --name $cluster_nameL'eliminazione del cluster richiede alcuni minuti. Prima di continuare, accertarsi che il cluster sia eliminato con il comando seguente:
aws eks describe-cluster --region $region_code --name $cluster_nameNon procedere alla fase successiva finché l’output non è simile al seguente:
An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: my-cluster. -
Eliminare le risorse IAM create. Sostituire
AmazonEKS_CNI_IPv6_Policycon il nome scelto, se è stato scelto un nome diverso da quello usato nei passaggi precedenti.aws iam detach-role-policy --role-name $cluster_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly aws iam detach-role-policy --role-name $node_role_name --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy aws iam delete-policy --policy-arn arn:aws:iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy aws iam delete-role --role-name $cluster_role_name aws iam delete-role --role-name $node_role_name -
Eliminare lo stack AWS CloudFormation che ha creato il VPC.
aws cloudformation delete-stack --region $region_code --stack-name $vpc_stack_name
-