Abilitazione del supporto di Windows per il cluster Amazon EKS - Amazon EKS

Abilitazione del supporto di Windows per il cluster Amazon EKS

Prima di implementare i nodi di Windows, tieni conto delle seguenti considerazioni.

Considerazioni

  • Le istanze Amazon EC2 di tipo C3, C4, D2, I2, M4 (escluso m4.16xlarge), M6a.x e R3 non sono supportate per i carichi di lavoro di Windows.

  • La modalità di rete host non è supportata per i carichi di lavoro di Windows.

  • I cluster Amazon EKS devono contenere uno o più nodi Linux o Fargate per eseguire i pods del sistema core che funzionano solo su Linux, come CoreDNS.

  • I log degli eventi kubelet e kube-proxy vengono reindirizzati al log degli eventi EKS Windows e sono impostati su un limite di 200 MB.

  • Non puoi utilizzare Tutorial: gruppi di sicurezza per pods con pods in esecuzione sui nodi Windows.

  • Non puoi utilizzare una rete personalizzata con i nodi Windows.

  • Non puoi utilizzare prefissi IP con i nodi Windows. Questo è un requisito per l'utilizzo di IPv6 quindi non è possibile utilizzare IPv6 nemmeno con i nodi Windows.

  • I nodi di Windows supportano un'interfaccia di rete elastica per nodo. Il numero di pods che puoi eseguire per ogni nodo di Windows è uguale al numero di indirizzi IP disponibili per ogni interfaccia di rete elastica relativa al il tipo di istanza del nodo, meno uno. Per ulteriori informazioni, consultare la sezione relativa agli Indirizzi IP per interfaccia di rete per tipo di istanza nella Guida per l'utente di Amazon EC2 per le istanze Windows.

  • In un cluster Amazon EKS, un singolo servizio con un load balancer può supportare fino a 1024 pods di back-end. Ogni pod ha il proprio indirizzo IP univoco. Il limite precedente di 64 pods non è più valido, dopo un aggiornamento di Windows Server a partire dalla Build del sistema operativo 17763.2746.

  • Non puoi implementare nodi gestiti da Windows. Puoi creare solo nodi di Windows autogestiti. Per ulteriori informazioni, consultare Avvio dei nodi Windows autogestiti.

  • I container Windows non sono supportati per i pod Amazon EKS su Fargate.

  • Non è possibile recuperare i log dal pod vpc-resource-controller. In precedenza era possibile quando si implementava il controller sul piano dati.

  • Esiste un periodo di raffreddamento prima che un indirizzo IPv4 venga assegnato a un nuovo pod. In questo modo, si impedisce che il traffico vada verso un pod precedente con lo stesso indirizzo IPv4 a causa della mancata validità delle regole kube-proxy.

  • L'origine per il controller è gestita su GitHub. Per contribuire o segnalare problemi relativi al controller, consulta il progetto su GitHub.

Prerequisiti

  • Utilizzo di un cluster esistente. Il cluster deve eseguire una delle versioni Kubernetes e della piattaforma elencate nella tabella seguente. Sono supportate anche tutte le versioni Kubernetes e della piattaforma successive a quelle elencate. Se la versione del cluster o della piattaforma è precedente a una delle seguenti versioni, dovrai abilitare il supporto Windows legacy sul piano dati del cluster. Una volta che il cluster si trova in una delle seguenti versioni Kubernetes e della piattaforma o versioni successive, puoi rimuovere il supporto Windows legacy e abilitare il supporto Windows sul piano di controllo.

    Versione Kubernetes Versione della piattaforma
    1.23 eks.1
    1.22 eks.1
    1.21 eks.3
    1.20 eks.3
    1.19 eks.7

    Il tuo cluster deve avere almeno un nodo Linux (ne consigliamo almeno due) o un pod Fargate per eseguire CoreDNS. Se abiliti il supporto Windows legacy, devi utilizzare un nodo Linux (non è possibile utilizzare un pod Fargate) per eseguire CoreDNS.

  • Un Ruolo IAM del cluster Amazon EKS esistente.

