Instalación de AWS Load Balancer Controller con manifiestos - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Instalación de AWS Load Balancer Controller con manifiestos

En este tema, se describe cómo instalar el controlador mediante la descarga y la aplicación de los manifiestos de Kubernetes. Puede ver la documentación completa para el controlador en GitHub.

En los siguientes pasos, reemplace example values por sus propios valores.

Requisitos previos

Antes de comenzar este tutorial, debe instalar y configurar las siguientes herramientas y recursos que necesitará para crear y administrar un clúster de Amazon EKS.

Paso 1: configurar IAM

nota

Solo necesita crear un rol para el AWS Load Balancer Controller una vez por cada cuenta de AWS. Compruebe si AmazonEKSLoadBalancerControllerRole existe en la Consola de IAM. Si este rol existe, vaya a Paso 2: instalar el cert-manager.

Cree una política de IAM.
  1. Descargue una política de IAM para el AWS Load Balancer Controller que le permita realizar llamadas a las API de AWS en su nombre.

    AWS
    $ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy.json
    AWS GovCloud (US)
    $ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy_us-gov.json
    $ mv iam_policy_us-gov.json iam_policy.json
  2. Cree una política de IAM con la política descargada en el paso anterior.

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

    Si ve la política en la AWS Management Console, la consola muestra advertencias para el servicio ELB, pero no para el servicio ELB v2. Esto ocurre porque algunas de las acciones de la política existen para ELB v2, pero no para ELB. Puede obviar estas advertencias para ELB.

eksctl
Creación de un rol de IAM mediante eksctl
  • Reemplace my-cluster por el nombre de su clúster y 111122223333 con el ID de su cuenta y luego ejecute el comando. Si su clúster está en las Regiones de AWS GovCloud de AWS (EE. UU. Este) o GovCloud de AWS (EE. UU. Oeste), sustituya arn:aws: con arn:aws-us-gov:.

    $ eksctl create iamserviceaccount \ --cluster=my-cluster \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --role-name AmazonEKSLoadBalancerControllerRole \ --attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --approve
