¿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?
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.
- 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
- 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
-
Anote el nombre del recurso de Amazon (ARN) de la política que se muestra en el resultado del paso 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.
- 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
-
Compruebe que dispone de las etiquetas necesarias para el balanceador de carga asociado a las subredes.
-
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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
-
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.
-
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.
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 meses
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 7 meses