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à.
Implementazione di un EKS IPv6
cluster Amazon e nodi Amazon Linux gestiti
In questo tutorial, distribuisci un IPv6
AmazonVPC, un EKS cluster Amazon con la IPv6
famiglia e un gruppo di nodi gestiti con nodi Amazon EC2 Amazon Linux. Non puoi distribuire Amazon EC2 Windows nodi in un IPv6
cluster. Puoi anche distribuire nodi Fargate sul tuo cluster, anche se queste istruzioni non sono fornite in questo argomento per semplicità.
Prerequisiti
Completa quanto segue prima di iniziare il tutorial:
Installa e configura i seguenti strumenti e risorse necessari per creare e gestire un EKS cluster Amazon.
-
Ti consigliamo di acquisire familiarità con tutte le impostazioni e di distribuire un cluster con le impostazioni che soddisfano i tuoi requisiti. Per ulteriori informazioni, vedere Crea un EKS cluster AmazonSemplifica il ciclo di vita dei nodi con gruppi di nodi gestiti, e le considerazioni relative a questo argomento. Alcune impostazioni possono essere abilitate solo quando viene creato il cluster.
-
Lo strumento da
kubectl
riga di comando è installato sul dispositivo o AWS CloudShell. La versione può essere uguale o superiore a una versione secondaria precedente o successiva alla Kubernetes versione del cluster. Ad esempio, se la versione del cluster è1.29
, puoi usarekubectl
versione1.28
,1.29
o1.30
. Per installare o aggiornarekubectl
, consulta Configura kubectl ed eksctl: -
Il responsabile della IAM sicurezza che stai utilizzando deve disporre delle autorizzazioni per lavorare con EKS IAM i ruoli Amazon, i ruoli collegati ai servizi AWS CloudFormationVPC, a e le risorse correlate. Per ulteriori informazioni, consulta Azioni e utilizzo dei ruoli collegati ai servizi nella Guida per l'IAMutente.
-
Se utilizzi il plugin eksctl, installa la versione
0.194.0
o una versione successiva sul tuo computer. Per installarlo o aggiornarlo, consulta la sezione Installationnella documentazione di eksctl
. -
Versione
2.12.3
o successiva o versione1.27.160
o 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
. Package manager comeyum
apt-get
, o Homebrew for macOS sono spesso presenti diverse versioni precedenti alla versione più recente di AWS CLI. Per 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 AWS CLI versione installata in AWS CloudShell potrebbe anche contenere diverse versioni precedenti alla versione più recente. Per aggiornarla, consulta Installazione nella home directory nella Guida AWS CLI per l' AWS CloudShell utente. Se si utilizza la AWS CloudShell, potrebbe essere necessario installare la versione 2.12.3 o successiva o la versione 1.27.160 o successiva di AWS CLI, poiché la AWS CLI versione predefinita installata in AWS CloudShell potrebbe essere una versione precedente.
Puoi utilizzare il plugin eksctl o per distribuire un CLI cluster. IPv6
Implementa un cluster con IPv6 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:-
Replace (Sostituisci)
my-cluster
con un nome per il tuo 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ò superare i 100 caratteri. Il nome deve essere univoco all'interno della AWS regione e AWS dell'account in cui stai creando il cluster. -
Replace (Sostituisci)
region-code
con qualsiasi AWS regione supportata da AmazonEKS. Per un elenco delle AWS regioni, consulta gli EKSendpoint e le quote di Amazon nella guida di riferimento AWS generale. -
Il valore per
version
con la versione del tuo cluster. Per ulteriori informazioni, consulta Comprendi il ciclo di vita della versione Kubernetes su EKS. -
Replace (Sostituisci)
my-nodegroup
con un nome per il tuo gruppo di nodi. Il nome del gruppo di nodi non può superare i 63 caratteri. Deve iniziare con una lettera o un numero, ma può anche includere trattini e caratteri di sottolineatura. -
Replace (Sostituisci)
t3.medium
con 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.yaml
La creazione di cluster richiede diversi minuti. Non procedere finché non viene visualizzata l'ultima riga di output, che è simile all'output seguente.
[...] [✓] EKS cluster "my-cluster" in "region-code" region is ready
-
Conferma l'impostazione predefinita Pods vengono assegnati
IPv6
indirizzi.kubectl get pods -n kube-system -o wide
Di 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 wide
Di 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) Implementa un'applicazione di esempio o implementa il Load AWS Balancer Controller e un'applicazione di esempio per HTTP bilanciare il carico delle applicazioni o del traffico di Indirizza l'applicazione e HTTP il traffico con Application Load Balancer rete con Percorso TCP e UDP traffico con Network Load Balancer
IPv6
Pods. -
Dopo aver finito con il cluster e i nodi che hai creato per questo tutorial, dovresti ripulire le risorse che hai creato con il seguente comando.
eksctl delete cluster my-cluster
Distribuisci un IPv6 cluster 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. I passaggi che utilizzano le variabili non funzioneranno correttamente se i valori delle variabili sono impostati in una shell diversa. Se utilizzate il AWS CloudShellper completare la procedura seguente, ricordate che se non interagite con essa utilizzando 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.
Sostituisci tutto example values
nei passaggi di questa procedura con i propri valori.
-
Emettere i seguenti comandi per impostare alcune variabili utilizzate nelle fasi successive. Replace (Sostituisci)
region-code
con la AWS regione in cui desideri distribuire le tue risorse. Il valore può essere qualsiasi AWS regione supportata da AmazonEKS. Per un elenco delle AWS regioni, consulta gli EKSendpoint e le quote di Amazon nella guida di riferimento AWS generale. Replace (Sostituisci)my-cluster
con un nome per il tuo 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ò superare i 100 caratteri. Il nome deve essere univoco all'interno della AWS regione e AWS dell'account in cui stai creando il cluster. Replace (Sostituisci)my-nodegroup
con un nome per il tuo gruppo di nodi. Il nome del gruppo di nodi non può superare i 63 caratteri. Deve iniziare con una lettera o un numero, ma può anche includere trattini e caratteri di sottolineatura. Replace (Sostituisci)111122223333
con l'ID del tuo account.export region_code=region-code export cluster_name=my-cluster export nodegroup_name=my-nodegroup export account_id=111122223333
-
Crea un Amazon VPC con sottoreti pubbliche e private che soddisfi i requisiti di AmazonEKS.
IPv6
-
Esegui il comando seguente per impostare una variabile per il nome AWS CloudFormation dello stack. Puoi sostituire
my-eks-ipv6-vpc
con qualsiasi nome tu scelga.export vpc_stack_name=my-eks-ipv6-vpc
-
Crea e
IPv6
VPC utilizza un AWS CloudFormation modello.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.yaml
La creazione dello stack richiede alcuni minuti. Esegui il comando seguente. Non proseguite con il passaggio successivo finché l'output del comando non sarà raggiunto
CREATE_COMPLETE
.aws cloudformation describe-stacks --region $region_code --stack-name $vpc_stack_name --query Stacks[].StackStatus --output text
-
Recupera le IDs 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 text
Di seguito viene riportato un output di esempio:
subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE
-
Abilitare l'opzione di assegnazione automatica dell'indirizzo
IPv6
per 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
-
Recupera i nomi delle sottoreti e dei gruppi di sicurezza creati dal modello dallo AWS CloudFormation stack distribuito e memorizzali in variabili da utilizzare in un passaggio successivo.
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}
-
-
Crea un IAM ruolo del cluster e allega la policy EKS IAM gestita di Amazon richiesta. Kubernetes i cluster gestiti da Amazon EKS effettuano chiamate ad altri AWS servizi per tuo conto per gestire le risorse che utilizzi 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. Puoi sostituire
myAmazonEKSClusterRole
con qualsiasi nome tu scelga.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"
-
Recupera ARN il IAM ruolo e memorizzalo in una variabile per un passaggio successivo.
CLUSTER_IAM_ROLE=$(aws iam get-role --role-name $cluster_role_name --query="Role.Arn" --output text)
-
Allega la IAM policy EKS gestita di Amazon 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
-
NOTE: Potresti ricevere un errore che indica che una delle zone di disponibilità nella tua richiesta non ha una capacità sufficiente per creare un EKS cluster Amazon. 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 continuare con il passaggio successivo finché l'output del comando non è disponibile
ACTIVE
.aws eks describe-cluster --region $region_code --name $cluster_name --query cluster.status
-
-
Creare o aggiornare un file
kubeconfig
per il cluster in modo che sia possibile comunicare con il cluster.aws eks update-kubeconfig --region $region_code --name $cluster_name
Per impostazione predefinita, il
config
file viene creato in~/.kube
o la configurazione del nuovo cluster viene aggiunta a unconfig
file esistente in~/.kube
. -
Crea un IAM ruolo del nodo.
-
Per creare il file
vpc-cni-ipv6-policy.json
, emetti il seguente comando:cat >vpc-cni-ipv6-policy <<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
-
Crea la IAM politica.
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. Puoi sostituire
AmazonEKSNodeRole
con qualsiasi nome tu scelga.export node_role_name=AmazonEKSNodeRole
-
Crea il IAM ruolo.
aws iam create-role --role-name $node_role_name --assume-role-policy-document file://"node-role-trust-relationship.json"
-
Allega la IAM policy al IAM ruolo.
aws iam attach-role-policy --policy-arn arn:aws: iam::$account_id:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name $node_role_name
Importante
Per semplicità, in questo tutorial, la policy è allegata a questo IAM ruolo. In un cluster di produzione, tuttavia, consigliamo di assegnare la politica a un IAM ruolo separato. Per ulteriori informazioni, consulta Configura il VPC CNI plug-in Amazon da utilizzare IRSA.
-
Allega due politiche IAM gestite obbligatorie al IAM ruolo.
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
-
Recupera ARN il IAM ruolo e memorizzalo in una variabile per un passaggio successivo.
node_iam_role=$(aws iam get-role --role-name $node_role_name --query="Role.Arn" --output text)
-
-
Creare un gruppo di nodi gestito.
-
Visualizza le IDs sottoreti che hai creato in un passaggio precedente.
echo $subnets
Di seguito viene riportato un output di esempio:
subnet-0a1a56c486EXAMPLE,subnet-099e6ca77aEXAMPLE,subnet-0377963d69EXAMPLE,subnet-0c05f819d5EXAMPLE
-
Creare il gruppo di nodi. Replace (Sostituisci)
0a1a56c486EXAMPLE
,099e6ca77aEXAMPLE
,0377963d69EXAMPLE
e0c05f819d5EXAMPLE
con i valori restituiti nell'output del passaggio precedente. Assicurati di rimuovere le virgole tra subnet IDs dall'output precedente nel comando seguente. È possibile sostituiret3.medium
con 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_role
La creazione del gruppo di nodi richiede alcuni minuti. Esegui il comando seguente. Non procedere al passaggio successivo finché non viene
ACTIVE
restituito l'output.aws eks describe-nodegroup --region $region_code --cluster-name $cluster_name --nodegroup-name $nodegroup_name \ --query nodegroup.status --output text
-
-
Conferma che è l'impostazione predefinita Pods vengono assegnati
IPv6
gli indirizzi nellaIP
colonna.kubectl get pods -n kube-system -o wide
Di 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
IPv6
nella colonnaIP
.kubectl get services -n kube-system -o wide
Di 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) Implementa un'applicazione di esempio o implementa il Load AWS Balancer Controller e un'applicazione di esempio per HTTP bilanciare il carico delle applicazioni o del traffico di Indirizza l'applicazione e HTTP il traffico con Application Load Balancer rete con Percorso TCP e UDP traffico con Network Load Balancer
IPv6
Pods. -
Dopo aver finito con il cluster e i nodi che hai creato per questo tutorial, dovresti ripulire le risorse che hai creato con i seguenti comandi. Assicurati di non utilizzare nessuna delle risorse al di fuori di questo tutorial prima di eliminarle.
-
Se stai completando questo passaggio in una shell diversa da quella in cui hai completato i passaggi precedenti, imposta i valori di tutte le variabili utilizzate nei passaggi precedenti, sostituendo il
example values
con i valori che hai specificato quando hai completato i passaggi precedenti. Se stai completando questo passaggio nella stessa shell in cui hai completato i passaggi precedenti, passa al passaggio successivo.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_name
L'eliminazione richiede pochi minuti. Esegui il comando seguente. Non procedere al passaggio successivo 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_name
L'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_name
Non procedete al passaggio successivo finché l'output non sarà simile a quello successivo.
An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: my-cluster.
-
Eliminate le IAM risorse che avete creato. Replace (Sostituisci)
AmazonEKS_CNI_IPv6_Policy
con il nome che hai scelto, se hai 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
-
Elimina lo AWS CloudFormation stack che ha creato ilVPC.
aws cloudformation delete-stack --region $region_code --stack-name $vpc_stack_name
-