Saltar al contenido

¿Cómo utilizo AWS Load Balancer Controller para configurar un equilibrador de carga de aplicación en un grupo de nodos de Amazon EC2 en Amazon EKS?

6 minutos de lectura
0

Quiero usar AWS Load Balancer Controller para configurar un equilibrador de carga de aplicación en un grupo de nodos de Amazon Elastic Compute Cloud (Amazon EC2) en Amazon Elastic Kubernetes Service (Amazon EKS).

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Requisito previo: Configura las subredes para permitir el acceso saliente a Internet desde tus nodos de trabajo. AWS Load Balancer Controller requiere una conexión a Internet saliente.

Para desplegar AWS Load Balancer Controller en AWS Fargate, consulta ¿Cómo puedo configurar AWS Load Balancer Controller en un clúster de Amazon EKS para Fargate?

Etiquetado de las subredes

Etiqueta las subredes de Amazon Virtual Private Cloud (Amazon VPC) de tu clúster de Amazon EKS. Después de etiquetar las subred, AWS Load Balancer Controller detecta automáticamente las subredes al crear el recurso de equilibrador de carga de aplicación.

En el caso de los equilibradores de carga de aplicación públicos, debes tener al menos dos subredes públicas en la VPC del clúster con la etiqueta kubernetes.io/role/elb.

En el caso de los equilibradores de carga de aplicación privados, debes tener al menos dos subredes privadas en la VPC del clúster con la etiqueta kubernetes.io/role/internal-elb.

Creación de un proveedor de identidades de OIDC

Utiliza la consola de Amazon EKS, la AWS CLI o eksctl para crear un proveedor de identidades de OIDC que pueda usarse con los roles de AWS Identity and Access Management (IAM) para cuentas de servicio (IRSA).

Consola de Amazon EKS

Para usar la consola, consulta Creación de un proveedor de OIDC (Consola de AWS).

AWS CLI

Busca la huella digital de la autoridad de certificación (CA) raíz que usa tu clúster. A continuación, ejecuta el siguiente comando create-open-id-connect-provider:

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: Sustituye cluster-name por el nombre de tu clúster, region-name por tu región de AWS y ca-thumbprint por la huella digital de tu certificado de CA raíz.

eksctl

Para usar la herramienta de la línea de comandos eksctl, consulta Creación de un proveedor de OIDC (eksctl).

Creación de una política de IAM

Crea una política de IAM que permita a AWS Load Balancer Controller realizar llamadas a las API de AWS.

Importante: Se recomienda usar IRSA al conceder acceso a las API de AWS.

Sigue estos pasos:

  1. Ejecuta uno de los siguientes comandos en función de tu región para descargar una política de IAM para AWS Load Balancer Controller desde GitHub.
    Para todas las regiones, excepto las regiones de China de Pekín y Ningxia, ejecuta el siguiente comando describe-cluster:

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

    Nota: Sustituye example-cluster-name por el nombre de tu clúster, example-region-name por tu región y example-issuer-url por la URL del emisor.
    Para las regiones de China de Pekín y Ningxia, ejecuta el siguiente comando curl:

    curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
  2. Ejecuta el siguiente comando create-policy para crear una política de IAM denominada AWSLoadBalancerControllerIAMPolicy para el perfil de instancia de tu nodo de trabajo:

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \    --policy-document file://iam-policy.json
  3. Anota el nombre de recurso de Amazon (ARN) de la política que devuelve el comando.

  4. Utiliza el rol de IAM existente o crea un nuevo rol de IAM para AWS Load Balancer Controller.
    Nota: Para crear un rol de IAM coneksctl, utiliza el parámetro --attach-policy-arn con el ARN de la política de IAM AWSLoadBalancerControllerIAMPolicy.

  5. Ejecuta el siguiente comando attach-role-policy para adjuntar AWSLoadBalancerControllerIAMPolicy a tu rol de IAM:

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

    **Nota:**Sustituye 111122223333 por tu ID de cuenta de AWS y rolen-name por tu nombre de rol de IAM.

Implementación de AWS Load Balancer Controller

Sigue estos pasos:

  1. Comprueba que dispones de la etiqueta necesaria para el equilibrador de carga asociado a las subredes.

  2. Ejecuta el siguiente comando con Kubernetes 1.16 o una versión posterior para instalar cert-manager:

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/example-version/cert-manager.yaml
  3. En el archivo de manifiesto que descargaste de GitHub, ejecuta el siguiente comando:

    curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/example-version/v2_13_3_full.yaml  
    

    Nota: Sustituye example-version por la versión de AWS Load Balancer Controller que quieras implementar. Para verificar la versión de AWS Load Balancer Controller, consulta Kubernetes SIGs en el sitio web de GitHub. Asegúrate de modificar el nombre del archivo para que coincida con tu versión. En el ejemplo de código anterior, v2_13_3_full.yaml coincide con la versión 2.13.3 de AWS Load Balancer Controller. Para obtener más información, consulta aws-load-balancer-controller en el sitio web de GitHub.

  4. Realiza las siguientes actualizaciones en la sección ServiceAccount del archivo .yaml:

    spec:        containers:  
        - args:  
            - --cluster-name=example-cluster-name  
            - --ingress-class=alb

    Nota: Sustituye example-cluster-name por el nombre de tu clúster.
    En el siguiente ejemplo, 111122223333 es el ID de cuenta y example-role-name es el nombre del rol de IAM:

    apiVersion: v1  
    kind: ServiceAccount  
    metadata:  
      labels:  
        app.kubernetes.io/component: controller  
        app.kubernetes.io/name: aws-load-balancer-controller  
      annotations:                                                                         
        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/example-role-name       
      name: aws-load-balancer-controller  
      namespace: kube-system
  5. Ejecute el siguiente comando para implementar AWS Load Balancer Controller:

    kubectl apply -f ingress-controller.yaml

Implementación de una aplicación de muestra

Implementa una aplicación de muestra para comprobar que AWS Load Balancer Controller crea un equilibrador de carga de aplicación público debido al objeto entrante.

Sigue estos pasos:

  1. Ejecuta el siguiente comando para implementar un juego llamado 2048:

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

    Nota: Sustituye example-version por la versión de AWS Load Balancer Controller que quieras implementar. Para verificar la versión de AWS Load Balancer Controller, consulta Kubernetes SIGs en el sitio web de GitHub.

  2. Tras unos minutos, ejecuta el siguiente comando para comprobar que Kubernetes ha creado el recurso entrante:

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

    Resultado de ejemplo:

    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
  3. Si Kubernetes no crea tu recurso entrante, ejecuta el siguiente comando para revisar los registros de AWS Load Balancer Controller en busca de mensajes de error de implementación:

    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
  4. Para ver el juego, abre un navegador web y, a continuación, introduce la dirección URL del resultado del paso 2.

  5. Para eliminar el juego, ejecuta el siguiente comando:

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

    Nota: Sustituye example-version por la versión de AWS Load Balancer Controller que quieras implementar.

OFICIAL DE AWSActualizada hace 4 meses