Abilitazione del supporto Windows

Se il cluster non corrisponde a una delle versioni Kubernetes e della piattaforma elencate nei Prerequisiti o a una versione successiva, devi abilitare invece il supporto Windows legacy. Per ulteriori informazioni, consultare Abilitazione del supporto Windows legacy.

Se non hai mai abilitato il supporto Windows sul cluster, vai al passaggio successivo.

Se hai abilitato il supporto Windows su un cluster precedente a una versione Kubernetes o della piattaforma elencata nei Prerequisiti, per prima cosa rimuovi vpc-resource-controller e vpc-admission-webhook dal tuo piano dati. Sono obsoleti e non sono più necessari.

Abilitazione del supporto Windows per il cluster

  1. Se non disponi di nodi Amazon Linux nel cluster e utilizzi gruppi di sicurezza per i pods, vai al passaggio successivo. Altrimenti, conferma che la policy gestita di AmazonEKSVPCResourceController è collegata al tuo ruolo del cluster. Sostituisci eksClusterRole con il nome del ruolo del cluster.

    aws iam list-attached-role-policies --role-name eksClusterRole

    Di seguito è riportato l'output di esempio.

    { "AttachedPolicies": [ { "PolicyName": "AmazonEKSClusterPolicy", "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy" }, { "PolicyName": "AmazonEKSVPCResourceController", "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSVPCResourceController" } ] }

    Se la policy è collegata, come nell'output precedente, salta il passaggio successivo.

  2. Collega la policy gestita AmazonEKSVPCResourceController al tuo Ruolo IAM del cluster Amazon EKS. Sostituisci eksClusterRole con il nome del ruolo del cluster.

    aws iam attach-role-policy \ --role-name eksClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController
  3. Creare un file denominato vpc-resource-controller-configmap.yaml con i seguenti contenuti.

    apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-windows-ipam: "true"
  4. Applica la ConfigMap al cluster.

    kubectl apply -f vpc-resource-controller-configmap.yaml

Rimozione del supporto Windows legacy dal piano dati