AWS CLI and kubectl
Creación de un rol de IAM mediante AWS CLI y kubectl
  1. Recupere el ID del proveedor de OIDC de su clúster y almacénelo en una variable.

    oidc_id=$(aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
  2. Determine si un proveedor de OIDC de IAM con el ID de su clúster ya está en su cuenta. Debe tener configurado OIDC tanto para el clúster como para IAM.

    aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4

    Si no se devuelve ninguna salida, debe contar con un proveedor de OIDC de IAM para su clúster. Si no se devuelve ninguna salida, debe crear un proveedor de OIDC de IAM para su clúster. Para obtener más información, consulte Creación de un proveedor de OIDC de IAM para su clúster.

  3. Copie los siguientes contenidos en su dispositivo. Reemplace 111122223333 por su ID de cuenta. Reemplace region-code por la Región de AWS en la que se encuentra el clúster. Reemplace EXAMPLED539D4633E53DE1B71EXAMPLE por los resultados que se devolvieron en el paso anterior. Si su clúster está en las Regiones de AWS GovCloud de AWS (EE. UU. Este) o GovCloud de AWS (EE. UU. Oeste), sustituya arn:aws: con arn:aws-us-gov:. Después de reemplazar el texto, ejecute el comando modificado para crear el archivo load-balancer-role-trust-policy.json.

    cat >load-balancer-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller" } } } ] } EOF
  4. Cree el rol de IAM.

    aws iam create-role \ --role-name AmazonEKSLoadBalancerControllerRole \ --assume-role-policy-document file://"load-balancer-role-trust-policy.json"
  5. Adjunte la política de IAM administrada por Amazon EKS requerida al rol de IAM. Reemplace 111122223333 por su ID de cuenta.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --role-name AmazonEKSLoadBalancerControllerRole
  6. Copie los siguientes contenidos en su dispositivo. Reemplace 111122223333 por su ID de cuenta. Si su clúster está en las Regiones de AWS AWS GovCloud (Este de EE. UU.) o AWS GovCloud (Oeste de EE. UU.), reemplace arn:aws: con arn:aws-us-gov:. Después de reemplazar el texto, ejecute el comando modificado para crear el archivo aws-load-balancer-controller-service-account.yaml.

    cat >aws-load-balancer-controller-service-account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKSLoadBalancerControllerRole EOF
  7. Cree la cuenta de servicio Kubernetes en el clúster. La cuenta de servicio de Kubernetes denominada aws-load-balancer-controller está anotado con el rol de IAM que creó con el nombre AmazonEKSLoadBalancerControllerRole.

    $ kubectl apply -f aws-load-balancer-controller-service-account.yaml

Paso 2: instalar el cert-manager

Instale el cert-manager con uno de los siguientes métodos para ingresar la configuración del certificado en los webhooks. Para obtener más información, consulte Introducción en la documentación de cert-manager.

Se recomienda utilizar el registro del contenedor quay.io para realizar la instalación de cert-manager. Si los nodos no tienen acceso al registro contenedor de quay.io, instale cert-manager mediante Amazon ECR (consulte a continuación).

Quay.io
Instalación de cert-manager usando Quay.io
  • Si los nodos tienen acceso al registro de contenedores de quay.io, instale el cert-manager para ingresar la configuración del certificado en los webhooks.

    $ kubectl apply \ --validate=false \ -f https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
Amazon ECR
Instalación de cert-manager mediante Amazon ECR
  1. Instale el cert-manager con uno de los siguientes métodos para ingresar la configuración del certificado en los webhooks. Para obtener más información, consulte Introducción en la documentación de cert-manager.

  2. Descargue el manifiesto.

    curl -Lo cert-manager.yaml https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
  3. Extraiga las siguientes imágenes y envíelas un repositorio al que tengan acceso sus nodos. Para obtener más información sobre cómo extraer, etiquetar y enviar las imágenes en su propio repositorio, consulte Copiar una imagen de contenedor de un repositorio en otro repositorio.

    quay.io/jetstack/cert-manager-cainjector:v1.13.5 quay.io/jetstack/cert-manager-controller:v1.13.5 quay.io/jetstack/cert-manager-webhook:v1.13.5
  4. Reemplace quay.io en el manifiesto de las tres imágenes por su propio nombre de registro. El siguiente comando supone que el nombre del repositorio privado es el mismo que el repositorio de origen. Reemplace 111122223333.dkr.ecr.region-code.amazonaws.com por su registro privado.

    $ sed -i.bak -e 's|quay.io|111122223333.dkr.ecr.region-code.amazonaws.com|' ./cert-manager.yaml
  5. Aplique el manifiesto.

    $ kubectl apply \ --validate=false \ -f ./cert-manager.yaml

Paso 3: instalar el AWS Load Balancer Controller

Instalación de AWS Load Balancer Controller mediante un manifiesto de Kubernetes
  1. Descargue la especificación del controlador. Para obtener más información sobre el controlador, consulte la documentación en GitHub.

    curl -Lo v2_7_2_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.7.2/v2_7_2_full.yaml
  2. Lleve a cabo las siguientes modificaciones en el archivo.

    1. Si ha descargado el archivo v2_7_2_full.yaml, ejecute el siguiente comando para eliminar la sección ServiceAccount del manifiesto. Si no elimina esta sección, se sobrescribirá la anotación obligatoria que hizo en la cuenta de servicio en un paso anterior. Al eliminar esta sección también conserva la cuenta de servicio que creó en un paso anterior si elimina el controlador.

      $ sed -i.bak -e '612,620d' ./v2_7_2_full.yaml

      Si ha descargado una versión de archivo diferente, abra el archivo en un editor y elimine las siguientes líneas.

      apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system ---
    2. Reemplace your-cluster-name en la sección Deployment spec del archivo por el nombre del clúster. Para ello, reemplace my-cluster por el nombre del clúster.

      $ sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_7_2_full.yaml
    3. Si los nodos no tienen acceso a los repositorios de imágenes de Amazon ECR de Amazon EKS, tiene que extraer la siguiente imagen y enviarla a un repositorio al que tengan acceso los nodos. Para obtener más información sobre cómo extraer, etiquetar y enviar una imagen a su propio repositorio, consulte Copiar una imagen de contenedor de un repositorio en otro repositorio.

      public.ecr.aws/eks/aws-load-balancer-controller:v2.7.2

      Agregue el nombre del registro al manifiesto. El siguiente comando supone que el nombre del repositorio privado es el mismo que el repositorio de origen y agrega el nombre del registro privado al archivo. Reemplace 111122223333.dkr.ecr.region-code.amazonaws.com por su registro. En esta línea se supone que ha asignado el mismo nombre al repositorio privado que al repositorio de origen. Si no es así, cambie el texto eks/aws-load-balancer-controller después del nombre del registro privado al nombre del repositorio.

      $ sed -i.bak -e 's|public.ecr.aws/eks/aws-load-balancer-controller|111122223333.dkr.ecr.region-code.amazonaws.com/eks/aws-load-balancer-controller|' ./v2_7_2_full.yaml
    4. (Necesario solo para IMDS restringido o Fargate)

      Si implementa el controlador en los nodos de Amazon EC2 que tienen acceso restringido al servicio de metadatos de la instancia de Amazon EC2 (IMDS), o si realiza la implementación en Fargate, agregue lo following parameters en - args:.

      [...] spec: containers: - args: - --cluster-name=your-cluster-name - --ingress-class=alb - --aws-vpc-id=vpc-xxxxxxxx - --aws-region=region-code [...]
  3. Aplique el archivo.

    $ kubectl apply -f v2_7_2_full.yaml
  4. Descargue el manifiesto IngressClass y IngressClassParams a su clúster.

    $ curl -Lo v2_7_2_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.7.2/v2_7_2_ingclass.yaml
  5. Aplique el manifiesto al clúster.

    $ kubectl apply -f v2_7_2_ingclass.yaml

Paso 4: verificar que el controlador se encuentre instalado

  1. Verifique que el controlador se encuentre instalado.

    $ kubectl get deployment -n kube-system aws-load-balancer-controller

    Un ejemplo de salida sería el siguiente.

    NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s

    Recibe la salida anterior si ha implementado mediante Helm. Si ha implementado utilizando el manifiesto de Kubernetes, solo tiene una réplica.

  2. Antes de utilizar el controlador para aprovisionar el recurso de AWS, el clúster debe cumplir requisitos específicos. Para obtener más información, consulte Dirección de la aplicación y el tráfico de HTTP con Application Load Balancers y Dirección del tráfico de TCP y UDP con Network Load Balancers.