View a markdown version of this page

AWSSupport-TroubleshootEKSCNI - 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-TroubleshootEKSCNI

Description (Descripción)

El AWSSupport-TroubleshootEKSCNI manual diagnostica los problemas relacionados con el complemento CNI de Amazon Virtual Private Cloud (Amazon VPC) en los nodos de trabajo de Amazon Elastic Kubernetes Service (Amazon EKS). Realiza comprobaciones de diagnóstico exhaustivas, que incluyen el estado de los complementos, la autenticación AWS Identity and Access Management (IAM), la configuración de la red y la conectividad.

El runbook realiza las siguientes comprobaciones de diagnóstico:

  • Estado del complemento CNI de Amazon VPC (gestionado y autogestionado), compatibilidad de versiones y disponibilidad de los pods

  • Autenticación de IAM (identidad del pod, funciones de IAM para cuentas de servicio (IRSA), función de IAM de nodo, proveedor de OpenID Connect (OIDC))

  • Conectividad de red con el servidor de API de Amazon EKS y los puntos finales de Amazon Elastic Compute Cloud

  • Estado de los nodos, archivos de configuración de CNI y estado del pod del sistema

  • Configuración de red (familia IP, redes personalizadas, delegación de prefijos, densidad de pods, disponibilidad de subredes)

  • Configuración del grupo de seguridad para los pods

  • Recopilación de registros eks-log-collector.sh mediante la carga opcional de Amazon Simple Storage Service

importante

Este manual implementa recursos temporales AWS Lambda (Lambda) y puede generar cargos asociados. Todos los recursos temporales se limpian automáticamente al final de la ejecución.

Ejecute este manual

Ejecuta esta automatización (consola)

Tipo de documento

Automatización

Propietario

Amazon

Plataformas

Linux

Parameters

  • AutomationAssumeRole

    Escriba: AWS: :IAM: :Role: :Arn

    Descripción: (opcional) El nombre de recurso de Amazon (ARN) del rol de IAM que permite a Systems Manager Automation realizar las 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.

  • EksClusterName

    Tipo: cadena

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

    Descripción: (Obligatorio) El nombre del clúster de Amazon EKS para solucionar el problema.

  • InstanceId

    Escriba: AWS: :EC2: :Instance: :Id

    Descripción: (Obligatorio) El ID de instancia de Amazon Elastic Compute Cloud (Amazon EC2) del nodo de trabajo.

  • S3BucketName

    Escriba: AWS: :S3: :Bucket: :Name

    Descripción: (opcional) El bucket de Amazon S3 para registros detallados. El bucket debe ser seguro (no público, el cifrado debe estar habilitado).

  • S3BucketOwnerAccount

    Tipo: cadena

    Valor predeterminado: {{ global:ACCOUNT_ID }}

    Patrón permitido: ^$|^\{\{ global:ACCOUNT_ID \}\}$|^[0-9]{12}$

    Descripción: (opcional) La AWS cuenta propietaria del bucket de Amazon S3. Si no especifica este parámetro, el manual asume que el bucket está en esta cuenta.

  • LambdaRoleArn

    Escriba: AWS: :IAM: :Role: :Arn

    Descripción: (opcional) El ARN del rol de IAM para que la función Lambda se autentique en el clúster de Amazon EKS. Si no se proporciona, el libro de ejecución crea un rol temporal.

Permisos de IAM necesarios

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

importante

AutomationAssumeRoleDebe estar mapeado en la configuración de acceso del clúster de Amazon EKS para permitir las llamadas a la API autenticadas. Kubernetes Puede asignar el rol mediante las entradas de acceso de Amazon EKS o el. aws-auth ConfigMap Sin esta asignación, la automatización no puede verificar el registro del nodo y produce un error de autenticación.

Permisos de Amazon EKS
  • eks:DescribeCluster

  • eks:DescribeAddon

  • eks:DescribeAddonVersions

  • eks:ListPodIdentityAssociations

  • eks:DescribePodIdentityAssociation

Permisos de Amazon EC2
  • ec2:DescribeInstances

  • ec2:DescribeInstanceTypes

  • ec2:DescribeSubnets

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeVpcAttribute

  • ec2:DescribeRouteTables

  • ec2:DescribeVpcs

  • ec2:DescribeSecurityGroups

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

