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.shmediante 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
-
AutomationAssumeRoleEscriba: 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.
-
EksClusterNameTipo: 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.
-
InstanceIdEscriba: AWS: :EC2: :Instance: :Id
Descripción: (Obligatorio) El ID de instancia de Amazon Elastic Compute Cloud (Amazon EC2) del nodo de trabajo.
-
S3BucketNameEscriba: 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).
-
S3BucketOwnerAccountTipo: 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.
-
LambdaRoleArnEscriba: 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:DescribeClustereks:DescribeAddoneks:DescribeAddonVersionseks:ListPodIdentityAssociationseks:DescribePodIdentityAssociation
Permisos de Amazon EC2
ec2:DescribeInstancesec2:DescribeInstanceTypesec2:DescribeSubnetsec2:DescribeNetworkInterfacesec2:DescribeVpcAttributeec2:DescribeRouteTablesec2:DescribeVpcsec2:DescribeSecurityGroupsec2:CreateNetworkInterfaceec2:DeleteNetworkInterface
Permisos de IAM
iam:GetRoleiam:GetInstanceProfileiam:ListAttachedRolePoliciesiam:GetRolePolicyiam:GetPolicyiam:GetPolicyVersioniam:SimulatePrincipalPolicyiam:ListOpenIDConnectProvidersiam:GetOpenIDConnectProvideriam:PassRoleiam:CreateRoleiam:TagRoleiam:AttachRolePolicyiam:DetachRolePolicyiam:DeleteRole
Permisos de Lambda
lambda:CreateFunctionlambda:InvokeFunctionlambda:DeleteFunctionlambda:UpdateFunctionCodelambda:GetFunctionlambda:TagResource
Permisos CloudWatch de Amazon Logs
logs:CreateLogGrouplogs:TagResourcelogs:DeleteLogGrouplogs:PutRetentionPolicy
AWS Systems Manager permisos
ssm:StartAutomationExecutionssm:SendCommandssm:GetCommandInvocationssm:GetAutomationExecutionssm:DescribeAutomationExecutionsssm:DescribeAutomationStepExecutionsssm:DescribeInstanceInformation
Permisos de etiquetado de recursos
tag:GetResourcestag:TagResources
AWS CloudFormation permisos
cloudformation:DescribeStackscloudformation:CreateStackcloudformation:DeleteStack
Permisos de Amazon S3 (necesarios solo cuando se proporciona el S3BucketName parámetro)
s3:ListBuckets3:GetBucketEncryptions3:GetBucketAcls3:GetBucketPublicAccessBlocks3:GetAccountPublicAccessBlocks3:GetBucketPolicyStatuss3:GetBucketLocations3: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
-
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. -
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 -
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 -
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 -
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 -
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 -
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. -
CleanupResources- Limpia la función Lambda y los recursos asociados desplegados durante las comprobaciones de diagnóstico mediante la ejecución del manualAWSSupport-SetupK8sApiProxyForEKSsecundario junto con la operación.Cleanup -
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.