Come posso configurare un Application Load Balancer utilizzando AWS Load Balancer Controller su un gruppo di nodi Amazon EC2 in Amazon EKS?

6 minuti di lettura
0

Voglio configurare un Application Load Balancer utilizzando AWS Load Balancer Controller su un gruppo di nodi Amazon Elastic Compute Cloud (Amazon EC2) in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

I seguenti passaggi mostrano come implementare Application Load Balancer utilizzando AWS Load Balancer Controller su un gruppo di nodi Amazon EC2 con Amazon EKS. Per creare un Network Load Balancer, consulta AWS Load Balancer Controller.

AWS Load Balancer Controller deve essere collegato a un endpoint del servizio AWS, come AWS Identity and Access Management (IAM), EC2, AWS Certificate Manager (ACM), Elastic Load Balancing, Amazon Cognito, AWS WAF o AWS Shield. Pertanto, è necessario disporre di un collegamento Internet in uscita per il funzionamento di AWS Load Balancer Controller. Per ulteriori informazioni, consulta Come posso configurare le sottoreti per un cluster Amazon EKS?

Per implementare AWS Load Balancer Controller su AWS Fargate, consulta Come posso configurare AWS Load Balancer Controller su un cluster Amazon EKS per Fargate e implementare il gioco 2048?

Risoluzione

Etichetta le sottoreti per consentire il rilevamento automatico

Etichetta le sottoreti Amazon VPC nel cluster Amazon EKS in modo da consentire a AWS Load Balancer Controller di rilevare in modo automatico le sottoreti quando viene creata la risorsa Application Load Balancer.

Per gli Application Load Balancer pubblici, è necessario disporre di almeno due sottoreti pubbliche nel VPC del cluster con i seguenti tag:

kubernetes.io/role/elb

Per gli Application Load Balancer interni, è necessario disporre di almeno due sottoreti private nel VPC del cluster con i seguenti tag:

kubernetes.io/role/internal-elb

Nota: In caso di errori durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente dell'interfaccia AWS CLI.

Crea un provider di identità OIDC per il cluster

Per creare un provider di identità OpenID Connect (OIDC) per il cluster da utilizzare con i ruoli AWS Identity and Access Management (IAM) per gli account di servizio, usa eksctl o la Console di gestione AWS.

È possibile anche utilizzare l'interfaccia AWSL CLI per creare un provider di identità OIDC per il cluster. Ad esempio:

ISSUER_URL=$(aws eks describe-cluster --name cluster-name \
  --query "cluster.identity.oidc.issuer" --region region-name --output text)
aws iam create-open-id-connect-provider \
  --url ${ISSUER_URL} \
  --thumbprint-list ca-thumbprint \
  --client-id-list sts.amazonaws.com \
  --region region-name

Nota: Sostituisci cluster-name con il nome del cluster, region-name con la regione AWS e ca-thumbprint con l'identificazione personale del certificato di CA root. Puoi ottenere l'identificazione personale del certificato di CA root utilizzata dal cluster con oidc.eks.region-name.amazonaws.com.

Crea una policy IAM per AWS Load Balancer Controller

La policy Amazon EKS creata consente a AWS Load Balancer Controller di effettuare chiamate alle API AWS per tuo conto. È consigliabile utilizzare i ruoli IAM AWS per gli account di servizio quando concedi l'accesso alle API AWS.

1.    Per scaricare un documento della policy IAM per AWS Load Balancer Controller da AWS GitHub, esegui uno dei seguenti comandi in base alla regione.

Tutte le regioni esclusa la Cina:

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

-oppure-

Regioni di Pechino e Ningxia in Cina:

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json

2.    Per creare una policy IAM denominata AWSLoadBalancerControllerIAMPolicy per il profilo dell’istanza del nodo worker, esegui il seguente comando:

aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam-policy.json

3.    Annota il nome della risorsa Amazon (ARN) della policy che viene restituito nell'output del passaggio 2.

4.    Usa il ruolo IAM esistente o crea un nuovo ruolo IAM per AWS Load Balancer Controller.

Suggerimento: Per creare un ruolo IAM con eksctl, usa il parametro --attach-policy-arn con l'ARN della policy IAM AWSLoadBalancerControllerIAMPolicy.

5.    Per collegare AWSLoadBalancerControllerIAMPolicy ai ruoli IAM identificati in precedenza, esegui il seguente comando:

aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--role-name role-name

Nota: Sostituisci 111122223333 con l'ID dell’account AWS e role-name con il nome del ruolo IAM.

Implementa AWS Load Balancer Controller

1.    Verifica di disporre dei tag richiesti per il sistema di bilanciamento del carico associato alle sottoreti.

2.    Installa cert-manager in modo da poter inserire la configurazione del certificato nei webhook.

Per Kubernetes 1.16 o versione successiva:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml

Per Kubernetes 1.15 o versioni precedenti:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager-legacy.yaml

Nota: Sostituisci $VERSION con la versione (dal sito GitHub Jetstack, ad esempio 'v1.6.0') del gestore certificati che desideri distribuire.

3.    Nel file manifesto scaricato per AWS Load Balancer Controller da AWS GitHub, esegui il seguente comando:

curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_4_1_full.yaml

Nota: Sostituisci $VERSION con la versione (dal sito GitHub Kubernetes SIGs, ad esempio 'v2.4.1') dell’AWS Load Balancer Controller che desideri implementare.

4.    Modifica il cluster-name per il cluster. Ad esempio:

spec:
    containers:
    - args:
        - --cluster-name=your-cluster-name # edit the cluster name
        - --ingress-class=alb

5.    Aggiorna solo la sezione ServiceAccount del file. Ad esempio:

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/name: aws-load-balancer-controller
  annotations:                                                                        # Add the annotations line
    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/role-name              # Add the IAM role
  name: aws-load-balancer-controller
  namespace: kube-system

Nota: Sostituisci 111122223333 con l'ID dell’account AWS e role-name con il nome del ruolo IAM.

6.    Per implementare AWS Load Balancer Controller, esegui il seguente comando:

kubectl apply -f ingress-controller.yaml

Implementa un'applicazione di esempio per testare AWS Load Balancer Controller

Implementa un'applicazione di esempio per verificare che AWS Load Balancer Controller crei un Application Load Balancer pubblico legato all'oggetto Ingress.

1.    Per implementare un gioco chiamato 2048 come applicazione di esempio, esegui il seguente comando:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

Nota: Sostituisci $VERSION con la versione (dal sito GitHub Kubernetes SIGs, ad esempio 'v2.3.0') dell'AWS Load Balancer Controller che desideri implementare.

2.    Per verificare che la risorsa Ingress sia stata creata, attendi qualche minuto, quindi esegui il comando seguente:

kubectl get ingress/ingress-2048 -n game-2048

Riceverai un output simile al seguente:

NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGE
ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s

Se dopo diversi minuti Ingress non risulta ancora creato, esegui il seguente comando per visualizzare i log di AWS Load Balancer Controller:

kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller

Nota: I log di AWS Load Balancer Controller possono mostrare messaggi di errore che consentono di risolvere i problemi relativi alla distribuzione.

3.    Per visualizzare l'applicazione di esempio, apri un browser web e vai all'indirizzo URL dell'output nel passaggio 2.

4.    Per pulire l'applicazione di esempio, esegui il seguente comando:

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

Nota: Sostituisci $VERSION con la versione (dal sito GitHub Kubernetes SIGs, ad esempio 'v2.3.0') dell'AWS Load Balancer Controller che desideri implementare.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa