すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:ack-pod-identity-webhook

最終更新日:Jan 27, 2025

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 は、ポッドで使用されるサービスアカウントのアノテーションに基づいて、関連する構成をポッドに自動的に挿入します。 この例では、次の手順を実行します。

  1. クラスターの RRSA 機能を有効にします。

    1. コンテナサービス Kubernetes 版コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。 クラスター詳細ページの左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。

    3. [基本情報] タブをクリックします。 [クラスター情報] セクションで、[RRSA OIDC] の右側にある [RRSA を有効にする] をクリックします。

    4. 表示されるメッセージで、[確認] をクリックします。

      クラスターのステータスが [更新中] から [実行中] に変わると、クラスターの RRSA 機能が有効になります。 ID プロバイダー(IdP)の URL と Alibaba Cloud Resource Name(ARN)は、[RRSA OIDC] パラメーターの右側に表示されます。

  2. ack-pod-identity-webhook をインストールします。

    1. 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

    2. [セキュリティ] タブをクリックし、ack-pod-identity-webhook を見つけて、[インストール] をクリックします。

    3. 表示されるメッセージで、情報を確認し、[OK] をクリックします。

  3. ack-pod-identity-webhook-demo Resource Access Management(RAM)ロールを作成します。

    1. Alibaba Cloud アカウントを使用して、RAM コンソール にログインします。

    2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

    3. [ロール] ページで、[ロールの作成] をクリックします。

    4. [ロールの作成] ページで、[信頼エンティティの選択] セクションの [idp] を選択し、[次へ] をクリックします。

    5. [ロールの構成] ウィザードページで、次のパラメーターを設定し、[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 と入力します。

  4. AliyunCSReadOnlyAccess ポリシーを RAM ロールにアタッチして、アプリケーションに必要な権限を付与します。 詳細については、「RAM ロールに権限を付与する」をご参照ください。

  5. アプリケーションをデプロイします。

    1. ACS クラスターに接続します。 詳細については、「クラスターに接続する」をご参照ください。

    2. 次のコンテンツに基づいて、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
    3. 次のコマンドを実行して、アプリケーションをデプロイします。

      kubectl apply -f demo.yaml
  6. 次のコマンドを実行して、ack-pod-identity-webhook がアプリケーション用に作成されたポッドに必要な構成を挿入したかどうかを確認します。

    kubectl -n rrsa-demo get pod demo -o yaml

    期待される出力の表示

    (省略)

    出力は、ack-pod-identity-webhook が次の構成をポッドに挿入したことを示しています。

    フィールド

    パラメーター

    説明

    env

    ALIBABA_CLOUD_ROLE_ARN

    引き受ける RAM ロールの ARN。

    ALIBABA_CLOUD_OIDC_PROVIDER_ARN

    OIDC IdP の ARN。

    ALIBABA_CLOUD_OIDC_TOKEN_FILE

    OIDC トークンファイルのパス。

    VolumeMounts

    rrsa-oidc-token

    OIDC トークンをマウントするための構成。

    Volumes

    rrsa-oidc-token

    OIDC トークンをマウントするための構成。

  7. 次のコマンドを実行して、アプリケーションのログを出力します。

    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

ラベル

現在の名前空間のポッドに対して自動挿入を有効にするかどうかを指定します。

  • 自動挿入を有効にするには、パラメーターを on に設定します。

  • 自動挿入を無効にするには、パラメーターを on 以外の値に設定するか、パラメーターを空のままにします。

apiVersion: v1
kind: Namespace
metadata:
  name: test
  labels:
    pod-identity.alibabacloud.com/injection: 'on'

サービスアカウントの構成

パラメーター

タイプ

説明

サンプルコード

pod-identity.alibabacloud.com/role-name

アノテーション

サービスアカウントに割り当てられた RAM ロールの名前。

このパラメーターを空のままにするか、無効な値に設定すると、サービスアカウントを使用するポッドでは自動挿入は有効になりません。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: test-sa
  namespace: test
  annotations:
    pod-identity.alibabacloud.com/role-name: test-role

pod-identity.alibabacloud.com/service-account-token-expiration

アノテーション

サービスアカウントを使用するポッドにマウントされた OIDC トークンの有効期間。

  • 有効な値: 600 ~ 43200。

  • インスタンスがウォームアップ状態にとどまる期間(秒単位)。

  • デフォルト値: 3600。

    パラメーターが無効な値に設定されている場合は、デフォルト値が使用されます。

説明

このパラメーターがサービスアカウントとポッドの両方で指定されている場合、ポッドの設定が優先されます。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: test-sa
  namespace: test
  annotations:
    pod-identity.alibabacloud.com/service-account-token-expiration: '3600'

ポッドの構成

パラメーター

タイプ

説明

サンプルコード

pod-identity.alibabacloud.com/service-account-token-expiration

アノテーション

ポッドにマウントされた OIDC トークンの有効期間。

  • 有効な値: 600 ~ 43200。

  • インスタンスがウォームアップ状態にとどまる期間(秒単位)。

  • デフォルト値: 3600。

    パラメーターが無効な値に設定されている場合は、デフォルト値が使用されます。

説明

このパラメーターがサービスアカウントとポッドの両方で指定されている場合、ポッドの設定が優先されます。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: test
  annotations:
    pod-identity.alibabacloud.com/service-account-token-expiration: '3600'

pod-identity.alibabacloud.com/only-containers

アノテーション

構成を挿入するポッド内のコンテナーの名前を指定します。 複数のコンテナー名はコンマ(,)で区切ります。

説明

コンテナー名が pod-identity.alibabacloud.com/only-containers パラメーターと pod-identity.alibabacloud.com/skip-containers パラメーターの両方で指定されている場合、pod-identity.alibabacloud.com/only-containers パラメーターで指定されたコンテナー名は無視されます。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: test
  annotations:
    pod-identity.alibabacloud.com/only-containers: 'controller,test'

pod-identity.alibabacloud.com/skip-containers

アノテーション

構成挿入リストから除外するコンテナーの名前を指定します。 複数のコンテナー名はコンマ(,)で区切ります。

説明

コンテナー名が pod-identity.alibabacloud.com/only-containers パラメーターと pod-identity.alibabacloud.com/skip-containers パラメーターの両方で指定されている場合、pod-identity.alibabacloud.com/only-containers パラメーターで指定されたコンテナー名は無視されます。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: test
  annotations:
    pod-identity.alibabacloud.com/skip-containers: 'controller,test'

RRSA SDK デモ

プログラミング言語

サポートされている SDK バージョン

デモ

Go

Alibaba Cloud Credentials for Go 1.2.6 以降

Go 用 SDK デモ

Java

Alibaba Cloud Credentials for Java 0.2.10 以降

Java 用 SDK デモ

Python 3

Alibaba Cloud Credentials for Python 0.3.1 以降

Python 3 用 SDK デモ

Node.js および TypeScript

Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 以降

Node.js および TypeScript 用 SDK デモ

リリースノート

2024 年 6 月

バージョン番号

イメージアドレス

説明

リリース日

影響

0.1.1

registry.cn-hangzhou.aliyuncs.com/acs/ack-pod-identity-webhook:v0.1.1.0-gbddcb74-aliyun

  • Serverless Kubernetes クラスター との互換性が向上しました。

  • OIDC トークンを自動的にマウントし、アプリケーションポッドの環境変数を自動的に構成できます。

  • このコンポーネントは、コンテナサービス Kubernetes 版クラスターでサポートされています。

2024-06-30

コンポーネントの更新中に例外が発生した場合、ポッドの作成に失敗する可能性があります。 閑散時に更新を実行することをお勧めします。