ack-pod-identity-webhook は、Container Compute Service の RAM ロールによるサービスアカウント(RRSA)機能を使用するのに役立つコンポーネントです。 ack-pod-identity-webhook は、アプリケーションへのアクセスに必要な OpenID Connect(OIDC)トークンと環境変数をアプリケーションのポッドに自動的に挿入できます。 この方法では、OIDC トークンと環境変数を構成する必要はありません。 このトピックでは、ack-pod-identity-webhook の機能、使用上の注意、およびリリースノートについて説明します。
概要
次の図は、ack-pod-identity-webhook のアーキテクチャを示しています。
例
この例では、アプリケーションは RRSA 機能を使用して指定されたロールを引き受け、現在の Alibaba Cloud アカウントに属するすべてのクラスターに関する情報を取得します。 この例では、次のリソースが使用されます。
名前空間: rrsa-demo
サービスアカウント: demo-sa
RAM ロール: ack-pod-identity-webhook-demo
ポッドの名前空間に pod-identity.alibabacloud.com/injection: 'on' ラベルを追加すると、ack-pod-identity-webhook は、ポッドで使用されるサービスアカウントのアノテーションに基づいて、関連する構成をポッドに自動的に挿入します。 この例では、次の手順を実行します。
クラスターの RRSA 機能を有効にします。
コンテナサービス Kubernetes 版コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。 クラスター詳細ページの左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。
[基本情報] タブをクリックします。 [クラスター情報] セクションで、[RRSA OIDC] の右側にある [RRSA を有効にする] をクリックします。
表示されるメッセージで、[確認] をクリックします。
クラスターのステータスが [更新中] から [実行中] に変わると、クラスターの RRSA 機能が有効になります。 ID プロバイダー(IdP)の URL と Alibaba Cloud Resource Name(ARN)は、[RRSA OIDC] パラメーターの右側に表示されます。
ack-pod-identity-webhook をインストールします。
左側のナビゲーションウィンドウで、 を選択します。
[セキュリティ] タブをクリックし、ack-pod-identity-webhook を見つけて、[インストール] をクリックします。
表示されるメッセージで、情報を確認し、[OK] をクリックします。
ack-pod-identity-webhook-demo Resource Access Management(RAM)ロールを作成します。
Alibaba Cloud アカウントを使用して、RAM コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ロール] ページで、[ロールの作成] をクリックします。
[ロールの作成] ページで、[信頼エンティティの選択] セクションの [idp] を選択し、[次へ] をクリックします。
[ロールの構成] ウィザードページで、次のパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
[ロール名]
ack-pod-identity-webhook-demo
[idp タイプ]
OIDC
[idp の選択]
ID プロバイダー(IdP)を選択します。 IdP は ack-rrsa-<cluster_id> 形式で名前が付けられます。 <cluster_id> はクラスターの ID を示します。
[条件]
[oidc:iss]: デフォルト値を使用します。
[oidc:aud]: [sts.aliyuncs.com] を選択します。
[oidc:sub]: 条件演算子を [stringequals] に設定し、値を system:serviceaccount:<namespace>:<serviceAccountName> に設定します。
<namespace>: アプリケーションの名前空間。
<serviceAccountName>: サービスアカウントの名前。
この例では、
system:serviceaccount:rrsa-demo:demo-saと入力します。
AliyunCSReadOnlyAccess ポリシーを RAM ロールにアタッチして、アプリケーションに必要な権限を付与します。 詳細については、「RAM ロールに権限を付与する」をご参照ください。
アプリケーションをデプロイします。
ACS クラスターに接続します。 詳細については、「クラスターに接続する」をご参照ください。
次のコンテンツに基づいて、demo.yaml という名前のファイルを作成します。
次の YAML コンテンツでは、
pod-identity.alibabacloud.com/injection: 'on'ラベルがrrsa-demo名前空間に追加され、pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demoアノテーションがdemo-saサービスアカウントに追加され、ack-pod-identity-webhook の自動挿入機能が有効になります。 RRSA デモの詳細については、「コード」をご参照ください。説明次の例で使用されている
registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0イメージは、インターネット経由でプルされます。 クラスターでインターネットアクセスが有効になっていることを確認してください。 詳細については、「既存の ACS クラスターでインターネットにアクセスできるようにする」をご参照ください。--- apiVersion: v1 kind: Namespace metadata: name: rrsa-demo labels: pod-identity.alibabacloud.com/injection: 'on' --- apiVersion: v1 kind: ServiceAccount metadata: name: demo-sa namespace: rrsa-demo annotations: pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demo --- apiVersion: v1 kind: Pod metadata: name: demo namespace: rrsa-demo spec: serviceAccountName: demo-sa containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0 imagePullPolicy: "Always" args: - rrsa - demo name: demo restartPolicy: OnFailure次のコマンドを実行して、アプリケーションをデプロイします。
kubectl apply -f demo.yaml
次のコマンドを実行して、ack-pod-identity-webhook がアプリケーション用に作成されたポッドに必要な構成を挿入したかどうかを確認します。
kubectl -n rrsa-demo get pod demo -o yaml出力は、ack-pod-identity-webhook が次の構成をポッドに挿入したことを示しています。
フィールド
パラメーター
説明
envALIBABA_CLOUD_ROLE_ARN引き受ける RAM ロールの ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARNOIDC IdP の ARN。
ALIBABA_CLOUD_OIDC_TOKEN_FILEOIDC トークンファイルのパス。
VolumeMountsrrsa-oidc-tokenOIDC トークンをマウントするための構成。
Volumesrrsa-oidc-tokenOIDC トークンをマウントするための構成。
次のコマンドを実行して、アプリケーションのログを出力します。
kubectl -n rrsa-demo logs demo期待される結果:
cluster id: c66e40b731ab24f96b36bec5b1a******, cluster name: test-**** cluster id: cbec9a1f7b433470ebe4c900552******, cluster name: test-****
カスタム構成
ack-pod-identity-webhook の次の構成をカスタマイズできます: 名前空間、サービスアカウント、およびポッドの構成。
名前空間の構成
パラメーター | タイプ | 説明 | サンプルコード |
pod-identity.alibabacloud.com/injection | ラベル | 現在の名前空間のポッドに対して自動挿入を有効にするかどうかを指定します。
| |
サービスアカウントの構成
パラメーター | タイプ | 説明 | サンプルコード |
pod-identity.alibabacloud.com/role-name | アノテーション | サービスアカウントに割り当てられた RAM ロールの名前。 このパラメーターを空のままにするか、無効な値に設定すると、サービスアカウントを使用するポッドでは自動挿入は有効になりません。 | |
pod-identity.alibabacloud.com/service-account-token-expiration | アノテーション | サービスアカウントを使用するポッドにマウントされた OIDC トークンの有効期間。
説明 このパラメーターがサービスアカウントとポッドの両方で指定されている場合、ポッドの設定が優先されます。 | |
ポッドの構成
パラメーター | タイプ | 説明 | サンプルコード |
pod-identity.alibabacloud.com/service-account-token-expiration | アノテーション | ポッドにマウントされた OIDC トークンの有効期間。
説明 このパラメーターがサービスアカウントとポッドの両方で指定されている場合、ポッドの設定が優先されます。 | |
pod-identity.alibabacloud.com/only-containers | アノテーション | 構成を挿入するポッド内のコンテナーの名前を指定します。 複数のコンテナー名はコンマ(,)で区切ります。 説明 コンテナー名が | |
pod-identity.alibabacloud.com/skip-containers | アノテーション | 構成挿入リストから除外するコンテナーの名前を指定します。 複数のコンテナー名はコンマ(,)で区切ります。 説明 コンテナー名が | |
RRSA SDK デモ
プログラミング言語 | サポートされている SDK バージョン | デモ |
Go | Alibaba Cloud Credentials for Go 1.2.6 以降 | |
Java | Alibaba Cloud Credentials for Java 0.2.10 以降 | |
Python 3 | Alibaba Cloud Credentials for Python 0.3.1 以降 | |
Node.js および TypeScript |
リリースノート
2024 年 6 月
バージョン番号 | イメージアドレス | 説明 | リリース日 | 影響 |
0.1.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.1.0-gbddcb74-aliyun |
| 2024-06-30 | コンポーネントの更新中に例外が発生した場合、ポッドの作成に失敗する可能性があります。 閑散時に更新を実行することをお勧めします。 |