Permisos de IAM
  • iam:GetRole

  • iam:GetInstanceProfile

  • iam:ListAttachedRolePolicies

  • iam:GetRolePolicy

  • iam:GetPolicy

  • iam:GetPolicyVersion

  • iam:SimulatePrincipalPolicy

  • iam:ListOpenIDConnectProviders

  • iam:GetOpenIDConnectProvider

  • iam:PassRole

  • iam:CreateRole

  • iam:TagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

  • iam:DeleteRole

Permisos de Lambda
  • lambda:CreateFunction

  • lambda:InvokeFunction

  • lambda:DeleteFunction

  • lambda:UpdateFunctionCode

  • lambda:GetFunction

  • lambda:TagResource

Permisos CloudWatch de Amazon Logs
  • logs:CreateLogGroup

  • logs:TagResource

  • logs:DeleteLogGroup

  • logs:PutRetentionPolicy

AWS Systems Manager permisos
  • ssm:StartAutomationExecution

  • ssm:SendCommand

  • ssm:GetCommandInvocation

  • ssm:GetAutomationExecution

  • ssm:DescribeAutomationExecutions

  • ssm:DescribeAutomationStepExecutions

  • ssm:DescribeInstanceInformation

Permisos de etiquetado de recursos
  • tag:GetResources

  • tag:TagResources

AWS CloudFormation permisos
  • cloudformation:DescribeStacks

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

Permisos de Amazon S3 (necesarios solo cuando se proporciona el S3BucketName parámetro)
  • s3:ListBucket

  • s3:GetBucketEncryption

  • s3:GetBucketAcl

  • s3:GetBucketPublicAccessBlock

  • s3:GetAccountPublicAccessBlock

  • s3:GetBucketPolicyStatus

  • s3:GetBucketLocation

  • s3:PutObject

