¿Cómo configuro un equilibrador de carga de aplicación mediante el AWS Load Balancer Controller en un grupo de nodos de Amazon EC2 en Amazon EKS?

7 minutos de lectura
0

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

Descripción breve

Conecte el AWS Load Balancer Controller a uno de los siguientes puntos de enlace de servicio de AWS:

  • AWS Identity and Access Management (IAM)
  • Amazon EC2
  • AWS Certificate Manager (ACM)
  • Elastic Load Balancing (ELB)
  • Amazon Cognito
  • AWS WAF
  • AWS Shield

Para que AWS Load Balancer Controller funcione, debe disponer de una conexión a Internet de salida. Para obtener más información, consulte ¿Cómo puedo configurar mis subredes para un clúster de Amazon EKS?

Para desplegar el AWS Load Balancer Controller en AWS Fargate, consulte ¿Cómo puedo configurar AWS Load Balancer Controller en un clúster de Amazon EKS para Fargate y desplegar luego el juego 2048?

Resolución

Etiquetado de las subredes para permitir la detección automática

Etiquete las subredes de Amazon Virtual Private Cloud (Amazon VPC) de su clúster de Amazon EKS. Esto permite que el AWS Load Balancer Controller descubra 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, debe tener al menos dos subredes públicas en la VPC del clúster con las siguientes etiquetas:

kubernetes.io/role/elb

En el caso de los equilibradores de carga de aplicación internos, debe tener al menos dos subredes privadas en la VPC del clúster con las siguientes etiquetas:

kubernetes.io/role/internal-elb

Creación de un proveedor de identidades de OIDC para su clúster

Utilice eksctl o la Consola de administración de AWS para crear un proveedor de identidades de OpenID Connect (OIDC) para usarlo con los roles de IAM para las cuentas de servicio.

Nota: Si se muestran errores al ejecutar comandos de la interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Alternativamente, utilice la AWSL CLI para crear un proveedor de identidades de OIDC para su clúster. Por ejemplo:

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: Sustituya cluster-name por el nombre de su clúster, region-name con su región de AWS y ca-thumbprint por la huella digital de su certificado de CA raíz. Puede obtener la huella digital del certificado de CA raíz que usa su clúster con oidc.eks.region-name.amazonaws.com.

Creación de una política de IAM para el AWS Load Balancer Controller

La política de Amazon EKS que crea permite al AWS Load Balancer Controller realizar llamadas a las API de AWS. Se recomienda utilizar los roles de AWS IAM para las cuentas de servicio al conceder acceso a las API de AWS.

  1. Descargue una política de IAM para el AWS Load Balancer Controller desde GitHub. Ejecute uno de los siguientes comandos, según su región.
    Todas las regiones excepto las de China:

    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

    Regiones de Beijing y Ningxia, China:

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

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \
        --policy-document file://iam-policy.json
  3. Anote el ARN de la política que se muestra en el resultado.

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

  5. Para adjuntar AWSLoadBalancerControllerIAMPolicy a los roles de IAM, ejecute el siguiente comando:

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

    **Nota:**Sustituya 111122223333 con su ID de cuenta de AWS y su nombre de rol por su nombre de rol de IAM.

Despliegue del AWS Load Balancer Controller

  1. Compruebe que dispone de las etiquetas necesarias para el equilibrador de carga asociado a las subredes.

  2. Instale cert-manager para poder inyectar la configuración del certificado en los webhooks. Utilice Kubernetes 1.16 o una versión posterior para ejecutar el siguiente comando:

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
  3. En el archivo de manifiesto que descargó de GitHub, ejecute el siguiente comando:

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

    Nota: Sustituya $VERSION por la versión del AWS Load Balancer Controller que quiera desplegar y modifique el nombre del archivo, por ejemplo, v2_6_2_full.yaml para la versión 2.6.2. Para obtener más información, consulte el repositorio de Kubernetes en GitHub.

  4. Edite cluster-name para su clúster. Por ejemplo:

    spec:    
        containers:
        - args:
            - --cluster-name=your-cluster-name # edit the cluster name
            - --ingress-class=alb
  5.  Actualice únicamente la sección ServiceAccount del archivo. Por ejemplo:

    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: Sustituya 111122223333 por su ID de cuenta y role-name por el nombre de su rol de IAM.

  6. Para desplegar el AWS Load Balancer Controller, ejecute el siguiente comando:

    kubectl apply -f ingress-controller.yaml

Despliegue de una aplicación de ejemplo para probar el AWS Load Balancer Controller

Despliegue una aplicación de ejemplo para comprobar que AWS Load Balancer Controller crea un equilibrador de carga de aplicación público debido al objeto Ingress.

  1. Para desplegar un juego llamado 2048 como aplicación de ejemplo, ejecute el siguiente comando:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Nota: Sustituya $VERSION por la versión (del sitio GitHub de Kubernetes SIG) del AWS Load Balancer Controller que desee desplegar.
  2. Para comprobar que el recurso Ingress se haya creado, espere unos minutos y, a continuación, ejecute el siguiente comando:
    kubectl get ingress/ingress-2048 -n game-2048
    Se mostrará un resultado parecido al del siguiente ejemplo:
    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
     
  3. Si el Ingress no se crea después de varios minutos, ejecute el siguiente comando para ver los registros del AWS Load Balancer Controller:
    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
    Nota: Los registros del AWS Load Balancer Controller suelen mostrar mensajes de error para ayudarle a solucionar problemas relacionados con el despliegue.
  4. Para ver la aplicación de ejemplo, abra un navegador web y, a continuación, vaya a la dirección URL del resultado del paso 2.
  5. Para limpiar la aplicación de ejemplo, ejecute el siguiente comando:
    kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Nota: Sustituya $VERSION por la versión (del sitio GitHub de Kubernetes SIG) del AWS Load Balancer Controller que desee desplegar.

Información relacionada

¿Cómo soluciono los problemas de los equilibradores de carga creados por el controlador de servicios de Kubernetes en Amazon EKS?

¿Cómo puedo solucionar problemas al crear un equilibrador de carga con el controlador del equilibrador de carga de AWS?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año