View a markdown version of this page

AWSSupport-TroubleshootEKSDNSFailure - AWS Systems Manager 自动化运行手册参考

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWSSupport-TroubleshootEKSDNSFailure

描述

AWSSupport-TroubleshootEKSDNSFailure运行手册可帮助解决应用程序或容器遇到 DNS 解析失败时,Amazon Elastic Kubernetes Service (Amazon EKS) 中的 CoreDNS 容器和配置问题。该运行手册验证 VPC DNS 设置,检查 CoreDNS 部署,检查水平容器自动扩缩器 (HPA) 配置 ConfigMap,收集 CoreDNS 日志,并在工作节点上执行 DNS 解析检查。或者,可以在问题工作节点所在的子网中创建探测型 Amazon Elastic Compute Cloud 实例,无需直接访问该节点即可执行 DNS 解析检查。

重要

Amazon EKS 集群的身份验证模式必须设置为APIAPI_AND_CONFIG_MAP。本运行手册部署了一个 ( AWS Lambda Lambda) 函数作为代理,以进行经过身份验证的 Kubernetes API 调用,并在执行结束时清理所有创建的资源。

运行此自动化(控制台)

文档类型

自动化

所有者

Amazon

平台

Linux、macOS、Windows

参数

  • AutomationAssumeRole

    类型:: AWS::IAM::Role: Arn

    描述:(可选)允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称(ARN)。如果未指定角色,Systems Manager Automation 将使用启动此运行手册的用户的权限。

  • EksClusterName

    类型:字符串

    描述:(必填)目标 Amazon EKS 集群的名称。

  • DnsName

    类型:字符串

    默认:亚马逊

    描述:(可选)应用程序或 Pod 无法解析的域名的存根域后缀。

  • ProblematicNodeInstanceId

    类型:: AWS::EC2::Instance: ID

    描述:(可选)运行遇到 DNS 解析错误的应用程序的工作节点的实例 ID。如果提供,运行手册将在同一子网中创建一个探测型 Amazon EC2 实例,以执行 DNS 解析检查。如果工作节点不在公有子网中,或者不允许在工作节点bind-utils上安装,则使用此参数。

  • CoreDnsNamespace

    类型:字符串

    默认:kube-system

    描述:(可选)CoreDNS 容器的 Kubernetes 命名空间。

  • S3 BucketName

    类型:: AWS::S3::Bucket: 姓名

    描述:(可选)上传 CoreDNS 疑难解答日志的亚马逊简单存储服务存储桶的名称。

  • LambdaRoleArn

    类型:: AWS::IAM::Role: Arn

    描述:(可选)Lambda 代理函数的 IAM 角色的 ARN。如果未提供,则运行手册将创建一个名为AWSLambdaBasicExecutionRoleAWSLambdaVPCAccessExecutionRole托管策略Automation-K8sProxy-Role-<ExecutionId>的角色。建议您提供自己的角色。

所需的 IAM 权限

AutomationAssumeRole 参数需要执行以下操作才能成功使用运行手册。

  • eks:DescribeCluster

  • ec2:DescribeVpcs

  • ec2:DescribeInstances

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • cloudformation:CreateStack

  • cloudformation:DescribeStacks

  • cloudformation:DeleteStack

  • lambda:InvokeFunction

  • s3:GetBucketPublicAccessBlock

  • s3:GetBucketAcl

  • s3:PutObject

  • ssm:DescribeInstanceInformation

  • ssm:SendCommand

  • ssm:GetCommandInvocation

  • ssm:StartAutomationExecution

  • ssm:GetAutomationExecution