Para ejecutar este manual, el usuario de IAM AutomationAssumeRole o su usuario deben realizar las siguientes acciones. El siguiente ejemplo muestra una política de IAM con privilegios mínimos que limita los permisos a los patrones de recursos específicos utilizados por la automatización:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EKSReadOnly", "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:DescribeAddon", "eks:DescribeAddonVersions", "eks:ListPodIdentityAssociations", "eks:DescribePodIdentityAssociation" ], "Resource": [ "arn:aws:eks:REGION:ACCOUNTID:cluster/CLUSTER_NAME", "arn:aws:eks:REGION:ACCOUNTID:addon/CLUSTER_NAME/*", "arn:aws:eks:REGION:ACCOUNTID:podidentityassociation/CLUSTER_NAME/*" ] }, { "Sid": "EC2ReadOnly", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:DescribeSubnets", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcAttribute", "ec2:DescribeRouteTables", "ec2:DescribeVpcs", "ec2:DescribeSecurityGroups" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "EC2NetworkInterfaceForLambdaVPC", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:network-interface/*", "arn:aws:ec2:REGION:ACCOUNTID:subnet/SUBNET_ID", "arn:aws:ec2:REGION:ACCOUNTID:security-group/CLUSTER_SECURITY_GROUP_ID" ] }, { "Sid": "IAMReadOnly", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:GetInstanceProfile", "iam:ListAttachedRolePolicies", "iam:GetRolePolicy", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:SimulatePrincipalPolicy", "iam:ListOpenIDConnectProviders", "iam:GetOpenIDConnectProvider" ], "Resource": [ "arn:aws:iam::ACCOUNTID:role/*", "arn:aws:iam::ACCOUNTID:instance-profile/*", "arn:aws:iam::ACCOUNTID:policy/*", "arn:aws:iam::ACCOUNTID:oidc-provider/*" ] }, { "Sid": "IAMRoleManagementForLambda", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:TagRole", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRole" ], "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*" }, { "Sid": "PassRoleToLambdaOnly", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*", "Condition": { "StringEquals": { "iam:PassedToService": "lambda.amazonaws.com" } } }, { "Sid": "LambdaManagement", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:UpdateFunctionCode", "lambda:GetFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:REGION:ACCOUNTID:function:AWSSupport-SetupK8sApiProxy-*" }, { "Sid": "CloudWatchLogs", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:TagResource", "logs:DeleteLogGroup", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:REGION:ACCOUNTID:log-group:/aws/lambda/AWSSupport-SetupK8sApiProxy-*" }, { "Sid": "SSMAutomationScopedToChildDoc", "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": [ "arn:aws:ssm:REGION:ACCOUNTID:automation-definition/AWSSupport-SetupK8sApiProxyForEKS:*", "arn:aws:ssm:REGION:ACCOUNTID:automation-execution/*" ] }, { "Sid": "SSMAutomationRead", "Effect": "Allow", "Action": [ "ssm:GetAutomationExecution", "ssm:DescribeAutomationExecutions", "ssm:DescribeAutomationStepExecutions" ], "Resource": "arn:aws:ssm:REGION:ACCOUNTID:automation-execution/*" }, { "Sid": "SSMCommandExecution", "Effect": "Allow", "Action": [ "ssm:SendCommand", "ssm:GetCommandInvocation" ], "Resource": [ "arn:aws:ssm:REGION::document/AWS-RunShellScript", "arn:aws:ec2:REGION:ACCOUNTID:instance/INSTANCE_ID" ] }, { "Sid": "SSMDescribeInstances", "Effect": "Allow", "Action": "ssm:DescribeInstanceInformation", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "CloudFormation", "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks", "cloudformation:CreateStack", "cloudformation:DeleteStack" ], "Resource": "arn:aws:cloudformation:REGION:ACCOUNTID:stack/AWSSupport-SetupK8sApiProxyForEKS-*/*" }, { "Sid": "ResourceTagging", "Effect": "Allow", "Action": [ "tag:GetResources", "tag:TagResources" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "S3LogUpload", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketEncryption", "s3:GetBucketAcl", "s3:GetBucketPublicAccessBlock", "s3:GetBucketPolicyStatus", "s3:GetBucketLocation", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::S3_BUCKET_NAME", "arn:aws:s3:::S3_BUCKET_NAME/*" ], "Condition": { "StringEquals": { "s3:ResourceAccount": "ACCOUNTID" } } }, { "Sid": "S3AccountPublicAccessBlock", "Effect": "Allow", "Action": "s3:GetAccountPublicAccessBlock", "Resource": "*" } ] }

Documente los pasos

  1. CheckConcurrency- Garantiza que solo haya una ejecución de este manual dirigida a la misma AWS región. Si hay otra ejecución en curso, el libro de ejecución devuelve un error y finaliza.

  2. ValidatePrerequisites- Valida todos los requisitos previos, incluidos el estado del clúster, el estado de la instancia, la conectividad de Amazon EC2 Systems Manager, la configuración de DNS de Amazon VPC y los permisos de IAM. Si se produce un error en la validación de un requisito previo, el manual pasa a. GenerateReport

  3. BranchOnValidation- Dirige la ejecución en función de los resultados de la validación previa. Si todos los requisitos previos son válidos, continúa conDeployK8sApiProxy. De lo contrario, salta a. GenerateReport

  4. DeployK8sApiProxy- Implementa una función de Lambda para realizar llamadas de Kubernetes API autenticadas al clúster de Amazon EKS mediante la ejecución del libro de ejecución secundario. AWSSupport-SetupK8sApiProxyForEKS

  5. ValidateNodeInCluster- Verifica que la instancia de Amazon EC2 sea un nodo registrado en el clúster de Amazon EKS a través de la API. Kubernetes Si el nodo no se encuentra en el clúster, el libro de operaciones pasa a. CleanupResources

  6. BranchOnNodeValidation- Enruta la ejecución en función de los resultados de la validación del nodo. Si el nodo es válido, continúa conRunCNIChecks. De lo contrario, salta a. CleanupResources

  7. RunCNIChecks- Ejecuta todas las comprobaciones de diagnóstico del CNI, como el estado de los complementos, la autenticación de IAM, la conectividad, el estado de los nodos, la configuración de la red, los grupos de seguridad y la recopilación de registros. Continúa con el siguiente paso aunque las comprobaciones detecten errores.

  8. CleanupResources- Limpia la función Lambda y los recursos asociados desplegados durante las comprobaciones de diagnóstico mediante la ejecución del manual AWSSupport-SetupK8sApiProxyForEKS secundario junto con la operación. Cleanup

  9. GenerateReport- Genera un informe de diagnóstico con mensajes legibles por humanos y recomendaciones prácticas para cada hallazgo.

Outputs

GenerateReport.Report- Un resumen completo de todos los hallazgos con códigos de error, mensajes y recomendaciones prácticas.