AWSSupport-TroubleshootEKSALBControllerIssues - AWS Systems Manager Referencia del manual de automatización

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

AWSSupport-TroubleshootEKSALBControllerIssues

Descripción

El manual de AWSSupport-TroubleshootEKSALBControllerIssues automatización ayuda a diagnosticar problemas comunes que impiden que el AWS Load Balancer Controller aprovisione y gestione correctamente el Application Load Balancer (ALB) y el Network Load Balancer (NLB) para las entradas y los servicios de Kubernetes.

Este manual end-to-end valida los componentes esenciales, como la configuración del proveedor de identidad del OIDC, la configuración del IRSA, los requisitos previos de red, la configuración y las cuotas de recursos. ingress/service También recopila los registros de los controladores y las configuraciones de recursos de Kubernetes relevantes para ayudar a identificar errores de configuración o problemas operativos.

importante

Este manual de automatización está diseñado para clústeres de Amazon EKS que utilizan grupos de nodos de Amazon Elastic Compute Cloud (Amazon EC2) (Amazon EC2) y actualmente no admite clústeres en ejecución. AWS Fargate

¿Cómo funciona?

El manual de ejecución AWSSupport-TroubleshootEKSALBControllerIssues lleva a cabo los siguientes pasos de alto nivel:

  • Valida el estado del clúster de Amazon EKS, la configuración de entrada de acceso y la configuración del proveedor de OIDC.

  • Crea un proxy Lambda temporal para la comunicación de la API de Kubernetes.

  • Comprueba la implementación del AWS Load Balancer Controller y la configuración de la cuenta de servicio.

  • Verifica la identidad del pod, el webhook y la inyección de roles de IAM.

  • Valida la configuración y el etiquetado de subredes para el aprovisionamiento de Application Load Balancer y Network Load Balancer.

  • Compara las cuotas de las cuentas de Application Load Balancer y Network Load Balancer con el uso actual.

  • Valida las anotaciones de los recursos de entrada y servicio.

  • Comprueba el etiquetado de los grupos de seguridad del nodo de trabajo para la integración del balanceador de carga.

  • Recopila los registros de los módulos del controlador para realizar diagnósticos.

  • Limpia los recursos de autenticación temporales.

  • Genera un informe de diagnóstico con los hallazgos y los pasos de remediación.

nota
  • El clúster de Amazon EKS debe tener una entrada de acceso configurada para la entidad de IAM que ejecuta esta automatización. El modo de autenticación del clúster debe estar configurado en API oAPI_AND_CONFIG_MAP. Sin una configuración de entrada de acceso adecuada, la automatización finalizará durante la validación inicial.

  • El LambdaRoleArn parámetro es obligatorio y debe tener las políticas AWS administradas AWSLambdaBasicExecutionRole y AWSLambdaVPCAccessExecutionRole adjuntadas para permitir que la función de proxy se comunique con la API de Kubernetes.

  • El controlador AWS Load Balancer debe ser de una versión v2.1.1 o posterior.

  • La automatización incluye un paso de limpieza que elimina los recursos temporales de la infraestructura de autenticación. Este paso de limpieza se ejecuta incluso cuando los pasos anteriores fallan, lo que garantiza que no queden recursos huérfanos en su cuenta. AWS

Ejecuta esta automatización (consola)

Tipo de documento

Automatización

Propietario

Amazon

Plataformas

/

Permisos de IAM necesarios

El parámetro AutomationAssumeRole requiere las siguientes acciones para utilizar el manual de procedimientos correctamente.

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

  • cloudformation:DescribeStacks

  • cloudformation:UpdateStack

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

  • ec2:DescribeInstances

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

  • eks:DescribeCluster

  • eks:ListAssociatedAccessPolicies

  • elasticloadbalancing:DescribeAccountLimits

  • elasticloadbalancing:DescribeLoadBalancers

  • iam:GetRole

  • iam:ListOpenIDConnectProviders

  • iam:PassRole

  • lambda:CreateFunction

  • lambda:DeleteFunction

  • lambda:GetFunction

  • lambda:InvokeFunction

  • lambda:ListTags

  • lambda:TagResource

  • lambda:UntagResource

  • lambda:UpdateFunctionCode

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:DescribeLogGroups

  • logs:DescribeLogStreams

  • logs:ListTagsForResource

  • logs:PutLogEvents

  • logs:PutRetentionPolicy

  • logs:TagResource

  • logs:UntagResource

  • ssm:DescribeAutomationExecutions

  • ssm:GetAutomationExecution

  • ssm:StartAutomationExecution

  • tag:GetResources

  • tag:TagResources

Instrucciones

Siga estos pasos para configurar y ejecutar la automatización:

nota

