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

Container Service for Kubernetes:Alibaba Cloud サービスの Pod ホワイトリストを動的に構成する

最終更新日:Jun 17, 2025

アクセス制御が必要なシナリオでは、アクセス制御を微調整するために、Pod の IP アドレスを ApsaraDB RDS ホワイトリストに動的に追加したり、ホワイトリストから IP アドレスを削除したりする必要がある場合があります。これを行うには、ack-kubernetes-webhook-injector コンポーネントを使用して、Pod にアノテーションを追加します。このトピックでは、ack-kubernetes-webhook-injector をインストールし、このコンポーネントを使用して Alibaba Cloud サービスの Pod ホワイトリストを動的に構成する方法について説明します。また、Alibaba Cloud サービスの内部エンドポイントにアクセスするように ack-kubernetes-webhook-injector を構成する方法についても説明します。

前提条件

概要

クラウドコンピューティングのシナリオでは、一部のクラウドリソースへの外部アクセスを許可するために、アクセス制御ポリシーを構成する必要があります。たとえば、Elastic Compute Service (ECS) インスタンスの Server Load Balancer (SLB) アクセス制御リスト (ACL) を構成したり、指定したクライアント IP アドレスからのアクセスを許可するように ApsaraDB RDS ホワイトリストを構成したりする必要があります。Container Service for Kubernetes (ACK) クラスターを作成するときに、クラスターノードの CIDR ブロックを ApsaraDB RDS ホワイトリストに追加できます。ただし、次の制限があります。

  • すべてのノードと Pod の IP アドレスがホワイトリストに追加されるため、ホワイトリストは粗粒度でアクセスを制御します。

  • クラスターの削除後、ホワイトリストは自動的に更新されません。ホワイトリストを手動で更新する必要があります。

前述の問題を解決するために、ACK は ack-kubernetes-webhook-injector コンポーネントを提供しており、Pod の IP アドレスを ApsaraDB RDS ホワイトリストに動的に追加できます。Pod が削除されると、Pod の IP アドレスはホワイトリストから自動的に削除されます。これにより、アクセス制御をきめ細かく行うことができます。

ack-kubernetes-webhook-injector コンポーネントは、次の機能をサポートしています。

  • Pod の作成時または削除時に、Pod の IP アドレスが対応する SLB ACL に自動的に追加または削除されます。

  • Pod の作成時または削除時に、Pod の IP アドレスが対応する ApsaraDB for Redis ホワイトリストに自動的に追加または削除されます。

  • Pod の作成時または削除時に、Pod の IP アドレスが対応する ApsaraDB RDS ホワイトリストに自動的に追加または削除されます。

ack-kubernetes-webhook-injector をインストールする

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[マーケットプレイス] > [マーケットプレイス] を選択します。

  2. [ack-kubernetes-webhook-injector] を見つけてクリックします。ページの右上隅にある [デプロイ] をクリックします。

  3. 表示されるパネルで、コンポーネントのクラスターと名前空間を選択し、リリース名を入力して、[次へ] をクリックします。

  4. [パラメーター] ウィザードページで、チャートバージョンを選択し、openapi セクションの aksk を AccessKey ペアに設定して、[OK] をクリックします。

    AccessKey ペアの取得方法の詳細については、「AccessKey ペアの作成」をご参照ください。AK

ack-kubernetes-webhook-injector を使用して Pod の IP アドレスを ApsaraDB RDS ホワイトリストに動的に追加する例

ReplicationController の Pod Spec セクションで、アノテーションを追加して、Pod の IP アドレスを追加する ApsaraDB RDS ホワイトリストの名前と ApsaraDB RDS インスタンスの ID を指定できます。 ack-kubernetes-webhook-injector は、Pod の作成時に Pod の IP アドレスをホワイトリストに自動的に追加し、Pod の削除時にホワイトリストから削除します。