Se hai abilitato il supporto Windows su un cluster precedente a una versione Kubernetes o della piattaforma elencata nei Prerequisiti, per prima cosa rimuovi vpc-resource-controller e vpc-admission-webhook dal tuo piano dati. Sono obsoleti e non più necessari in quanto la funzionalità fornita è ora abilitata sul piano di controllo.

  1. Disinstallare il vpc-resource-controller con il seguente comando. Utilizza questo comando indipendentemente dallo strumento con cui è stato originariamente installato. Sostituisci region-code (solo l'istanza del testo dopo /manifests/) con la Regione AWS in cui si trova il cluster.

    kubectl delete -f https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-resource-controller/latest/vpc-resource-controller.yaml
  2. Disinstalla il vpc-admission-webhook seguendo le istruzioni dello strumento con cui è stato installato.

    eksctl

    Esegui i comandi seguenti.

    kubectl delete deployment -n kube-system vpc-admission-webhook kubectl delete service -n kube-system vpc-admission-webhook kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io vpc-admission-webhook-cfg
    kubectl on macOS or Windows

    Esegui il seguente comando. Sostituisci region-code (solo l'istanza del testo dopo /manifests/) con la Regione AWS in cui si trova il cluster.

    kubectl delete -f https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/vpc-admission-webhook-deployment.yaml
  3. Abilita il supporto Windows per il tuo cluster sul piano di controllo.

Disabilitazione del supporto Windows

Disabilitazione del supporto Windows sul cluster

  1. Se il cluster contiene nodi Amazon Linux e utilizzi gruppi di sicurezza per pod pods, salta questo passaggio.

    Rimuovi la policy IAM gestita AmazonVPCResourceController dal ruolo del cluster. Sostituisci eksClusterRole con il nome del ruolo del tuo cluster e 111122223333 con il tuo ID account.

    aws iam detach-role-policy \ --role-name eksClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController
  2. Disabilita Windows IPAM nella ConfigMap per amazon-vpc-cni.

    kubectl patch configmap/amazon-vpc-cni \-n kube-system \--type merge \-p '{"data":{"enable-windows-ipam":"false"}}'

Implementazione di pod

Quando si implementano i pod nel cluster, è necessario specificare il sistema operativo utilizzato se si esegue una combinazione di tipi di nodi.

Per i pods Linux, utilizza il seguente testo del selettore dei nodi nei manifesti.

nodeSelector: kubernetes.io/os: linux kubernetes.io/arch: amd64

Per i pods Windows, utilizza il seguente testo del selettore dei nodi nei manifesti.

nodeSelector: kubernetes.io/os: windows kubernetes.io/arch: amd64

È possibile implementare un'applicazione di esempio per vedere i selettori dei nodi in uso.

Abilitazione del supporto Windows legacy

Se il cluster non corrisponde a una delle versioni Kubernetes e della piattaforma elencate nei Prerequisiti o a una versione successiva, consigliamo di abilitare il supporto Windows sul piano di controllo. Per ulteriori informazioni, consultare Abilitazione del supporto Windows.

I passaggi seguenti consentono di abilitare il supporto Windows legacy per il piano dati del cluster Amazon EKS se la versione del cluster o della piattaforma è precedente alle versioni elencate nei Prerequisiti. Una volta che la versione del cluster e della piattaforma corrispondono a una versione elencata nei Prerequisiti o a una versione successiva, ti consigliamo di rimuovere il supporto Windows legacy e di abilitarlo per il tuo piano di controllo.

Puoi utilizzare eksctl, un client Windows o un client macOS o Linux per abilitare il supporto Windows legacy per il cluster.

eksctl

Abilitazione del supporto Windows legacy per il cluster con eksctl

Prerequisito

Questa procedura richiede eksctl versione 0.117.0 o versione successiva. È possibile verificare la versione con il seguente comando.

eksctl version

Per ulteriori informazioni sull'installazione o l'aggiornamento di eksctl, consultare Installazione o aggiornamento di eksctl.

  1. Abilita il supporto Windows per il tuo cluster Amazon EKS con il seguente comando eksctl. Sostituisci my-cluster con il nome del cluster. Questo comando distribuisce il controller delle risorse VPC e il webhook del controller di ammissione VPC richiesti sui cluster Amazon EKS per eseguire i carichi di lavoro di Windows.

    eksctl utils install-vpc-controllers --cluster my-cluster --approve
    Importante

    Il webhook del controller di ammissione VPC è firmato con un certificato con scadenza ad un anno dopo la data di rilascio. Per evitare tempi di inattività, assicurarsi di rinnovare il certificato prima della scadenza. Per ulteriori informazioni, consultare Rinnovo del certificato webhook di ammissione VPC.

  2. Dopo aver attivato il supporto Windows, potrai avviare un gruppo di nodi Windows nel cluster. Per ulteriori informazioni, consultare Avvio dei nodi Windows autogestiti.

Windows

Abilitazione del supporto Windows legacy per il cluster con un client Windows

Nella procedura seguente, sostituisci region-code con la Regione AWS in cui si trova il cluster.

  1. Implementare il controller di risorse VPC nel cluster.

    kubectl apply -f https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-resource-controller/latest/vpc-resource-controller.yaml
  2. Implementare il webhook del controller di ammissione VPC nel cluster.

    1. Scaricare gli script e i file di implementazione richiesti.

      curl -o vpc-admission-webhook-deployment.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/vpc-admission-webhook-deployment.yaml; curl -o Setup-VPCAdmissionWebhook.ps1 https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/Setup-VPCAdmissionWebhook.ps1; curl -o webhook-create-signed-cert.ps1 https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/webhook-create-signed-cert.ps1; curl -o webhook-patch-ca-bundle.ps1 https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/webhook-patch-ca-bundle.ps1;
    2. Installare OpenSSL e jq.

    3. Configurare e implementare il webhook di ammissione VPC.

      ./Setup-VPCAdmissionWebhook.ps1 -DeploymentTemplate ".\vpc-admission-webhook-deployment.yaml"
      Importante

      Il webhook del controller di ammissione VPC è firmato con un certificato con scadenza ad un anno dopo la data di rilascio. Per evitare tempi di inattività, assicurarsi di rinnovare il certificato prima della scadenza. Per ulteriori informazioni, consultare Rinnovo del certificato webhook di ammissione VPC.

  3. Determinare se il cluster dispone dell'associazione di ruolo del cluster richiesta.

    kubectl get clusterrolebinding eks:kube-proxy-windows

    Se viene restituito un output simile a quello del seguente esempio, il cluster dispone dell'associazione di ruolo necessaria.

    NAME                      AGE
    eks:kube-proxy-windows    10d

    Se l'output include Error from server (NotFound), il cluster non dispone dell'associazione di ruolo richiesta. Aggiungere l'associazione creando un file denominato eks-kube-proxy-windows-crb.yaml con il seguente contenuto.

    kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: eks:kube-proxy-windows labels: k8s-app: kube-proxy eks.amazonaws.com/component: kube-proxy subjects: - kind: Group name: "eks:kube-proxy-windows" roleRef: kind: ClusterRole name: system:node-proxier apiGroup: rbac.authorization.k8s.io

    Applicare la configurazione al cluster.

    kubectl apply -f eks-kube-proxy-windows-crb.yaml
  4. Dopo aver attivato il supporto Windows, potrai avviare un gruppo di nodi Windows nel cluster. Per ulteriori informazioni, consultare Avvio dei nodi Windows autogestiti.

macOS and Linux

Abilitazione del supporto Windows legacy per il cluster con un client macOS o Linux

Questa procedura richiede che la libreria openssl e il processore JSON jq siano installati sul sistema client.

Nella procedura seguente, sostituisci region-code con la Regione AWS in cui si trova il cluster.

  1. Implementare il controller di risorse VPC nel cluster.

    kubectl apply -f https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-resource-controller/latest/vpc-resource-controller.yaml
  2. Creare il manifesto del webhook del controller di ammissione VPC per il cluster.

    1. Scaricare gli script e i file di implementazione richiesti.

      curl -o webhook-create-signed-cert.sh https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/webhook-create-signed-cert.sh curl -o webhook-patch-ca-bundle.sh https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/webhook-patch-ca-bundle.sh curl -o vpc-admission-webhook-deployment.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/vpc-admission-webhook-deployment.yaml
    2. Aggiungere le autorizzazioni agli script della shell in modo che possano essere eseguiti.

      chmod +x webhook-create-signed-cert.sh webhook-patch-ca-bundle.sh
    3. Creare un segreto per una comunicazione protetta.

      ./webhook-create-signed-cert.sh
    4. Verificare il segreto.

      kubectl get secret -n kube-system vpc-admission-webhook-certs
    5. Configurare il webhook e creare un file di implementazione.

      cat ./vpc-admission-webhook-deployment.yaml | ./webhook-patch-ca-bundle.sh > vpc-admission-webhook.yaml
  3. Implementare il webhook di ammissione VPC.

    kubectl apply -f vpc-admission-webhook.yaml
    Importante

    Il webhook del controller di ammissione VPC è firmato con un certificato con scadenza ad un anno dopo la data di rilascio. Per evitare tempi di inattività, assicurarsi di rinnovare il certificato prima della scadenza. Per ulteriori informazioni, consultare Rinnovo del certificato webhook di ammissione VPC.

  4. Determinare se il cluster dispone dell'associazione di ruolo del cluster richiesta.

    kubectl get clusterrolebinding eks:kube-proxy-windows

    Se viene restituito un output simile a quello del seguente esempio, il cluster dispone dell'associazione di ruolo necessaria.

    NAME                     ROLE                              AGE
    eks:kube-proxy-windows   ClusterRole/system:node-proxier   19h

    Se l'output include Error from server (NotFound), il cluster non dispone dell'associazione di ruolo richiesta. Aggiungere l'associazione creando un file denominato eks-kube-proxy-windows-crb.yaml con il seguente contenuto.

    kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: eks:kube-proxy-windows labels: k8s-app: kube-proxy eks.amazonaws.com/component: kube-proxy subjects: - kind: Group name: "eks:kube-proxy-windows" roleRef: kind: ClusterRole name: system:node-proxier apiGroup: rbac.authorization.k8s.io

    Applicare la configurazione al cluster.

    kubectl apply -f eks-kube-proxy-windows-crb.yaml
  5. Dopo aver attivato il supporto Windows, potrai avviare un gruppo di nodi Windows nel cluster. Per ulteriori informazioni, consultare Avvio dei nodi Windows autogestiti.

Rinnovo del certificato webhook di ammissione VPC

Il certificato utilizzato dal webhook di ammissione VPC scade un anno dopo il rilascio. Per evitare tempi di inattività, è importante rinnovare il certificato prima della scadenza. È possibile verificare la data di scadenza del certificato corrente con il seguente comando.

kubectl get secret \ -n kube-system \ vpc-admission-webhook-certs -o json | \ jq -r '.data."cert.pem"' | \ base64 -decode | \ openssl x509 \ -noout \ -enddate | \ cut -d= -f2

Di seguito è riportato l'output di esempio.

May 28 14:23:00 2022 GMT

Puoi rinnovare il certificato utilizzando eksctl o un computer Windows o un Linux/macOS. Seguire le istruzioni per lo strumento utilizzato originariamente per installare il webhook di ammissione VPC. Ad esempio, se in origine è stato installato il webhook di ammissione VPC utilizzando eksctl, è necessario rinnovare il certificato utilizzando le istruzioni riportate nella scheda eksctl.

eksctl
  1. Installare nuovamente il certificato. Sostituisci my-cluster con il nome del cluster.

    eksctl utils install-vpc-controllers -cluster my-cluster -approve
  2. Verificare di ricevere l'output riportato di seguito.

    2021/05/28 05:24:59 [INFO] generate received request 2021/05/28 05:24:59 [INFO] received CSR 2021/05/28 05:24:59 [INFO] generating key: rsa-2048 2021/05/28 05:24:59 [INFO] encoded CSR
  3. Riavviare l'implementazione webhook.

    kubectl rollout restart deployment -n kube-system vpc-admission-webhook
  4. Se il certificato che hai rinnovato è scaduto e hai pods Windows bloccati nello stato Container creating, allora dovrai eliminare e implementare nuovamente quei pods.

Windows
  1. Ottenere lo script per generare un nuovo certificato.

    curl -o webhook-create-signed-cert.ps1 https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/webhook-create-signed-cert.ps1;
  2. Preparare il parametro per lo script.

    ./webhook-create-signed-cert.ps1 -ServiceName vpc-admission-webhook-svc -SecretName vpc-admission-webhook-certs -Namespace kube-system
  3. Riavviare l'implementazione webhook.

    kubectl rollout restart deployment -n kube-system vpc-admission-webhook-deployment
  4. Se il certificato che hai rinnovato è scaduto e hai pods Windows bloccati nello stato Container creating, allora dovrai eliminare e implementare nuovamente quei pods.

Linux and macOS

Prerequisito

È necessario avere installato OpenSSL e jq sul computer.

  1. Ottenere lo script per generare un nuovo certificato.

    curl -o webhook-create-signed-cert.sh \ https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/region-code/vpc-admission-webhook/latest/webhook-create-signed-cert.sh
  2. Modificare le autorizzazioni.

    chmod +x webhook-create-signed-cert.sh
  3. Eseguire lo script.

    ./webhook-create-signed-cert.sh
  4. Riavviare il webhook.

    kubectl rollout restart deployment -n kube-system vpc-admission-webhook-deployment
  5. Se il certificato che hai rinnovato è scaduto e hai pods Windows bloccati nello stato Container creating, allora dovrai eliminare e implementare nuovamente quei pods.