Antes de ejecutar la automatización, siga estos pasos para configurar las funciones de IAM necesarias: una para que Systems Manager Automation ejecute el runbook y otra para que Lambda se comunique con la API de Kubernetes:

  1. Cree un rol de automatización de SSM en su cuenta. TroubleshootEKSALBController-SSM-Role Verifique que la relación de confianza contiene la siguiente política.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Adjunta la siguiente política de IAM para conceder los permisos necesarios:

    { "Version": "2012-10-17", "Statement": [{ "Sid": "TroubleshootEKSALBControllerIssuesActions", "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListAssociatedAccessPolicies", "iam:GetRole", "iam:ListOpenIDConnectProviders", "ssm:StartAutomationExecution", "ssm:GetAutomationExecution", "ssm:DescribeAutomationExecutions", "ec2:DescribeSubnets", "ec2:DescribeRouteTables", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeAccountLimits", "ec2:DescribeInstances", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Sid": "SetupK8sApiProxyForEKSActions", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "eks:DescribeCluster", "iam:GetRole", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:InvokeFunction", "lambda:ListTags", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:ListTagsForResource", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource", "ssm:DescribeAutomationExecutions", "tag:GetResources", "tag:TagResources" ], "Resource": "*" }, { "Sid": "PassRoleToAutomation", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringLikeIfExists": { "iam:PassedToService": [ "lambda.amazonaws.com", "ssm.amazonaws.com" ] } } }] }
  3. Configure la entrada de acceso para su clúster de Amazon EKS. Este es un requisito obligatorio para la automatización. Para ver los pasos para configurar el modo de autenticación de las entradas de acceso, consulte Configurar las entradas de acceso.

    En la consola de Amazon EKS, navegue hasta el clúster y siga estos pasos:

    • En la sección Acceso, compruebe que la configuración de autenticación esté establecida en API oAPI_AND_CONFIG_MAP.

    • Seleccione Crear entrada de acceso y configure:

      • Para el ARN principal de IAM, seleccione el rol de IAM que creó (). TroubleshootEKSALBController-SSM-Role

      • En Tipo, seleccione Standard.

    • Agregue una política de acceso:

      • En el nombre de la política, seleccioneAmazonEKSAdminViewPolicy.

      • En Alcance de acceso, seleccioneCluster.

    • Elija Add Policy (Agregar política).

    • Compruebe los detalles y seleccione Crear.

  4. Cree una función de IAM para la función Lambda (referenciada LambdaRoleArn como en los parámetros de entrada):

    • Cree un nuevo rol de IAM con la siguiente política de confianza:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    • Adjunte las siguientes políticas AWS gestionadas a este rol:

      • AWSLambdaBasicExecutionRole

      • AWSLambdaVPCAccessExecutionRole

    • Anote el ARN de este rol, ya que lo necesitará para el parámetro de LambdaRoleArn entrada.

  1. Navegue hasta AWSSupport-TroubleshootEKSALBControllerIssuesen la consola de AWS Systems Manager.

  2. Elija Ejecutar automatización.

  3. Para los parámetros de entrada, introduzca lo siguiente:

    • AutomationAssumeRole (Opcional):

      Tipo AWS::IAM::Role: :Arn

      Descripción: (opcional) El nombre del recurso de Amazon (ARN) del rol AWS Identity and Access Management (IAM) que permite a Systems Manager Automation realizar acciones en su nombre. Si no se especifica ningún rol, Systems Manager Automation utiliza los permisos del usuario que comienza este manual de procedimientos.

      Patrón permitido: ^arn :(? :aws|aws-cn|aws-us-gov) :iam::\ d {12} :role/? [A-zA-Z_0-9+=, .@\ -_/] +$

    • EksClusterName (Obligatorio):

      Tipo: cadena

      Descripción: (obligatorio) Nombre del clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

      Patrón permitido: ^ [0-9a-za-Z] [a-zA-Z0-9-_] {0,99} $

    • ALBControllerDeploymentName (Opcional):

      Tipo: cadena

      Descripción: (opcional) El nombre de la implementación del AWS Load Balancer Controller en el clúster de Amazon EKS. Por lo general, es «aws-load-balancer-controller», a menos que lo haya personalizado durante la instalación.

      Patrón permitido: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

      Predeterminado: aws-load-balancer-controller

    • ALBControllerEspacio de nombres (opcional):

      Tipo: cadena

      Descripción: (opcional) El espacio de nombres de Kubernetes donde se implementa el Load Balancer Controller AWS . De forma predeterminada, es «kube-system», pero puede ser diferente si has instalado el controlador en un espacio de nombres personalizado.

      Patrón permitido: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

      Predeterminado: kube-system

    • ServiceAccountName (Opcional):

      Tipo: cadena

      Descripción: (opcional) El nombre de la cuenta de servicio de Kubernetes asociada al controlador del Load Balancer AWS . Suele ser «aws-load-balancer-controller», a menos que se personalice durante la instalación.

      Patrón permitido: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

      Predeterminado: aws-load-balancer-controller

    • ServiceAccountNamespace (Opcional):

      Tipo: cadena

      Descripción: (opcional) El espacio de nombres de Kubernetes donde se encuentra la cuenta de servicio del Load Balancer Controller AWS . Suele ser el «sistema kube», pero puede variar si has utilizado un espacio de nombres personalizado.

      Patrón permitido: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

      Predeterminado: kube-system

    • IngressName (Opcional):

      Tipo: cadena

      Descripción: (opcional) Nombre del recurso de ingreso que se va a validar (Application Load Balancer). Si no se especifica, se omitirá la validación de ingreso.

      Patrón permitido: ^$|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

      Predeterminado: «» (cadena vacía)

    • IngressNamespace (Opcional):

      Tipo: cadena

      Descripción: (opcional) Espacio de nombres del recurso de Ingress. Es obligatorio si se ha especificado IngressName.

      Patrón permitido: ^$|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

      Predeterminado: «» (cadena vacía)

    • ServiceName (Opcional):

      Tipo: cadena

      Descripción: (opcional) Nombre de un recurso de servicio específico para validar las anotaciones del Network Load Balancer (Network Load Balancer). Si no se especifica, se omitirá la validación de los recursos de servicio.

      Patrón permitido: ^$|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

      Predeterminado: «» (cadena vacía)

    • ServiceNamespace (Opcional):

      Tipo: cadena

      Descripción: (opcional) Espacio de nombres del recurso de servicio. Es obligatorio si se ha especificado ServiceName.

      Patrón permitido: ^$|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

      Predeterminado: «» (cadena vacía)

    • LambdaRoleArn (Obligatorio):

      Tipo AWS::IAM::Role: :Arn

      Descripción: (obligatorio) El ARN de la función de IAM que permite a la función ( AWS Lambda Lambda) acceder a los servicios y recursos necesarios. AWS Asocie las políticas AWS gestionadas AWSLambdaBasicExecutionRole y, AWSLambdaVPCAccessExecutionRole a su función de IAM de ejecución de funciones lambda.

      Patrón permitido: ^arn :(? :aws|aws-cn|aws-us-gov) :iam::\ d {12} :role/? [A-zA-Z_0-9+=, .@\ -_/] +$

  4. Elija Ejecutar.

  5. Se inicia la automatización.

  6. Este documento realiza los siguientes pasos:

    1. ValidateAccessEntryAndOIDCProvider:

      Valida la configuración de IAM del clúster de Amazon EKS comprobando los permisos de entrada de acceso y la configuración del proveedor de OIDC.

    2. Configuración K8: sAuthenticationClient

      Ejecute el documento SAW AWSSupport-SetupK 8 sApiProxy FoREKs para configurar una función lambda que ejecute llamadas a la API de Amazon EKS en el clúster.

    3. Verifique ALBController y: IRSASetup

      Comprueba si la cuenta de servicio y el controlador Application Load Balancer determinados existen en sus respectivos espacios de nombres. Comprueba también la política de confianza y anotación de roles de cuentas de servicio del controlador Application Load Balancer.

    4. VerifyPodIdentityWebhookAndEnv:

      Comprueba si se pod-identity-webhook está ejecutando. También comprueba si el IRSA se inyecta en las variables ENV del módulo.

    5. ValidateSubnetRequirements:

      Compruebe al menos dos subredes en dos zonas de disponibilidad con 8 IP disponibles. Los balanceadores de carga cuentan con el etiquetado de subredes adecuado. public/private

    6. CheckLoadBalancerLimitsAndUsage:

      Compare el límite de la cuenta con el número de Application Load Balancer y Network Load Balancer.

    7. CheckIngressOrServiceAnnotations:

      Comprueba las anotaciones y especificaciones correctas en los recursos de Ingress y Service para garantizar que estén configurados correctamente para el uso de Application Load Balancer y Network Load Balancer.

    8. CheckWorkerNodeSecurityGroupTags:

      Compruebe que exactamente un grupo de seguridad adjunto a los nodos de trabajo tenga la etiqueta de clúster requerida.

    9. ALBControllerRegistros de captura:

      Recupera los registros de diagnóstico más recientes de los pods del controlador AWS Load Balancer que se ejecutan en el clúster de Amazon EKS.

    10. Limpiar K8: sAuthenticationClient

      Ejecuta el documento SAW «AWSSupport-SetupK8 sApiProxy FoReks» mediante la operación de «Limpieza» para limpiar los recursos creados como parte de la automatización.

    11. GenerateReport:

      Genera el informe de automatización.

  7. Una vez finalizada la ejecución, revise la sección de resultados para ver los resultados detallados de la ejecución:

    1. Informe:

      Proporciona un resumen completo de todas las comprobaciones realizadas, incluido el estado del clúster de Amazon EKS, la configuración de Application Load Balancer Controller, la configuración de IRSA, los requisitos de subred, los límites del balanceador de carga, ingress/service las anotaciones, las etiquetas de los grupos de seguridad del nodo de trabajo y los registros del Application Load Balancer Controller. También incluye los problemas identificados y las medidas de corrección recomendadas.

Referencias

Automatización de Systems Manager

Documentación relacionada con el controlador AWS Load Balancer