ターゲットクラスターを登録する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

ターゲットクラスターを登録する

クラスターを登録すると、Argo CD がアプリケーションをそのクラスターにデプロイできるようになります。Argo CD が動作しているのと同じクラスター (ローカルクラスター) を登録することも、別のアカウントやリージョンのリモートクラスターを登録することもできます。クラスターが新規登録されると、そのクラスター内にアプリケーションが作成されるまで、クラスターの接続ステータスは「不明」のままになります。クラスターの登録後に Argo CD アプリケーションを作成するには、「Application を作成する」を参照してください。

前提条件

  • EKS クラスターに Argo CD 機能が作成されていること

  • クラスターと通信できるように kubectl が設定されていること

  • リモートクラスターの場合: 適切な IAM アクセス許可およびアクセスエントリ

ローカルクラスターを登録する

Argo CD が動作しているのと同じクラスターにアプリケーションをデプロイするには、そのクラスターをデプロイターゲットとして登録します。

重要

Argo CD 機能は、ローカルクラスターを自動的には登録しません。アプリケーションを同じクラスターにデプロイするには、そのクラスターを明示的に登録する必要があります。クラスター名 in-cluster を使用して、ほとんどのオンラインの Argo CD の例と互換性を持たせることができます。

注記

EKS アクセスエントリは、Argo CD 機能ロールを持つローカルクラスターに対して自動的に作成されますが、デフォルトでは Kubernetes RBAC アクセス許可は付与されません。これは最小特権の原則に従います。ユースケースに基づいて Argo CD に必要なアクセス許可を明示的に設定する必要があります。例えば、このクラスターを Argo CD ハブとしてのみ使用してリモートクラスターを管理する場合、ローカルデプロイのアクセス許可は必要ないはずです。設定オプションについては、以下のアクセスエントリ RBAC 要件セクションを参照してください。

Argo CD CLI を使用する:

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \ --name local-cluster

Kubernetes シークレットを使用する:

apiVersion: v1 kind: Secret metadata: name: local-cluster namespace: argocd labels: argocd.argoproj.io/secret-type: cluster stringData: name: local-cluster server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster project: default

以下のとおり設定を適用します。

kubectl apply -f local-cluster.yaml
注記

Kubernetes API サーバー URL ではなく、server フィールドで EKS クラスター ARN を使用します。マネージド機能では、ARN でクラスターを識別する必要があります。デフォルトの kubernetes.default.svc はサポートされていません。

リモートクラスターを登録する

リモートクラスターにデプロイするには:

ステップ 1: リモートクラスターにアクセスエントリを作成する

region-code はリモートクラスターがある AWS リージョンに置き換え、remote-cluster はリモートクラスターの名前に置き換え、ARN は Argo CD 機能ロール ARN に置き換えます。

aws eks create-access-entry \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --type STANDARD

ステップ 2: アクセスポリシーを Kubernetes RBAC アクセス許可に関連付ける

アクセスエントリには、Argo CD がアプリケーションをデプロイするための Kubernetes RBAC アクセス許可が必要です。すぐに開始するには、AmazonEKSClusterAdminPolicy を使用できます。

aws eks associate-access-policy \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
重要

AmazonEKSClusterAdminPolicy は、完全なクラスター管理者アクセスを提供します (system:masters に相当)。これは開始するのに便利ですが、本番環境では使用しないでください。本番環境では、アクセスエントリをカスタム Kubernetes グループに関連付け、適切なロールバインディングまたはクラスターロールバインディングを作成することで、より制限の厳しいアクセス許可を使用してください。最小特権の設定については、以下の本番環境設定セクションを参照してください。

ステップ 3: Argo CD にクラスターを登録する

Argo CD CLI を使用する:

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \ --name remote-cluster

Kubernetes シークレットを使用する:

apiVersion: v1 kind: Secret metadata: name: remote-cluster namespace: argocd labels: argocd.argoproj.io/secret-type: cluster stringData: name: remote-cluster server: arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster project: default

以下のとおり設定を適用します。

kubectl apply -f remote-cluster.yaml

クロスアカウントクラスター

さまざまな AWS アカウント内のクラスターにデプロイするには:

  1. ターゲットアカウントで、ソースアカウントの Argo CD IAM 機能ロール ARN をプリンシパルとして使用して、ターゲット EKS クラスター上にアクセスエントリを作成します。

  2. アクセスポリシーを適切な Kubernetes RBAC アクセス許可に関連付けします。

  3. EKS クラスター ARN を使用して Argo CD にクラスターを登録します。

追加で IAM ロールを作成したり、信頼ポリシーを設定したりする必要はありません。EKS アクセスエントリがクロスアカウントアクセスを処理します。

クラスター ARN 形式にはリージョンが含まれているため、クロスリージョンデプロイでは同じリージョンデプロイと同じプロセスが使用されます。

