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

7 minutos de lectura
0

Quiero configurar AWS Load Balancer Controller en un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) para AWS Fargate. Luego, quiero desplegar el juego 2048.

Breve descripción

Puede configurar AWS Load Balancer Controller aunque no se haya desplegado ningún controlador Ingress para el equilibrador de carga de aplicación (ALB).

Antes de configurar AWS Load Balancer Controller en un nuevo clúster de Fargate, lleve a cabo las siguientes acciones:

  • Desinstale el controlador Ingress para Kubernetes del ALB de AWS. AWS Load Balancer Controller reemplaza la funcionalidad del controlador Ingress del ALB de AWS.
  • Use la versión 0.109.0 de eksctl u otra superior. Para obtener más información, consulte Installation en el sitio web de eksctl.
  • Instale Helm en la estación de trabajo.
  • Reemplace los valores de los marcadores de posición de los fragmentos de código por sus propios valores.

Solución

Creación de un clúster de Amazon EKS, una política de cuentas de servicio y políticas de control de acceso basado en roles (RBAC)

Para crear un clúster y políticas, siga estos pasos:

  1. Para usar eksctl con el fin de crear un clúster de Amazon EKS, ejecute el comando siguiente:

    eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.28 --fargate

    Nota: No es necesario crear un rol de ejecución de pod de Fargate para los clústeres que solo usan pods de Fargate (--fargate).

  2. Permita que el clúster use AWS Identity and Access Management (IAM) para las cuentas de servicio mediante el siguiente comando:

    eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve

    Nota: El rol FargateExecutionRole se utiliza para los valores de kubelet y kube-proxy en los que se ejecuta el pod de Fargate. Sin embargo, no se utiliza para el pod de Fargate propiamente dicho (aws-load-balancer-controller). En el caso de los pods de Fargate, debe usar el rol de IAM para la cuenta de servicio. Para obtener más información, consulte Roles de IAM para cuentas de servicio.

  3. Para descargar una política de IAM que permita que AWS Load Balancer Controller realice llamadas a las API de AWS en su nombre, ejecute el siguiente comando:

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
  4. Cree una política de IAM con la política descargada. Utilice el siguiente comando:

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. Cree una cuenta de servicio denominada aws-load-balancer-controller en el espacio de nombres kube-system de AWS Load Balancer Controller. Utilice el siguiente comando:

    eksctl create iamserviceaccount \    
    --cluster=YOUR_CLUSTER_NAME \  
    --namespace=kube-system \  
    --name=aws-load-balancer-controller \  
    --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \  
    --override-existing-serviceaccounts \  
    --approve
  6. Para comprobar que se haya creado el nuevo rol de servicio, ejecute uno de los siguientes comandos:

    eksctl get iamserviceaccount --cluster YOUR_CLUSTER_NAME --name aws-load-balancer-controller --namespace kube-system

    Alternativa:

    kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system

Instalación de AWS Load Balancer Controller con Helm

Para instalar AWS Load Balancer Controller, siga estos pasos:

  1. Para añadir el gráfico de Amazon EKS a Helm, ejecute el siguiente comando:

    helm repo add eks https://aws.github.io/eks-charts
  2. Actualice el repositorio para obtener el gráfico más reciente:

      helm repo update eks
  3. Ejecute el siguiente comando para instalar el gráfico de Helm. Nota: Sustituya clusterName, region y ** vpcId** por sus valores:

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \      
    --set clusterName=YOUR_CLUSTER_NAME \  
    --set serviceAccount.create=false \  
    --set region=YOUR_REGION_CODE \  
    --set vpcId=<VPC_ID> \  
    --set serviceAccount.name=aws-load-balancer-controller \  
    -n kube-system
  4. Compruebe si el controlador se ha instalado correctamente:

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

    Ejemplo de resultado:

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

Prueba de AWS Load Balancer Controller

Puede usar AWS Load Balancer Controller para crear un equilibrador de carga de aplicación para Ingress o un equilibrador de carga de red. Debe utilizar uno de los dos para crear un servicio de k8s. Para desplegar una aplicación de ejemplo llamada 2048 con Ingress para el equilibrador de carga de aplicación, siga estos pasos:

  1. Cree un perfil de Fargate necesario para el despliegue del juego. Utilice el siguiente comando:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Para desplegar el juego de ejemplo y comprobar si AWS Load Balancer Controller crea un recurso Ingress para ALB, ejecute el siguiente comando:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. Transcurridos unos minutos, compruebe si el recurso Ingress se ha creado con el siguiente comando:

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

    Recibirá el siguiente resultado:

    NAME           CLASS    HOSTS   ADDRESS. PORTS   AGE
    ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-

    Nota: Si transcurridos varios minutos Ingress no se ha creado aún, ejecute el siguiente comando para ver los registros de AWS Load Balancer Controller:

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

    Los registros pueden contener mensajes de error que ayudan a diagnosticar problemas relacionados con el despliegue.

  4. Para ver la aplicación de ejemplo, abra un navegador. A continuación, vaya a la URL ADDRESS del resultado del comando anterior.
    Nota: Si no puede ver la aplicación de ejemplo, espere unos minutos y actualice el navegador.

Despliegue de una aplicación de ejemplo

Para desplegar una aplicación de ejemplo con el servicio en modo de dirección IP del equilibrador de carga de red, siga estos pasos:

  1. Para crear un perfil de Fargate, ejecute el siguiente comando:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Para obtener el manifiesto para desplegar el juego 2048, ejecute el siguiente comando:

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. En el manifiesto del paso 2, elimine esta sección de Ingress:

    apiVersion: networking.k8s.io/v1kind: Ingress
    metadata:
      namespace: game-2048
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: service-2048           
                    port:
                      number: 80
  4. Modifique el objeto Service:

    apiVersion: v1
    kind: Service
    metadata:
      namespace: game-2048
      name: service-2048
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: app-2048
  5. Para crear el manifiesto de despliegue y el servicio, ejecute el siguiente comando:

    kubectl apply -f 2048-game.yaml
  6. Para comprobar que se haya creado el servicio y consultar el nombre DNS del equilibrador de carga de red, ejecute el siguiente comando:

    kubectl get svc -n game-2048

    Se mostrará el siguiente resultado:

    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                                PORT(S)        AGE
    service-2048   LoadBalancer   10.100.114.197   k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com   80:30159/TCP   23m
  7. Espere unos minutos a que el equilibrador de carga esté activo. A continuación, compruebe si puede acceder al despliegue. Abra el nombre de dominio completo (FQDN) del NLB al que se hace referencia en la sección EXTERNAL-IP en un navegador web.

Solución de problemas de AWS Load Balancer Controller

Si tiene problemas con la configuración del controlador, ejecute los siguientes comandos:

$ kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
$ kubectl get endpoints -n game-2048
$ kubectl get ingress/ingress-2048 -n game-2048

El resultado del comando logs devuelve mensajes de error (por ejemplo, con etiquetas o subredes). Estos mensajes de error pueden ayudarle a solucionar los errores habituales que se describen en el sitio web de GitHub de Kubernetes. El comando get endpoints muestra si los pods de despliegue con copia de seguridad se han registrado correctamente. Los comandos get ingress muestran si se han desplegado los recursos de Ingress. Para obtener más información, consulte AWS Load Balancer Controller en el sitio web de Kubernetes.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses