View a markdown version of this page

AWSSupport-TroubleshootEKSALBControllerIssues - AWS Systems Manager Automation Runbook 參考

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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 實體設定存取項目。叢集的身分驗證模式必須設定為 APIAPI_AND_CONFIG_MAP。如果沒有適當的存取項目組態,自動化會在初始驗證期間終止。

  • LambdaRoleArn 參數是必要的,且必須AWSLambdaBasicExecutionRoleAWSLambdaVPCAccessExecutionRole連接 AWS 受管政策,以允許代理函數與 Kubernetes API 通訊。

  • AWS Load Balancer控制器必須是版本 v2.1.1或更新版本。

  • 自動化包含清除步驟,可移除臨時身分驗證基礎設施資源。即使先前的步驟失敗,此清除步驟仍會執行,確保 AWS 您的帳戶中沒有保留孤立的資源。

執行此自動化 (主控台)

文件類型

 自動化

擁有者

Amazon

平台

/

必要的 IAM 許可

AutomationAssumeRole 參數需要下列動作才能成功使用 Runbook。

  • 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

指示

請依照下列步驟來設定和執行自動化:

注意

在執行自動化之前,請依照下列步驟設定所需的 IAM 角色:一個用於 Systems Manager Automation 執行 Runbook,另一個用於 Lambda 與 Kubernetes API 通訊:

  1. TroubleshootEKSALBController-SSM-Role帳戶中建立 SSM 自動化角色。確認信任關係包含下列政策。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 連接下列 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" ] } } }] }
  3. 設定 Amazon EKS 叢集的存取項目。這是自動化的必要要求。如需設定存取項目身分驗證模式的步驟,請參閱設定存取項目

    在 Amazon EKS 主控台中,導覽至您的叢集並遵循下列步驟:

    • 存取區段下,確認您的身分驗證組態設定為 APIAPI_AND_CONFIG_MAP

    • 選擇建立存取項目並設定:

      • 針對 IAM 主體 ARN,選取您建立的 IAM 角色 (TroubleshootEKSALBController-SSM-Role)。

      • 針對類型,選取 Standard

    • 新增存取政策:

      • 針對政策名稱,選取 AmazonEKSAdminViewPolicy

      • 針對存取範圍,選取 Cluster

    • 選擇 Add Policy (新增政策)

    • 驗證詳細資訊,然後選擇建立

  4. 為 Lambda 函數建立 IAM 角色 (在輸入參數LambdaRoleArn中參考為 ):

    • 使用下列信任政策建立新的 IAM 角色:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    • 將下列 AWS 受管政策連接至此角色:

      • AWSLambdaBasicExecutionRole

      • AWSLambdaVPCAccessExecutionRole

    • 請注意此角色的 ARN,因為LambdaRoleArn輸入參數需要此角色。

  1. 在 AWS Systems Manager 主控台中導覽至 AWSSupport-TroubleshootEKSALBControllerIssues

  2. 選擇 Execute automation (執行自動化)

  3. 針對輸入參數,輸入下列項目:

    • 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 受管政策: AWSLambdaBasicExecutionRoleAWSLambdaVPCAccessExecutionRole與您的 lambda 函數執行 IAM 角色建立關聯。

      允許模式:^arn:(?:aws|aws-cn|aws-us-gov):iam::\d{12}:role/?【a-zA-Z_0-9+=,.@\-_/】+$

  4. 選擇 Execute (執行)

  5. 自動化會啟動。

  6. 文件會執行下列步驟:

    1. ValidateAccessEntryAndOIDCProvider:

      透過檢查存取項目許可和 OIDC 提供者組態來驗證 Amazon EKS 叢集 IAM 設定。

    2. SetupK8sAuthenticationClient:

      執行 SAW 文件 AWSSupport-SetupK8sApiProxyForEKS,以設定 lambda 函數在叢集上執行 Amazon EKS API 呼叫。

    3. VerifyALBControllerAndIRSASetup:

      檢查指定的服務帳戶和 Application Load Balancer 控制器是否存在於各自的命名空間中。同時檢查 Application Load Balancer 控制器的服務帳戶角色註釋和信任政策。

    4. VerifyPodIdentityWebhookAndEnv:

      檢查 pod-identity-webhook 是否正在執行。同時檢查 IRSA 是否注入 Pod 的 ENV 變數。

    5. ValidateSubnetRequirements:

      檢查具有 8 個可用 IP 的兩個 AZ 中至少兩個子網路,公有/私有負載平衡器存在適當的子網路標記。

    6. CheckLoadBalancerLimitsAndUsage:

      比較帳戶限制與 Application Load Balancer 和 Network Load Balancer 的數量。

    7. CheckIngressOrServiceAnnotations:

      檢查輸入和服務資源中的註釋和規格是否正確,以確保它們已針對 Application Load Balancer 和 Network Load Balancer 使用正確設定。

    8. CheckWorkerNodeSecurityGroupTags:

      確認連接到工作者節點的安全群組只有一個必要的叢集標籤。

    9. CaptureALBControllerLogs:

      從 Amazon EKS 叢集中執行的 AWS Load Balancer控制器 Pod 擷取最新的診斷日誌。

    10. CleanupK8sAuthenticationClient:

      使用 'Cleanup' 操作執行 SAW 文件 'AWSSupport-SetupK8sApiProxyForEKS',以清除在自動化過程中建立的資源。

    11. GenerateReport:

      產生自動化報告。

  7. 執行完成後,請檢閱輸出區段以取得執行的詳細結果:

    1. 報告:

      提供所有已執行檢查的完整摘要,包括 Amazon EKS 叢集的狀態、Application Load Balancer 控制器設定、IRSA 組態、子網路需求、負載平衡器限制、輸入/服務註釋、工作者節點安全群組標籤,以及 Application Load Balancer 控制器日誌。它還包括任何已識別的問題和建議的修復步驟。

參考

Systems Manager Automation

AWS Load Balancer控制器相關的文件