クラスター登録を検証する

登録済みのクラスターを表示します。

kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster

あるいは、Argo CD UI の [設定] → [クラスター] でクラスターステータスを確認します。

プライベートクラスター

Argo CD 機能では、VPC ピアリングや特殊なネットワーク設定を施すことなく、完全にプライベートな EKS クラスターに透過的にアクセスできます。

AWS は、Argo CD 機能とプライベートリモートクラスターとの接続を自動的に管理します。

単に ARN を使用してプライベートクラスターを登録するだけで、別途ネットワークをセットアップする必要はありません。

アクセスエントリの RBAC 要件

Argo CD 機能を作成すると、機能ロールに対して EKS アクセスエントリが自動的に作成されますが、デフォルトでは Kubernetes RBAC アクセス許可は付与されません。この設計は、最小特権の原則に従った意図的なものです。異なるユースケースには、異なるアクセス許可が必要となります。

例: *クラスターを Argo CD ハブとしてのみ使用してリモートクラスターを管理する場合、ローカルデプロイのアクセス許可は必要ありません。*アプリケーションをローカルにデプロイする場合は、クラスター全体の読み取りアクセスと特定の名前空間への書き込みアクセスが必要です。*CRD を作成する必要がある場合は、追加のクラスター管理者アクセス許可が必要です。

要件に基づいて Argo CD に必要なアクセス許可を明示的に設定する必要があります。

Argo CD の最小アクセス許可

Argo CD には、エラーなしで機能するために 2 種類のアクセス許可が必要です。

読み取りアクセス許可 (クラスター全体): Argo CD は以下のために、クラスター全体のすべてのリソースタイプとカスタムリソース定義 (CRD) を読み取ることができる必要があります。

  • リソース検出とヘルスチェック

  • 目的の状態と実際の状態の間のドリフトの検出

  • デプロイ前のリソースの検証

書き込みアクセス許可 (名前空間固有): Argo CD には、Application で定義されたリソースの作成、更新、削除のアクセス許可が必要です。

  • アプリケーションワークロード (デプロイ、サービス、ConfigMaps など) をデプロイする

  • カスタムリソースの適用 (アプリケーション固有の CRD)

  • アプリケーションのライフサイクルを管理する

Quick Setup

迅速な開始、テスト、または開発環境については、AmazonEKSClusterAdminPolicy を使用します。

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
重要

AmazonEKSClusterAdminPolicy は、完全なクラスター管理者アクセス (system:masters に相当) を提供します。これには、CRD の作成、クラスター全体のリソースの変更、任意の名前空間へのデプロイが含まれます。これは開発や POC には便利ですが、本番環境では使用しないでください。本番環境では、以下の最小特権設定を使用します。

最小特権原則に基づく本番環境設定

本番環境では、以下を許可するカスタム Kubernetes RBAC を作成します。

  • すべてのリソースへのクラスター全体の読み取りアクセス (検出とヘルスチェック用)

  • 名前空間固有の書き込みアクセス (デプロイ用)

ステップ 1: アクセスエントリをカスタム Kubernetes グループに関連付ける

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \ --access-scope type=namespace,namespaces=app-namespace

ステップ 2: 読み取りアクセス用のクラスターロールを作成する

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: argocd-read-all rules: # Read access to all resources for discovery and health checks - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list", "watch"]

ステップ 3: アプリケーション名前空間への書き込みアクセス用ロールを作成する

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: argocd-deploy namespace: app-namespace rules: # Full access to deploy application resources - apiGroups: ["*"] resources: ["*"] verbs: ["*"]

ステップ 4: ロールを Kubernetes グループにバインドする

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: argocd-read-all subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: argocd-read-all apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: argocd-deploy namespace: app-namespace subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: argocd-deploy apiGroup: rbac.authorization.k8s.io
注記

アクセスエントリのグループ名形式は、eks-access-entry: の後にプリンシパル ARN が続きます。Argo CD がアプリケーションをデプロイする名前空間ごとに、このロールバインド手順を繰り返します。

重要

Argo CD は、特定の名前空間にのみデプロイする場合でも、ヘルスチェックと検出のためにクラスター全体のすべてのリソースタイプを読み取ることができる必要があります。クラスター全体の読み取りアクセスがないと、アプリケーションの状態をチェックするときに Argo CD にエラーが表示されます。

Project でクラスターアクセスを制限する

プロジェクトを使用して、spec.destinations で許可されるターゲットクラスターと名前空間を設定することで、Application がデプロイできるクラスターと名前空間を制御します。

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: destinations: - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster namespace: '*' - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster namespace: '*' sourceRepos: - 'https://github.com/example/production-apps'

詳細については、「Argo CD Project を操作する」を参照してください。

その他のリソース