¿Cómo configuro un balanceador de carga de aplicaciones 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 balanceador de carga de aplicaciones 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 corta

Los siguientes pasos muestran cómo implementar el balanceador de carga de aplicaciones mediante el controlador de equilibrio de carga de AWS en un grupo de nodos de Amazon EC2 con Amazon EKS. Para crear un balanceador de carga de red, consulte AWS Load Balancer Controller.

El AWS Load Balancer Controller debe estar conectado a un punto final de servicio de AWS, como AWS Identity and Access Management (IAM), EC2, AWS Certificate Manager (ACM), Elastic Load Balancing, Amazon Cognito, AWS WAF o AWS Shield. Esto significa que debe disponer de una conexión a Internet de salida para que AWS Load Balancer Controller funcione. Para obtener más información, consulte ¿Cómo configuro mis subredes para un clúster de Amazon EKS?

Para implementar el AWS Load Balancer Controller en AWS Fargate, consulte ¿Cómo configuro el AWS Load Balancer Controller en un clúster de Amazon EKS para Fargate e implementar el juego 2048?

Resolución

Etiqueta tus subredes para permitir la detección automática

Etiquete las subredes de Amazon VPC en su clúster de Amazon EKS para permitir que su AWS Load Balancer Controller detecte subredes automáticamente cuando se cree el recurso Application Load Balancer.

En el caso de los balanceadores de carga de aplicaciones 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 balanceadores de carga de aplicaciones internos, debe tener al menos dos subredes privadas en la VPC del clúster con las siguientes etiquetas:

kubernetes.io/role/internal-elb

Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Cree un proveedor de identidades OIDC para su clúster

Para crear un proveedor de identidades de OpenID Connect (OIDC) para su clúster y usarlo con las funciones de AWS Identity and Access Management (IAM) para las cuentas de servicio, utilice eksctl o la consola de administración de AWS.

También puede usar la CLI de AWSL para crear un proveedor de identidades 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 elnombre del clúster por el nombre de su clúster,el nombre de la región 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.

Cree una política de IAM para el AWS Load Balancer Controller

La política de Amazon EKS que cree permite al AWS Load Balancer Controller realizar llamadas a las API de AWS en su nombre. Se recomienda utilizar las funciones de AWS IAM para las cuentas de servicio al conceder acceso a las API de AWS.

  1. Para descargar un documento de política de IAM para el controlador de equilibrio de carga de AWS desde AWS GitHub, ejecute uno de los siguientes comandos según su región.

Todas las regiones excepto las regiones de China:

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

-o-

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
  1. 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
  1. Anote el nombre del recurso de Amazon (ARN) de la política que se muestra en el resultado del paso 2.

  2. Utilice la función de IAM existente o cree una nueva función de IAM para el AWS Load Balancer Controller.

Consejo:Para crear un rol de IAM coneksctl, utilice el parámetro --attach-policy-arn con el ARN de la política de IAM AWSLoadBalancerControlleriamPolicy.

  1. Para adjuntar AWSLoadBalancerControlleriamPolicy a las funciones de IAM que identificó anteriormente, 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.

Implemente el AWS Load Balancer Controller

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

  2. Instale cert-manager para poder inyectar la configuración del certificado en los webhooks.

Para Kubernetes 1.16 o posterior:

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

Para Kubernetes 1.15 o anterior:

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

Nota: Sustituya $VERSION con la versión (del sitio GitHub de Jetstack, por ejemplo, «v1.6.0») del administrador de certificados que desee implementar.

  1. En el archivo de manifiesto descargado para el AWS Load Balancer Controller de AWS GitHub, ejecute el siguiente comando:
curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_4_1_full.yaml

**Nota:**Sustituya $VERSION con la versión (del sitio GitHub de Kubernetes SIG, por ejemplo, «v2.4.1») del AWS Load Balancer Controller que desee implementar.

  1. Edita el nombre del clúster de su clúster. Por ejemplo:
spec:
    containers:
    - args:
        - --cluster-name=your-cluster-name # edit the cluster name
        - --ingress-class=alb
  1. 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 con su ID de cuenta de AWS y su nombre de rol por su nombre de rol de IAM.

  1. Para implementar el AWS Load Balancer Controller, ejecute el siguiente comando:
kubectl apply -f ingress-controller.yaml

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

Implemente una aplicación de ejemplo para comprobar que el controlador de equilibrio de carga de AWS crea un balanceador de carga de aplicaciones público debido al objeto Ingress.

  1. Para implementar un juego llamado 2048 como aplicación de ejemplo, ejecuta 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, por ejemplo, «v2.3.0») del AWS Load Balancer Controller que desee implementar.

  1. Para comprobar que se creó el recurso Ingress, espere unos minutos y, a continuación, ejecute el siguiente comando:
kubectl get ingress/ingress-2048 -n game-2048

Recibirá un resultado similar al siguiente:

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

Si su Ingreso no se crea después de varios minutos, ejecute el siguiente comando para ver los registros de AWS Load Balancer Controller:

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

**Nota:**Los registros de AWS Load Balancer Controller pueden mostrar mensajes de error para ayudarle a solucionar problemas relacionados con la implementación.

  1. Para ver la aplicación de ejemplo, abra un navegador web y, a continuación, vaya a la dirección URL de la salida del paso 2.

  2. 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, por ejemplo, «v2.3.0») del AWS Load Balancer Controller que desee implementar.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años