Implementazione di un cluster Amazon EKS su AWS Outposts - Amazon EKS

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.

Implementazione di un cluster Amazon EKS su AWS Outposts

Questo argomento offre una panoramica degli elementi da prendere in considerazione quando si esegue un cluster locale su un Outpost. L'argomento fornisce anche istruzioni su come implementare un cluster locale su un Outpost.

Importante
  • Queste considerazioni non sono trattate nella documentazione correlata di Amazon EKS. Se altri argomenti della documentazione di Amazon EKS sono in conflitto con le considerazioni qui riportate, segui le considerazioni qui.

  • Queste considerazioni sono soggette a modifiche e potrebbero cambiare frequentemente. Pertanto, ti consigliamo di rivedere regolarmente questo argomento.

  • Molte delle considerazioni sono diverse da quelle relative alla creazione di un cluster sul cloud AWS.

  • I cluster locali supportano solo i rack dell'Outpost. Un singolo cluster locale può essere eseguito su più dell'Outpost fisici che comprendono un unico Outpost logico. Un singolo cluster locale non può essere eseguito su più Outpost logici. Ogni Outpost logico ha un singolo ARN dell'Outpost.

  • I cluster locali eseguono e gestiscono il piano di controllo (control-plane) di Kubernetes nel tuo account sull’Outpost. Non puoi eseguire carichi di lavoro sulle istanze del piano di controllo (control-plane) di Kubernetes né modificare i relativi componenti. Questi nodi sono gestiti dal servizio Amazon EKS. Le modifiche al piano di controllo (control-plane) di Kubernetes non persistono tra un’operazione di gestione automatica di Amazon EKS e l’altra, come l’applicazione di patch.

  • I cluster locali supportano i componenti aggiuntivi autogestiti e i gruppi di nodi Amazon Linux autogestiti. I componenti aggiuntivi: plug-in per la Container Network Interface (CNI) di Amazon VPC per Kubernetes, kube-proxy e CoreDNS vengono installati automaticamente nei cluster locali.

  • I cluster locali richiedono l'utilizzo di Amazon EBS su Outposts. Il tuo Outpost deve avere a disposizione Amazon EBS per l’archiviazione del piano di controllo (control-plane) di Kubernetes. Gli Outpost supportano solo i volumi gp2 di Amazon EBS.

  • I PersistentVolumes Kubernetes sostenuti da Amazon EBS sono supportati tramite il driver CSI per Amazon EBS.

  • Le istanze del piano di controllo (control-plane) dei cluster locali sono configurate in una topologia in stack ad alta disponibilità. Due delle tre istanze del piano di controllo (control-plane) devono essere sempre integre per mantenere il quorum. Se il quorum viene perso, contatta il Supporto AWS, poiché saranno necessarie alcune azioni sul lato del servizio per abilitare le nuove istanze gestite.

Prerequisiti

Quando viene creato un cluster Amazon EKS locale, il principale IAM che crea il cluster viene aggiunto in modo permanente. Il principale viene aggiunto specificamente alla tabella di autorizzazione RBAC Kubernetes come amministratore. Questa entità dispone di autorizzazioni system:masters. L’identità di questa entità non è visibile nella configurazione del cluster, per cui è fondamentale prendere nota dell’entità che ha creato il cluster, in modo da non eliminarla. Inizialmente, solo il principale che ha creato il server può effettuare chiamate al server API Kubernetes utilizzando kubectl. Se utilizzi la console per creare il cluster, dovrai assicurarti che le stesse credenziali IAM siano presenti nella catena di credenziali SDK AWS quando si eseguono i comandi kubectl sul cluster. Dopo aver creato il cluster, è possibile concedere l'accesso ad altri principali IAM al cluster.

Creazione di un cluster locale Amazon EKS.

Puoi creare un cluster locale con i seguenti strumenti descritti in questa pagina:

Puoi anche utilizzare l’AWS CLI, l’API Amazon EKS, gli SDK AWS, AWS CloudFormation o Terraform per creare cluster su Outposts.

eksctl

