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

Container Service for Kubernetes:ack-pod-identity-webhook

最終更新日:Oct 29, 2024

ack-pod-identity-webhookは、Container Service for Kubernetes (ACK) のサービスアカウントのRAMロール (RRSA) 機能の操作に役立つコンポーネントです。 ack-pod-identity-webhookは、アプリケーションへのアクセスに必要なOpenID Connect (OIDC) トークンと環境変数をアプリケーションのポッドに自動的に挿入できます。 この方法では、OIDCトークンと環境変数を設定する必要はありません。 このトピックでは、ack-pod-identity-webhookについて説明し、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. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. On theクラスターページで、管理するクラスターの名前をクリックします。

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

    4. 表示されるメッセージで、確認.

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

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

    1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[操作] > [アドオン] を選択します。

    2. On theアドオンページをクリックし、セキュリティタブで、ack-pod-identity-webhookを見つけ、インストール右下隅にあります。

    3. 表示されるメッセージで、情報を確認し、OK.

  3. ack-pod-identity-webhook-demoという名前のRAMロールを作成します。

    1. にログインします。RAMコンソールをAlibaba Cloudアカウントに置き換えます。

    2. 左側のナビゲーションウィンドウで、アイデンティティ > ロール.

    3. On theロールページをクリックします。ロールの作成.

    4. では、ロールの作成パネル、選択IdP[信頼できるエンティティ] を選択し、次へ.

    5. 次のパラメーターを設定し、OK.

      パラメーター

      説明

      RAMロール名

      ack-pod-identity-webhook-demo

      IdPタイプ

      OIDC

      IdPの選択

      ack-rrsa-<cluster_id> 。 クラスターのIDを <cluster_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. という名前のファイルを作成します。demo.yaml次の内容をファイルにコピーします。

      次のYAMLコンテンツでは、pod-identity.alibabacloud.com/injection: 'on' ラベルが名前空間に追加され、pod-identity.alibabacloud.com/role-name: ack-pod-identity-webhook-demoアノテーションがサービスアカウントに追加され、ack-pod-identity-webhookの自動注入機能が有効になります。 RRSAデモの詳細については、「Code」をご参照ください。

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

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

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

    期待される出力

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo
      namespace: rrsa-demo
    spec:
      containers:
      - args:
        - rrsa
        - demo
        env:
        - name: ALIBABA_CLOUD_ROLE_ARN
          value: acs:ram::1***:role/ack-pod-identity-webhook-demo
        - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
          value: acs:ram::1***:oidc-provider/ack-rrsa-c***
        - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
          value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
        image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.0.0
        imagePullPolicy: Always
        name: demo
        volumeMounts:
        - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
          name: kube-api-access-4bwdg
          readOnly: true
        - mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
          name: rrsa-oidc-token
          readOnly: true
      restartPolicy: OnFailure
      serviceAccount: demo-sa
      serviceAccountName: demo-sa
      volumes:
      - name: kube-api-access-4bwdg
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              expirationSeconds: 3607
              path: token
          - configMap:
              items:
              - key: ca.crt
                path: ca.crt
              name: kube-root-ca.crt
          - downwardAPI:
              items:
              - fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
                path: namespace
      - name: rrsa-oidc-token
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              audience: sts.aliyuncs.com
              expirationSeconds: 3600
              path: token

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

    カテゴリ

    設定アイテム

    説明

    環境変数

    ALIBABA_CLOUD_ROLE_ARN

    仮定するRAMロールのARN。

    ALIBABA_CLOUD_OIDC_PROVIDER_ARN

    OIDC IdPのARN。

    ALIBABA_CLOUD_OIDC_TOKEN_FILE

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

    VolumeMount

    rrsa-oidc-token

    OIDCトークンをマウントするための設定。

    ボリューム

    rrsa-oidc-token

    OIDCトークンをマウントするための設定。

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

    kubectl -n rrsa-demo logs demo

    期待される出力:

    cluster id: cf***, cluster name: foo*
    cluster id: c8***, cluster name: bar*
    cluster id: c4***, cluster name: foob*

カスタム設定

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

注釈

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

このパラメーターを空のままにすると、ポッド内のすべてのコンテナーに設定が注入されます。

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以降

SDKデモfor Java

Python 3

Alibaba Cloud Credentials for Python 0.3.1以降

Python 3のSDKデモ

Node.jsとTypeScript

TypeScript/Node.jsのAlibaba Cloud資格情報2.2.6以降

Node.jsおよびTypeScript用のSDKデモ

リリースノート

6月2023

バージョン番号

画像アドレス

説明

リリース日

影響

0.1.1

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

ACKサーバーレスクラスタとの互換性が向上します。

2023-06-07

コンポーネントの更新中に例外が発生した場合、ポッドの作成に失敗する可能性があります。 オフピーク時に更新を実行することを推奨します。

2月2023

バージョン番号

画像アドレス

説明

リリース日

影響

0.1.0

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

OIDCトークンは自動的にマウントでき、環境変数はアプリケーションポッド用に自動的に設定できます。

2023-02-01

最初のバージョンがリリースされました。

関連ドキュメント

ポッド間で権限を分離するためのRRSA for serviceアカウントの設定