翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWSSupport-TroubleshootEKSALBControllerIssues
説明
AWSSupport-TroubleshootEKSALBControllerIssues 自動化ランブックは、 AWS Load Balancer Controller が Kubernetes イングレスとサービスの Application Load Balancer (ALB) と Network Load Balancer (NLB) を適切にプロビジョニングおよび管理できない一般的な問題を診断するのに役立ちます。
このランブックは、OIDC ID プロバイダーの設定、IRSA 設定、ネットワークの前提条件、進入/サービス設定、リソースクォータなど、重要なコンポーネントのend-to-endの検証を実行します。また、コントローラーログと関連する Kubernetes リソース設定をキャプチャして、設定ミスや運用上の問題を特定するのに役立ちます。
重要
このオートメーションランブックは、Amazon Elastic Compute Cloud (Amazon EC2) ノードグループを使用する Amazon EKS クラスター向けに設計されており、現在 で実行されているクラスターはサポートされていません AWS Fargate。
動作の仕組み
ランブックは、以下の大まかなステップAWSSupport-TroubleshootEKSALBControllerIssuesを実行します。
-
Amazon EKS クラスターのステータス、アクセスエントリ設定、および OIDC プロバイダーの設定を検証します。
-
Kubernetes API 通信用の一時的な Lambda プロキシを作成します。
-
Checks AWS Load Balancer Controller のデプロイとサービスアカウント設定。
-
ポッド ID ウェブフックと IAM ロールインジェクションを検証します。
-
Application Load Balancer および Network Load Balancer プロビジョニングのサブネット設定とタグ付けを検証します。
-
Application Load Balancer と Network Load Balancer のアカウントクォータを現在の使用状況と照合します。
-
イングレスとサービスリソースの注釈を検証します。
-
ワーカーノードのセキュリティグループのタグ付けでロードバランサーの統合をチェックします。
-
診断用のコントローラーポッドログを収集します。
-
一時的な認証リソースをクリーンアップします。
-
検出結果と修復ステップを含む診断レポートを生成します。
注記
-
Amazon EKS クラスターには、このオートメーションを実行している IAM エンティティ用のアクセスエントリが設定されている必要があります。クラスターの認証モードは、
APIまたは に設定する必要がありますAPI_AND_CONFIG_MAP。適切なアクセスエントリ設定がないと、自動化は初期検証中に終了します。 -
LambdaRoleArnパラメータは必須です。プロキシ関数が Kubernetes API と通信できるようにするには、 AWS 管理ポリシーAWSLambdaBasicExecutionRoleと がAWSLambdaVPCAccessExecutionRoleアタッチされている必要があります。 -
AWS Load Balancerコントローラーはバージョン
v2.1.1以降である必要があります。 -
自動化には、一時的な認証インフラストラクチャリソースを削除するクリーンアップステップが含まれています。このクリーンアップステップは、前のステップが失敗しても実行され、 AWS アカウントに孤立したリソースが残っていません。
ドキュメントタイプ
オートメーション
[所有者]
Amazon
[Platforms] (プラットフォーム)
/
必要な IAM アクセス許可
AutomationAssumeRole パラメータでは、ランブックを正常に使用するために、次のアクションが必要です。
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 ロールを設定します。1 つは Systems Manager Automation がランブックを実行するためのロール、もう 1 つは 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
-
LambdaRoleArn入力パラメータに必要なため、このロールの ARN を書き留めます。
-
-
AWS Systems Manager コンソールで AWSSupport-TroubleshootEKSALBControllerIssues
に移動します。 -
[Execute automation (自動化の実行)] を選択してください。
-
次の入力パラメータを入力します。
-
AutomationAssumeRole(オプション):
タイプ: AWS::IAM::Role::Arn
説明: (オプション) Systems Manager Automation がユーザーに代わってアクションを実行できるようにする AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN)。ロールを指定しない場合、Systems Manager Automation はこのランブックを開始するユーザーのアクセス許可を使用します。
許可されるパターン: ^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 (オプション):
タイプ: 文字列
説明: (オプション) 検証する Ingress リソースの名前 (Application Load Balancer)。指定しない場合、イングレス検証はスキップされます。
許可されるパターン: ^$|^[a-z0-9][a-z0-9.-]{0,251}[a-z0-9]$
デフォルト: 「」 (空の文字列)
-
IngressNamespace (オプション):
タイプ: 文字列
説明: (オプション) Ingress リソースの名前空間。
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+=,.@\-_/]+$
-
-
[実行] を選択してください。
-
自動化が開始されます。
-
ドキュメントは以下のステップを実行します。
-
ValidateAccessEntryAndOIDCProvider:
アクセスエントリのアクセス許可と OIDC プロバイダーの設定を確認して、Amazon EKS クラスターの IAM 設定を検証します。
-
SetupK8sAuthenticationClient:
SAW ドキュメント AWSSupport-SetupK8sApiProxyForEKS を実行して、クラスターで Amazon EKS API コールを実行するための Lambda 関数を設定します。
-
VerifyALBControllerAndIRSASetup:
指定されたサービスアカウントと Application Load Balancer コントローラーがそれぞれの名前空間に存在するかどうかを確認します。また、Application Load Balancer コントローラーのサービスアカウントロールの注釈と信頼ポリシーも確認します。
-
VerifyPodIdentityWebhookAndEnv:
pod-identity-webhook が実行されているかどうかを確認します。また、IRSA がポッドの ENV 変数に挿入されているかどうかも確認します。
-
ValidateSubnetRequirements:
2 つの AZ に少なくとも 2 つのサブネットがあり、使用可能な IP が 8 つあることを確認します。パブリック/プライベートロードバランサーには適切なサブネットタグ付けがあります。
-
CheckLoadBalancerLimitsAndUsage:
アカウント制限を Application Load Balancer と Network Load Balancer の数と比較します。
-
CheckIngressOrServiceAnnotations:
Ingress and Service リソースで正しい注釈と仕様をチェックし、Application Load Balancer と Network Load Balancer の使用用に正しく設定されていることを確認します。
-
CheckWorkerNodeSecurityGroupTags:
ワーカーノードにアタッチされた 1 つのセキュリティグループに、必要なクラスタータグがあることを確認します。
-
CaptureALBControllerLogs:
Amazon EKS クラスターで実行されている AWS Load Balancerコントローラーポッドから最新の診断ログを取得します。
-
CleanupK8sAuthenticationClient:
「クリーンアップ」オペレーションを使用して SAW ドキュメントAWSSupport-SetupK8sApiProxyForEKS」を実行し、オートメーションの一部として作成されたリソースをクリーンアップします。
-
GenerateReport:
自動化レポートを生成します。
-
-
実行が完了したら、出力セクションで実行の詳細な結果を確認します。
-
レポート:
Amazon EKS クラスターのステータス、Application Load Balancer Controller のセットアップ、IRSA 設定、サブネット要件、ロードバランサーの制限、進入/サービス注釈、ワーカーノードセキュリティグループタグ、Application Load Balancer Controller ログなど、実行されたすべてのチェックの包括的な概要を提供します。また、特定された問題や推奨される修復手順も含まれます。
-
リファレンス
Systems Manager Automation
AWS Load Balancerコントローラーに関連するドキュメント