Per creare un cluster con eksctl

  1. Installa la versione 0.214.0 o successiva dello strumento a riga di comando eksctl sul dispositivo o in AWS CloudShell. Per l'installazione o l'aggiornamento di eksctl, consulta la sezione Installation nella documentazione di eksctl.

  2. Copia i seguenti contenuti sul tuo dispositivo. Sostituisci i valori seguenti, quindi esegui il comando modificato per creare il file outpost-control-plane.yaml:

    • Sostituisci region-code con la Regione AWS supportata in cui desideri creare il cluster.

    • Sostituisci my-cluster con il nome del 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 stai creando il cluster. Il nome deve essere univoco all’interno della Regione AWS e dell’account AWS in cui stai creando il cluster.

    • Sostituisci vpc-ExampleID1 e subnet-ExampleID1 con gli ID del tuo VPC e della tua sottorete esistenti. Il VPC e la sottorete devono soddisfare i requisiti in Create a VPC and subnets for Amazon EKS clusters on AWS Outposts.

    • Sostituisci uniqueid con l'ID del tuo Outpost.

    • Sostituisci m5.large con un tipo di istanza disponibile sul tuo Outpost. Prima di scegliere un tipo di istanza, consulta la sezione Selezione dei tipi di istanze e dei gruppi di posizionamento per i cluster Amazon EKS su AWS Outposts in base alle considerazioni sulla capacità. Vengono implementate tre istanze del piano di controllo. Questo numero non può essere modificato.

      cat >outpost-control-plane.yaml <<EOF apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "1.33" vpc: clusterEndpoints: privateAccess: true id: "vpc-vpc-ExampleID1" subnets: private: outpost-subnet-1: id: "subnet-subnet-ExampleID1" outpost: controlPlaneOutpostARN: arn:aws:outposts:region-code:111122223333:outpost/op-uniqueid controlPlaneInstanceType: m5.large EOF

      Per un elenco completo di tutte le opzioni disponibili, consulta AWS Outposts Support e Config file schema nella documentazione di eksctl.

  3. Crea il cluster utilizzando il file di configurazione creato nel passaggio precedente. eksctl crea un VPC e una sottorete sul tuo Outpost in cui implementare il cluster.

    eksctl create cluster -f outpost-control-plane.yaml

    Il provisioning del cluster richiede diversi minuti. Durante la creazione del cluster, vengono visualizzate diverse righe di output. L'ultima riga di output è simile alla seguente riga di esempio.

    [✓] EKS cluster "my-cluster" in "region-code" region is ready
    Suggerimento

    Per visualizzare la maggior parte delle opzioni che è possibile specificare durante la creazione di un cluster con eksctl, utilizza il comando eksctl create cluster --help. Per visualizzare tutte le opzioni disponibili, puoi utilizzare un file config. Per ulteriori informazioni, consulta Uso dei file config e lo Schema dei file config nella documentazione di eksctl. Gli esempi di file di configurazione sono disponibili su GitHub.

    Il comando eksctl ha creato automaticamente una voce di accesso per il principale IAM (utente o ruolo) che ha creato il cluster e ha concesso a quest’ultimo autorizzazioni di amministratore per gli oggetti Kubernetes sul cluster. Se non desideri che il creatore del cluster disponga di un accesso di amministratore agli oggetti Kubernetes sul cluster, aggiungi il seguente testo al file di configurazione precedente: bootstrapClusterCreatorAdminPermissions: false (allo stesso livello di metadata, vpc e outpost). Se hai aggiunto l’opzione, dopo la creazione del cluster devi creare una voce di accesso per almeno un principale IAM, altrimenti nessun principale IAM avrà accesso agli oggetti Kubernetes sul cluster.

Console di gestione AWS

