本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWSSupport-TroubleshootEKSALBControllerIssues
Description
AWSSupport-TroubleshootEKSALBControllerIssues 自動化 Runbook 可協助診斷常見問題,這些常見問題會阻止 AWS Load Balancer控制器針對 Kubernetes 輸入和服務正確佈建和管理 Application Load Balancer (ALB) 和 Network Load Balancer (NLB)。
此 Runbook 會執行基本元件的end-to-end驗證,包括 OIDC 身分提供者設定、IRSA 組態、聯網先決條件、輸入/服務組態和資源配額。它也會擷取控制器日誌和相關的 Kubernetes 資源組態,以協助識別組態錯誤或操作問題。
重要
此自動化 Runbook 專為使用 Amazon Elastic Compute Cloud (Amazon EC2) 節點群組的 Amazon EKS 叢集而設計,目前不支援在其中執行的叢集 AWS Fargate。
如何運作?
Runbook 會AWSSupport-TroubleshootEKSALBControllerIssues執行下列高階步驟:
-
驗證 Amazon EKS 叢集狀態、存取項目組態和 OIDC 供應商設定。
-
為 Kubernetes API 通訊建立臨時 Lambda 代理。
-
Checks AWS Load Balancer 控制器部署和服務帳戶組態。
-
驗證 Pod 身分 Webhook 和 IAM 角色注入。
-
驗證 Application Load Balancer 和 Network Load Balancer 佈建的子網路組態和標記。
-
根據目前的用量檢查 Application Load Balancer 和 Network Load Balancer 帳戶配額。
-
驗證輸入和服務資源註釋。
-
檢查工作者節點安全群組標記負載平衡器整合。
-
收集控制器 Pod 日誌以進行診斷。
-
清除臨時身分驗證資源。
-
使用問題清單和修復步驟產生診斷報告。
注意
-
Amazon EKS 叢集必須為執行此自動化的 IAM 實體設定存取項目。叢集的身分驗證模式必須設定為
API或API_AND_CONFIG_MAP。如果沒有適當的存取項目組態,自動化會在初始驗證期間終止。 -
LambdaRoleArn參數是必要的,且必須AWSLambdaBasicExecutionRoleAWSLambdaVPCAccessExecutionRole連接 AWS 受管政策,以允許代理函數與 Kubernetes API 通訊。 -
AWS Load Balancer控制器必須是版本
v2.1.1或更新版本。 -
自動化包含清除步驟,可移除臨時身分驗證基礎設施資源。即使先前的步驟失敗,此清除步驟仍會執行,確保 AWS 您的帳戶中沒有保留孤立的資源。
文件類型
自動化
擁有者
Amazon
平台
/
必要的 IAM 許可
AutomationAssumeRole 參數需要下列動作才能成功使用 Runbook。
cloudformation:CreateStackcloudformation:DeleteStackcloudformation:DescribeStackscloudformation:UpdateStackec2:CreateNetworkInterfaceec2:DeleteNetworkInterfaceec2:DescribeInstancesec2:DescribeNetworkInterfacesec2:DescribeRouteTablesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeVpcseks:DescribeClustereks:ListAssociatedAccessPolicieselasticloadbalancing:DescribeAccountLimitselasticloadbalancing:DescribeLoadBalancersiam:GetRoleiam:ListOpenIDConnectProvidersiam:PassRolelambda:CreateFunctionlambda:DeleteFunctionlambda:GetFunctionlambda:InvokeFunctionlambda:ListTagslambda:TagResourcelambda:UntagResourcelambda:UpdateFunctionCodelogs:CreateLogGrouplogs:CreateLogStreamlogs:DescribeLogGroupslogs:DescribeLogStreamslogs:ListTagsForResourcelogs:PutLogEventslogs:PutRetentionPolicylogs:TagResourcelogs:UntagResourcessm:DescribeAutomationExecutionsssm:GetAutomationExecutionssm:StartAutomationExecutiontag:GetResourcestag:TagResources
指示
請依照下列步驟來設定和執行自動化:
注意
在執行自動化之前,請依照下列步驟設定所需的 IAM 角色:一個用於 Systems Manager Automation 執行 Runbook,另一個用於 Lambda 與 Kubernetes API 通訊:
-
在
TroubleshootEKSALBController-SSM-Role帳戶中建立 SSM 自動化角色。確認信任關係包含下列政策。{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
連接下列 IAM 政策以授予必要的許可:
{ "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" ] } } }] } -
設定 Amazon EKS 叢集的存取項目。這是自動化的必要要求。如需設定存取項目身分驗證模式的步驟,請參閱設定存取項目。
在 Amazon EKS 主控台中,導覽至您的叢集並遵循下列步驟:
在存取區段下,確認您的身分驗證組態設定為
API或API_AND_CONFIG_MAP。-
選擇建立存取項目並設定:
針對 IAM 主體 ARN,選取您建立的 IAM 角色 (
TroubleshootEKSALBController-SSM-Role)。針對類型,選取
Standard。
-
新增存取政策:
針對政策名稱,選取
AmazonEKSAdminViewPolicy。針對存取範圍,選取
Cluster。
選擇 Add Policy (新增政策)。
驗證詳細資訊,然後選擇建立。
-
為 Lambda 函數建立 IAM 角色 (在輸入參數
LambdaRoleArn中參考為 ):-
使用下列信任政策建立新的 IAM 角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
將下列 AWS 受管政策連接至此角色:
AWSLambdaBasicExecutionRoleAWSLambdaVPCAccessExecutionRole
-
請注意此角色的 ARN,因為
LambdaRoleArn輸入參數需要此角色。
-
-
在 AWS Systems Manager 主控台中導覽至 AWSSupport-TroubleshootEKSALBControllerIssues
。 -
選擇 Execute automation (執行自動化)。
-
針對輸入參數,輸入下列項目:
-
AutomationAssumeRole (選用):
類型:AWS::IAM::Role::Arn
描述:(選用) 允許 Systems Manager Automation 代表您執行動作的 AWS Identity and Access Management (IAM) 角色的 Amazon Resource Name (ARN)。如果未指定角色,Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
允許模式:^arn:(?:aws|aws-cn|aws-us-gov):iam::\d{12}:role/?【a-zA-Z_0-9+=,.@\-_/】+$
-
EksClusterName (必要):
類型:字串
描述:(必要) Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的名稱。
允許模式:^【0-9A-Za-z】【A-Za-z0-9-_】{0,99}$
-
ALBControllerDeploymentName (選用):
類型:字串
描述:(選用) Amazon EKS 叢集中的 AWS Load Balancer控制器部署名稱。這通常是 'aws-load-balancer-controller',除非您已在安裝期間加以自訂。
允許模式:^【a-z0-9】(【-.a-z0-9】{0,251}【a-z0-9】)?$
預設:aws-load-balancer-controller
-
ALBControllerNamespace (選用):
類型:字串
描述:(選用) 部署 AWS Load Balancer控制器的 Kubernetes 命名空間。根據預設,這是「kube-system」,但如果您已在自訂命名空間中安裝控制器,則可能會有所差異。
允許模式:^【a-z0-9】(【-a-z0-9】{0,61}【a-z0-9】)?$
預設:kube-system
-
ServiceAccountName (選用):
類型:字串
描述:(選用) 與 AWS Load Balancer控制器相關聯的 Kubernetes 服務帳戶名稱。除非在安裝期間自訂,否則這通常是 'aws-load-balancer-controller'。
允許模式:^【a-z0-9】(【-.a-z0-9】{0,251}【a-z0-9】)?$
預設:aws-load-balancer-controller
-
ServiceAccountNamespace (選用):
類型:字串
描述:(選用) AWS Load Balancer控制器的服務帳戶所在的 Kubernetes 命名空間。這通常是「kube-system」,但如果您已使用自訂命名空間,則可能會有所不同。
允許模式:^【a-z0-9】(【-a-z0-9】{0,61}【a-z0-9】)?$
預設:kube-system
-
IngressName (選用):
類型:字串
描述:(選用) 要驗證的傳入資源名稱 (Application Load Balancer)。如果未指定,則會略過傳入驗證。
允許模式:^$|^【a-z0-9】【a-z0-9.-】{0,251}【a-z0-9】$
預設:"" (空字串)
-
IngressNamespace (選用):
類型:字串
描述:(選用) 傳入資源的命名空間。如果指定
IngressName,則為必要項目。允許模式:^$|^【a-z0-9】【a-z0-9-】{0,61}【a-z0-9】$
預設:"" (空字串)
-
ServiceName (選用):
類型:字串
描述:(選用) 驗證 Network Load Balancer (Network Load Balancer) 註釋的特定服務資源名稱。如果未指定,則會略過服務資源驗證。
允許模式:^$|^【a-z0-9】【a-z0-9.-】{0,251}【a-z0-9】$
預設:"" (空字串)
-
ServiceNamespace (選用):
類型:字串
描述:(選用) 服務資源的命名空間。如果指定
ServiceName,則為必要項目。允許模式:^$|^【a-z0-9】【a-z0-9-】{0,61}【a-z0-9】$
預設:"" (空字串)
-
LambdaRoleArn (必要):
類型:AWS::IAM::Role::Arn
描述:(必要) 允許 AWS Lambda (Lambda) 函數存取所需 AWS 服務和資源的 IAM 角色 ARN。將 AWS 受管政策:
AWSLambdaBasicExecutionRole和AWSLambdaVPCAccessExecutionRole與您的 lambda 函數執行 IAM 角色建立關聯。允許模式:^arn:(?:aws|aws-cn|aws-us-gov):iam::\d{12}:role/?【a-zA-Z_0-9+=,.@\-_/】+$
-
-
選擇 Execute (執行)。
-
自動化會啟動。
-
文件會執行下列步驟:
-
ValidateAccessEntryAndOIDCProvider:
透過檢查存取項目許可和 OIDC 提供者組態來驗證 Amazon EKS 叢集 IAM 設定。
-
SetupK8sAuthenticationClient:
執行 SAW 文件 AWSSupport-SetupK8sApiProxyForEKS,以設定 lambda 函數在叢集上執行 Amazon EKS API 呼叫。
-
VerifyALBControllerAndIRSASetup:
檢查指定的服務帳戶和 Application Load Balancer 控制器是否存在於各自的命名空間中。同時檢查 Application Load Balancer 控制器的服務帳戶角色註釋和信任政策。
-
VerifyPodIdentityWebhookAndEnv:
檢查 pod-identity-webhook 是否正在執行。同時檢查 IRSA 是否注入 Pod 的 ENV 變數。
-
ValidateSubnetRequirements:
檢查具有 8 個可用 IP 的兩個 AZ 中至少兩個子網路,公有/私有負載平衡器存在適當的子網路標記。
-
CheckLoadBalancerLimitsAndUsage:
比較帳戶限制與 Application Load Balancer 和 Network Load Balancer 的數量。
-
CheckIngressOrServiceAnnotations:
檢查輸入和服務資源中的註釋和規格是否正確,以確保它們已針對 Application Load Balancer 和 Network Load Balancer 使用正確設定。
-
CheckWorkerNodeSecurityGroupTags:
確認連接到工作者節點的安全群組只有一個必要的叢集標籤。
-
CaptureALBControllerLogs:
從 Amazon EKS 叢集中執行的 AWS Load Balancer控制器 Pod 擷取最新的診斷日誌。
-
CleanupK8sAuthenticationClient:
使用 'Cleanup' 操作執行 SAW 文件 'AWSSupport-SetupK8sApiProxyForEKS',以清除在自動化過程中建立的資源。
-
GenerateReport:
產生自動化報告。
-
-
執行完成後,請檢閱輸出區段以取得執行的詳細結果:
-
報告:
提供所有已執行檢查的完整摘要,包括 Amazon EKS 叢集的狀態、Application Load Balancer 控制器設定、IRSA 組態、子網路需求、負載平衡器限制、輸入/服務註釋、工作者節點安全群組標籤,以及 Application Load Balancer 控制器日誌。它還包括任何已識別的問題和建議的修復步驟。
-
參考
Systems Manager Automation
AWS Load Balancer控制器相關的文件