View a markdown version of this page

AWSSupport-TroubleshootEKSALBControllerIssues - AWS Systems Manager Referencia del manual de procedimientos 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 controlador del balanceador de AWS carga aprovisione y administre correctamente el balanceador de carga de aplicaciones (ALB) y el balanceador de carga de red (NLB) para las entradas y los servicios de Kubernetes.

Este manual realiza una validación integral de los componentes esenciales, como la configuración del proveedor de identidad OIDC, la configuración de IRSA, los requisitos previos de red, la configuración y las cuotas de recursos. ingress/service También captura 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 los clústeres de Amazon EKS que utilizan grupos de nodos de Amazon Elastic Compute Cloud (Amazon EC2) y, por el momento, no admite clústeres en los que se ejecuten. AWS Fargate

¿Cómo funciona?

El libro de instrucciones AWSSupport-TroubleshootEKSALBControllerIssues lleva a cabo los siguientes pasos de alto nivel:

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

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

  • Comprueba la implementación del controlador AWS Load Balancer 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 la subred para el aprovisionamiento del balanceador de carga de aplicaciones y del balanceador de carga de red.

  • 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 de los nodos de trabajo para comprobar la integración del balanceador de cargas.

  • 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 corrección.

nota
  • El clúster de Amazon EKS debe tener una entrada de acceso configurada para la entidad de IAM que ejecute esta automatización. El modo de autenticación del clúster debe configurarse 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 del balanceador de AWS carga debe ser de una versión o posterior. v2.1.1

  • 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 la 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

Sigue 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. Crea una función de automatización de SSM en tu 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. Asocie 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 para las entradas de acceso, consulte Configurar las entradas de acceso.

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

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

    • Elija 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.

    • Añada una política de acceso:

      • En Nombre de la política, seleccioneAmazonEKSAdminViewPolicy.

      • Para Alcance de acceso, seleccioneCluster.

    • Elija Add Policy (Agregar política).

    • Verifique los detalles y elija Crear.

  4. Cree un rol de IAM para la función Lambda (al que se hace referencia LambdaRoleArn 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 administradas a este rol:

      • AWSLambdaBasicExecutionRole

      • AWSLambdaVPCAccessExecutionRole

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

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

  2. Elija Ejecutar automatización.

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

    • AutomationAssumeRole (Opcional):

      Tipo: AWS: :IAM: :Rol: :Arn

      Descripción: (opcional) El nombre de 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-z _0-9+=, A-Z .@\ -_/] +$

    • 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 controlador del balanceador de AWS carga en su clúster de Amazon EKS. Suele ser «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

    • ALBControllerNamespace (Opcional):

      Tipo: cadena

      Descripción: (opcional) El espacio de nombres de Kubernetes en el que se implementa el controlador del balanceador de AWS cargas. 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 balanceador de AWS carga. 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 controlador del balanceador de AWS carga. Por lo general, se trata de «kube-system», 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 Ingress que se va a validar (balanceador de carga de aplicaciones). Si no se especifica, se omitirá la validación de Ingress.

      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 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 balanceador de carga de red (balanceador de carga de red). 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: espacio de nombres (opcional) 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: :Rol: :Arn

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

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

  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. SetupK8sAuthenticationClient:

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

    3. VerifyALBControllerAndIRSASetup:

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

    4. VerifyPodIdentityWebhookAndEnv:

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

    5. ValidateSubnetRequirements:

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

    6. CheckLoadBalancerLimitsAndUsage:

      Compara el límite de la cuenta con la cantidad de balanceadores de carga de aplicaciones y balanceadores de carga de red.

    7. CheckIngressOrServiceAnnotations:

      Comprueba si las anotaciones y especificaciones son correctas en los recursos de Ingress y Service para asegurarse de que están configurados correctamente para el uso del balanceador de carga de aplicaciones y del balanceador de carga de red.

    8. CheckWorkerNodeSecurityGroupTags:

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

    9. CaptureALBControllerLogs:

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

    10. CleanupK8sAuthenticationClient:

      Ejecuta el documento SAW 'AWSSupport-SetupK8sApiProxyForEKS' 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, consulte la sección 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 del controlador del balanceador de carga de las aplicaciones, 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 de los nodos de trabajo y los registros del controlador del balanceador de carga de las aplicaciones. También incluye los problemas identificados y los pasos de solución recomendados.

Referencias

Automatización de Systems Manager

Documentación relacionada con el controlador AWS Load Balancer