Per creare il cluster con la Console di gestione AWS

  1. Hai bisogno di un VPC e una sottorete esistenti che soddisfano i requisiti di Amazon EKS. Per ulteriori informazioni, consulta Creazione di VPC e sottoreti per i cluster Amazon EKS su AWS Outposts.

  2. Se disponi già di un ruolo IAM del cluster locale o intendi creare il cluster con eksctl, puoi ignorare questo passaggio. Per impostazione predefinita, eksctl crea un ruolo per te.

    1. Per creare un file JSON della policy di attendibilità IAM, esegui il comando seguente.

      cat >eks-local-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    2. Crea il ruolo IAM del cluster Amazon EKS. Per creare un ruolo IAM, è necessario assegnare l'azione iam:CreateRole (autorizzazione) al principale IAM che sta creando il ruolo.

      aws iam create-role --role-name myAmazonEKSLocalClusterRole --assume-role-policy-document file://"eks-local-cluster-role-trust-policy.json"
    3. Collega la policy gestita da Amazon EKS AmazonEKSLocalOutpostClusterPolicy 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:AttachUserPolicy o iam:AttachRolePolicy.

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSLocalOutpostClusterPolicy --role-name myAmazonEKSLocalClusterRole
  3. Aprire la Console Amazon EKS.

  4. Nella parte superiore dello schermo della console, assicurati di avere selezionato una Regione AWS supportata.

  5. Seleziona Aggiungi cluster e quindi Crea.

  6. Nella pagina Configure cluster (Configura cluster), inserisci o seleziona i valori per i campi seguenti:

    • Posizione del piano di controllo (control-plane) di Kubernetes: scegli AWS Outposts.

    • Outpost ID (ID Outpost): scegli l'ID dell'Outpost su cui vuoi creare il tuo piano di controllo.

    • Instance type (Tipo di istanza): seleziona un tipo di istanza. Vengono visualizzati solo i tipi di istanza disponibili nel tuo Outpost. Nell'elenco a discesa, ogni tipo di istanza descrive per quanti nodi è consigliato il tipo di istanza. Prima di scegliere un tipo di istanza, consulta la sezione Selezione dei tipi di istanze e dei gruppi di posizionamento per i cluster Amazon EKS su AWS Outposts in base alle considerazioni sulla capacità. Tutte le repliche vengono implementate utilizzando lo stesso tipo di istanza. Non è possibile modificare il tipo di istanza dopo la creazione del cluster. Vengono implementate tre istanze del piano di controllo. Questo numero non può essere modificato.

    • Nome: un nome per il cluster. Deve essere univoco all'interno dell'account AWS. 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 stai creando il cluster. Il nome deve essere univoco all’interno della Regione AWS e dell’account AWS in cui stai creando il cluster.

    • Versione Kubernetes: scegli la versione di Kubernetes da utilizzare per il cluster. È preferibile selezionare la versione più recente, a meno che non occorra utilizzare una versione precedente.

    • Ruolo di servizio del cluster: scegli il ruolo IAM del cluster Amazon EKS creato in un passaggio precedente per consentire al piano di controllo (control-plane) di Kubernetes di gestire le risorse AWS.

    • Accesso di amministratore del cluster Kubernetes: se desideri che il principale IAM (ruolo o utente) che crea il cluster disponga dell’accesso di amministratore agli oggetti Kubernetes sul cluster, accetta l’impostazione predefinita (Consenti). Amazon EKS crea una voce di accesso per il principale IAM e concede le autorizzazioni di amministratore del cluster per la voce di accesso. Per ulteriori informazioni sulle voci di accesso, consulta la sezione Concedere agli utenti IAM l’accesso a Kubernetes con le voci di accesso EKS.

      Se desideri che un principale IAM diverso da quello che crea il cluster disponga dell’accesso di amministratore agli oggetti del cluster Kubernetes, scegli l’opzione Non consentire. Dopo la creazione del cluster, qualsiasi principale IAM che disponga delle autorizzazioni IAM per creare voci di accesso può aggiungerne una per tutti i principali IAM che necessitano dell’accesso agli oggetti del cluster Kubernetes. Per ulteriori informazioni sulle autorizzazioni IAM richieste, consulta Actions defined by Amazon Elastic Kubernetes Service nella Documentazione di riferimento per l'autorizzazione ai servizi. Se scegli l’opzione Non consentire e non crei alcuna voce di accesso, nessun principale IAM avrà accesso agli oggetti Kubernetes sul cluster.

    • Tag (Facoltativo): aggiunge eventuali tag al cluster. Per ulteriori informazioni, consulta Organizzazione delle risorse Amazon EKS con tag. Quando hai finito con questa pagina, seleziona Avanti.

  7. Nella pagina Specifica reti, seleziona i valori dei campi riportati di seguito:

    • VPC: scegli un VPC esistente. Il VPC deve disporre di un numero sufficiente di indirizzi IP da mettere a disposizione per il cluster, i nodi e le altre risorse Kubernetes da creare. Il VPC deve soddisfare i requisiti elencati in VPC requirements and considerations.

    • Sottoreti: per impostazione predefinita, tutte le sottoreti disponibili nel VPC specificato nel campo precedente sono preselezionate. Le sottoreti scelte devono soddisfare i requisiti elencati in Subnet requirements and considerations.

    • Gruppi di sicurezza: (facoltativo) specifica uno o più gruppi di sicurezza da associare alle interfacce di rete create da Amazon EKS. Amazon EKS crea automaticamente un gruppo di sicurezza che consente la comunicazione tra il cluster e il VPC. Amazon EKS associa questo gruppo di sicurezza, e altri gruppi eventualmente scelti dall'utente, alle interfacce di rete create. Per ulteriori informazioni sul gruppo di sicurezza del cluster creato da Amazon EKS, consulta Visualizzazione dei requisiti relativi al gruppo di sicurezza Amazon EKS per cluster. Puoi modificare le regole nel gruppo di sicurezza del cluster creato da Amazon EKS. Se vuoi aggiungere i tuoi gruppi di sicurezza, non potrai modificare i gruppi scelti dopo la creazione del cluster. Per consentire agli host on-premise di comunicare con l'endpoint del cluster, è necessario consentire il traffico in entrata dal gruppo di sicurezza del cluster. Per i cluster che non dispongono di una connessione internet in ingresso e in uscita (noti anche come cluster privati), è necessario effettuare una delle seguenti operazioni:

      • Aggiungi il gruppo di sicurezza associato agli endpoint VPC richiesti. Per ulteriori informazioni sugli endpoint richiesti, consulta Utilizzo di endpoint VPC dell'interfaccia in Subnet access to AWS services.

      • Modifica il gruppo di sicurezza creato da Amazon EKS per consentire il traffico proveniente dal gruppo di sicurezza associato agli endpoint VPC. Quando hai finito con questa pagina, seleziona Avanti.

  8. Nella pagina Configura osservabilità, puoi scegliere facoltativamente le opzioni Parametri e Registrazione del piano di controllo che desideri attivare. Per impostazione predefinita, i tipi di log sono disattivati.

  9. Nella pagina Rivedi e crea, controlla le informazioni che hai inserito o selezionato nelle pagine precedenti. Se devi apportare modifiche, seleziona Edit (Modifica). Al termine della configurazione, seleziona Crea. Durante il provisioning del cluster, nel campo Stato viene visualizzato il messaggio CREAZIONE.

    Il provisioning del cluster richiede diversi minuti.