文档步骤

  1. AssertIfTargetClusterExists-验证中指定的 Amazon EKS 集群EksClusterName是否存在且处于ACTIVE状态。如果未找到集群或集群未处于活动状态,则运行手册将跳至。GenerateReport

  2. UpdateEksClusterExists-将内部eksClusterExists变量设置为true用于报告生成。

  3. GetVpcDnsSettings-检索与亚马逊 EKS 集群关联的 Amazon Virtual Private Cloud 的enableDnsSupportenableDnsHostnames设置。

  4. BranchOnVpcDnsSettings-检查两个 VPC DNS 设置是否都已启用。如果其中一个被禁用,则运行手册将跳至。GenerateReport否则,请继续DeployK8sAuthApisResources

  5. DeployK8sAuthApisResources-执行AWSSupport-SetupK8sApiProxyForEKS以部署 Lambda 函数作为代理,用于对 Amazon EKS 集群进行经过身份验证的 Kubernetes API 调用。

  6. RetrieveCoreDNSDeployment-检索有关 CoreDNS 部署的信息,包括容器就绪情况、容器状态以及托管 CoreDNS 容器的节点的准备情况。还会检索 CoreDNS 集群 IP。

  7. RetrieveAndInspectCoreDNSConfigMap-从 Amazon EKS 集群检索 ConfigMap CoreDNS 并检查配置问题,包括中指定域的存根域设置。DnsName

  8. ValidateHpaConfiguration-检查是否为指定命名空间中的 CoreDNS 部署配置了水平容器自动扩缩器 (HPA)。

  9. CheckS3BucketPublicStatus-验证中指定的 Amazon S3 存储桶S3BucketName是否不允许公开或匿名读取或写入权限。

  10. CollectLogToS3-收集 CoreDNS 容器日志并将其上传到指定的 Amazon S3 存储桶。

  11. BranchOnProblematicNodeInstanceId-检查ProblematicNodeInstanceId是否已提供以及 CoreDNS 主机节点是否存在。如果两个条件都满足,则继续执行VerifyThatProblematicNodeInstanceBelongsToCluster。否则,分支到BranchOnCoreDnsDeployment

  12. VerifyThatProblematicNodeInstanceBelongsToCluster-确认中指定的实例ProblematicNodeInstanceId是 Amazon EKS 集群中的工作节点。

  13. UpdateProblematicNodeInstanceStanding-将内部problematicNodeInstanceStanding变量设置为true

  14. GetProblematicInstanceDetails-检索有问题的工作节点的 AMI ID、实例类型、子网 ID 和安全组 ID,以便在创建探测型 Amazon EC2 实例时使用。

  15. CreateProbingInfrastructure-创建实例配置文件并通过与有问题的工作节点位于同一子网中的 AWS CloudFormation 堆栈探测 Amazon EC2 实例。堆栈已命名AWSSupport-TroubleshootEKSDNSFailure-<ExecutionId>

  16. GetProbingInstanceId-从 CloudFormation 堆栈输出中检索正在探测的 Amazon EC2 实例 ID。

  17. WaitForProbingInstanceSSMAgentStateToBeOnline-等待正在探测的亚马逊 EC2 实例上的 Amazon EC2 Systems Manager 代理报告Online状态,然后再继续。

  18. RetrieveCoreDNSPodsIPFromProblematicNode-检索 CoreDNS 容器的 IP 地址,如有问题的工作节点所示。

  19. PerformDNSResolutionOnProbingEC2Instance-使用集群 IP 和 CoreDNS 容器 IP 对正在探测的 Amazon EC2 实例运行 DNS 解析检查。

  20. DeleteCloudFormationStack-删除创建探测 Amazon EC2 实例和实例配置文件的 CloudFormation 堆栈。

  21. UpdateCfnStackDeleted-将内部cfnStackDeleted变量设置为true

  22. BranchOnCoreDnsDeployment-检查是否ProblematicNodeInstanceId未提供以及 CoreDNS 主机节点是否存在。如果两个条件都满足,则继续执行PerformDNSResolutionOnCoreDnsWorkerNodes。否则,请继续CleanupK8sAuthenticationInfrastructure

  23. BranchOnCoreDnsNodesExistForRunCommandSteps-在运行步骤之前检查 CoreDNS 主机节点是否存在。aws:runCommand如果不存在任何节点(例如,当 CoreDNS 的副本为零时),则跳到。CleanupK8sAuthenticationInfrastructure

  24. PerformDNSResolutionOnCoreDnsWorkerNodes-使用集群 IP 和 CoreDNS 容器 IP 直接在 CoreDNS 工作节点上运行 DNS 解析检查。

  25. VerifyNameserverMatchAndKubeProxyLogsAndIPTableEntries-验证域名服务器 IP 是否与集群 IP 匹配,检查 kube-proxy pod 对 API 服务器的访问权限,并验证 CoreDNS 工作节点上的 kube-dns iptables 条目。

  26. VerifyPPSThrottlingOnENIs-检查 CoreDNS packets-per-second 工作节点上每个弹性网络接口 (ENI) 的 DNS (PPS) 限制,以确定潜在的限制。

  27. UpdateChecksOnNodes-将内部checksOnNodes变量设置true为以表示已执行节点级检查。

  28. CleanupK8sAuthenticationInfrastructure-执行删除AWSSupport-SetupK8sApiProxyForEKS自动化期间创建的 Lambda 代理函数和关联资源的Cleanup操作。

  29. UpdateK8sInfrastructreDeleted-将内部K8sInfrastructreDeleted变量设置为true

  30. CleanUpAllResources-如果之前的清理步骤未成功完成,则对所有剩余资源执行全面清理,包括 CloudFormation 堆栈和 Lambda 代理函数。

  31. CollectOutputFromAllRunCommandSteps-收集并合并自动化期间执行的所有aws:runCommand步骤的输出。

  32. GenerateReport-将前面所有步骤的结果汇编成一份全面的评估报告,涵盖VPC DNS设置、CoreDNS部署运行状况 ConfigMap 、配置、HPA配置、日志收集状态和DNS解析检查结果。

输出

GenerateReport.EvalReport-关于所执行的所有 DNS 故障排除检查的全面报告,包括发现的结果和建议的补救措施。