アノテーション:

  • ApsaraDB RDS インスタンスの ID: ack.aliyun.com/rds_id

  • ApsaraDB RDS ホワイトリストの名前: ack.aliyun.com/white_list_name

このトピックでは、ApsaraDB RDS ホワイトリストを例として使用して、ack-kubernetes-webhook-injector を使用して Pod ホワイトリストを動的に構成する方法を示します。

  1. 次の YAML テンプレートを使用してデプロイメントを作成し、アノテーションを追加して、ApsaraDB RDS ホワイトリストの名前と ApsaraDB RDS インスタンスの ID を指定します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: inject-test
      name: inject-test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: inject-test
      template:
        metadata:
          annotations:
            ack.aliyun.com/rds_id: <rm-wz9nanjcud75b****>
            ack.aliyun.com/white_list_name: <rds_group>
          labels:
            app: inject-test
        spec:
          containers:
          - command:
            - sleep
            - "3600"
            image: alpine:latest
            name: inject-test
  2. 次のコマンドを実行して、Pod の IP アドレスをクエリします。

    kubectl --kubeconfig .kube/config_sts_test -n inject-test get pod -o wide

    予期される出力:

    NAME                           READY           STATUS        RESTARTS    AGE    IP                NODE
    inject-test-68cc8f9bbf-gj86n    1/1            Running         0        22s   172.25.0.28    cn-hangzhou.xxx

    出力は、Pod の IP アドレスが 172.25.0.28 であることを示しています。

  3. ApsaraDB RDS コンソール にログインし、指定した ApsaraDB RDS インスタンスのホワイトリストを確認します。ApsaraDB RDS ホワイトリストを表示する方法の詳細については、「拡張 IP アドレスホワイトリストを構成する」をご参照ください。

  4. 手順 1 で作成したデプロイメントの Pod 数を 0 に設定し、ApsaraDB RDS ホワイトリストを再度確認します。

    コンソールで、Pod の IP アドレスが ApsaraDB RDS ホワイトリストから削除されていることがわかります。

Alibaba Cloud サービスの内部エンドポイントにアクセスする

デフォルトでは、ack-kubernetes-webhook-injector は Alibaba Cloud サービスのパブリックエンドポイントを使用してサービスにアクセスします。クラスターのパブリックアクセスが無効になっている場合は、サービスの内部エンドポイントを使用するように ack-kubernetes-webhook-injector を構成できます。

説明

一部の Alibaba Cloud サービスは、特定のリージョンで内部エンドポイントを提供していません。OpenAPI エクスプローラー にアクセスして、サービスが指定したリージョンで内部エンドポイントを提供しているかどうかを確認できます。

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のウィンドウで、[ワークロード] > [デプロイメント] を選択します。

  3. 上部のナビゲーションバーで、[kube-system][名前空間] ドロップダウンリストから選択し、kubernetes-webhook-injector のデプロイメントを見つけて、デプロイメントの [アクション][詳細 > YAML で表示] を選択します。image.png

  4. 追加 - '--intranet-access'spec.template.spec.containers.command更新image.png

その他のアクセス制御ポリシー

ack-kubernetes-webhook-injector は、次のアクセス制御ポリシーもサポートしています。

  • SLB ACL: ack.aliyun.com/access_control_policy_id

  • ApsaraDB for Redis ホワイトリスト:

    • ApsaraDB for Redis インスタンスの ID: ack.aliyun.com/redis_id.

    • ApsaraDB for Redis ホワイトリストの名前: ack.aliyun.com/white_list_name

ack-kubernetes-webhook-injector をアンインストールする

ack-kubernetes-webhook-injector が不要になった場合は、ACK が提供するリリース機能を使用して ack-kubernetes-webhook-injector をアンインストールできます。詳細については、「Helm を使用してリリースを管理する」をご参照ください。関連する構成を削除するには、次のコマンドを実行します。

kubectl -n kube-system delete secret kubernetes-webhook-injector-certs
kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io kubernetes-webhook-injector