Visualizzazione del cluster locale Amazon EKS

  1. Dopo avere creato il cluster, puoi visualizzare le istanze del piano di controllo Amazon EC2 che sono state create.

    aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Name:Tags[?Key==`Name`]|[0].Value}' | grep my-cluster-control-plane

    Di seguito viene riportato un output di esempio:

    "Name": "my-cluster-control-plane-id1" "Name": "my-cluster-control-plane-id2" "Name": "my-cluster-control-plane-id3"

    Ogni istanza è contaminata dal taint node-role.eks-local.amazonaws.com/control-plane per evitare che i carichi di lavoro vengano pianificati sulle istanze del piano di controllo. Per ulteriori informazioni sui taint, consulta Taints and Tolerations nella documentazione di Kubernetes. Amazon EKS monitora continuamente lo stato dei cluster locali. Eseguiamo operazioni di gestione automatiche, come applicazioni di patch di sicurezza e riparazioni di istanze non integre. Quando i cluster locali vengono disconnessi dal cloud, eseguiamo una serie di operazioni per garantire che il cluster venga ripristinato a uno stato di integrità al momento della riconnessione.

  2. Se hai creato il cluster utilizzando eksctl, puoi ignorare questo passaggio. eksctl lo completerà automaticamente per tuo conto. Abilita kubectl per consentire la comunicazione con il cluster aggiungendo un nuovo contesto al file config kubectl. Per istruzioni su come creare e aggiornare il file, consulta Connettere kubectl a un cluster EKS creando un file kubeconfig.

    aws eks update-kubeconfig --region region-code --name my-cluster

    Di seguito viene riportato un output di esempio:

    Added new context arn:aws:eks:region-code:111122223333:cluster/my-cluster to /home/username/.kube/config
  3. Per connetterti al server API Kubernetes del cluster locale, devi disporre dell’accesso al gateway locale per la sottorete o connetterti dall’interno del VPC. Per ulteriori informazioni sulla connessione di un rack dell’Outpost alla rete on-premises, consulta How local gateways for racks work nella Guida per l’utente di AWS Outposts. Se utilizzi l’instradamento VPC diretto e la sottorete dell’Outpost ha un instradamento al gateway locale, gli indirizzi IP privati delle istanze del piano di controllo (control-plane) di Kubernetes vengono trasmessi automaticamente sulla rete locale. L’endpoint del server API Kubernetes del server locale è ospitato in Amazon Route 53 (Route 53). L'endpoint del servizio API può essere risolto dai server DNS pubblici negli indirizzi IP privati dei server dell'API Kubernetes.

    Le istanze del piano di controllo (control-plane) di Kubernetes dei cluster locali sono configurate con interfacce di rete elastiche statiche con indirizzi IP privati fissi che non cambiano durante il ciclo di vita del cluster. Le macchine che interagiscono con il server API Kubernetes potrebbero non avere connettività a Route 53 durante le disconnessioni di rete. In tal caso, si consiglia di configurare /etc/hosts con gli indirizzi IP privati statici per continuare le operazioni. Ti consigliamo inoltre di configurare i server DNS locali e di collegarli al tuo Outpost. Per ulteriori informazioni, consulta la documentazione di AWS Outposts. Esegui il comando riportato per confermare che è stata stabilita la comunicazione con il cluster.

    kubectl get svc

    Di seguito viene riportato un output di esempio:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
  4. (Facoltativo) Verifica l’autenticazione al cluster locale quando è disconnesso dal cloud AWS. Per istruzioni, consultare Preparazione di cluster Amazon EKS locali su AWS Outposts per le disconnessioni di rete.

Risorse interne

Amazon EKS crea le seguenti risorse sul tuo cluster. Le risorse sono destinate all'uso interno di Amazon EKS. Per garantire il corretto funzionamento del cluster, non modificare o alterare queste risorse.

  • I seguenti pod mirror:

    • aws-iam-authenticator-node-hostname

    • eks-certificates-controller-node-hostname

    • etcd-node-hostname

    • kube-apiserver-node-hostname

    • kube-controller-manager-node-hostname

    • kube-scheduler-node-hostname

  • I seguenti componenti aggiuntivi autogestiti:

    • kube-system/coredns

    • kube-system/ kube-proxy (non viene creato finché non aggiungi il primo nodo)

    • kube-system/aws-node (non viene creato finché non si aggiunge il primo nodo). I cluster locali utilizzano il plug-in per la CNI di Amazon VPC per Kubernetes per le reti di cluster. Non modificare la configurazione per le istanze del piano di controllo (pod denominati aws-node-controlplane-*). Ci sono variabili di configurazione che consentono di modificare il valore predefinito quando il plugin crea nuove interfacce di rete. Per ulteriori informazioni, consulta la documentazione su GitHub.

  • I seguenti servizi:

    • default/kubernetes

    • kube-system/kube-dns

  • Una PodSecurityPolicy denominata eks.system

  • Una ClusterRole denominata eks:system:podsecuritypolicy

  • Una ClusterRoleBinding denominata eks:system

  • Oltre al gruppo di sicurezza del cluster, Amazon EKS crea un gruppo di sicurezza nell’account AWS denominato eks-local-internal-do-not-use-or-edit-cluster-name-uniqueid . Questo gruppo di sicurezza consente al traffico di fluire liberamente tra i componenti Kubernetes in esecuzione sulle istanze del piano di controllo (control-plane).

Fasi successive consigliate: