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

Alibaba Cloud Service Mesh:リモートコントロールプレーンとマネージドコントロールプレーンのワークロード間の相互アクセス

最終更新日:Nov 06, 2025

このトピックでは、ASMリモートコントロールプレーン機能を使用した後に、クラスター間の相互アクセスを実現する方法について説明します。

前提条件

  • ASM のリモートコントロールプレーンを使用してプッシュレイテンシーを削減する」のすべてのステップを完了していること。このトピックでは、cluster-1 は ASM のマネージドコントロールプレーンによって管理される Alibaba Cloud Container Service for Kubernetes (ACK) クラスターを表し、cluster-2 は ASM のリモートコントロールプレーンによって管理される非 ACK クラスターを表します。

  • このトピックのステップでは、kubeconfig ファイルを切り替える必要があります。cluster-1 と cluster-2 の kubeconfig ファイルを同じ設定ファイルに追加し、kubectl config use-context コマンドを使用してクラスターを切り替えます。また、kubecm または kubectx を使用して、複数のクラスターの kubeconfig ファイルを管理することもできます。

  • クラスターネットワークと East-West ゲートウェイを設定し、cluster-1 と cluster-2 の両方に httpbin および sleep アプリケーションをデプロイしていること。詳細については、「ASM East-West ゲートウェイを使用してマルチクラスターのクロスネットワーク相互接続を実現する」をご参照ください。

ステップ 1: cluster-1 から cluster-2 へのアクセスのテスト

  1. cluster-1 の kubeconfig ファイルを使用して、次のコマンドを実行します。このコマンドは、テスト目的で cluster-1 の httpbin アプリケーションを 0 レプリカにスケールします。

    kubectl scale deployment httpbin --replicas 0
  2. cluster-1 の kubeconfig ファイルを使用して、次のコマンドを実行し、cluster-1 の sleep アプリケーションから httpbin アプリケーションにアクセスします。

    kubectl exec deployment/sleep -it -- curl httpbin:8000/status/418

    期待される出力:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`

    出力は、アクセスが成功したことを示します。リクエストは cluster-2 の httpbin アプリケーションによって処理され、通信は相互 Transport Layer Security (mTLS) を使用して暗号化されます。

ステップ 2:cluster-2 から cluster-1 へのアクセスをテストする

  1. 次の YAML ファイルを使用して、cluster-1 に ClusterRole および ClusterRoleBinding リソースを作成します。cluster-2 のリモートコントロールプレーンは、この ClusterRole を使用して cluster-1 からサービス情報を取得します。

    YAML ファイルを展開して表示

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      labels:
        app: istio-reader
      name: istio-reader-clusterrole-istio-system
    rules:
    - apiGroups:
      - config.istio.io
      - security.istio.io
      - networking.istio.io
      - authentication.istio.io
      - rbac.istio.io
      - telemetry.istio.io
      - extensions.istio.io
      resources:
      - '*'
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - endpoints
      - pods
      - services
      - nodes
      - replicationcontrollers
      - namespaces
      - secrets
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - networking.istio.io
      resources:
      - workloadentries
      verbs:
      - get
      - watch
      - list
    - apiGroups:
      - networking.x-k8s.io
      - gateway.networking.k8s.io
      resources:
      - gateways
      - gatewayclasses
      verbs:
      - get
      - watch
      - list
    - apiGroups:
      - apiextensions.k8s.io
      resources:
      - customresourcedefinitions
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - discovery.k8s.io
      resources:
      - endpointslices
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - multicluster.x-k8s.io
      resources:
      - serviceexports
      verbs:
      - get
      - list
      - watch
      - create
      - delete
    - apiGroups:
      - multicluster.x-k8s.io
      resources:
      - serviceimports
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - apps
      resources:
      - replicasets
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - authentication.k8s.io
      resources:
      - tokenreviews
      verbs:
      - create
    - apiGroups:
      - authorization.k8s.io
      resources:
      - subjectaccessreviews
      verbs:
      - create
    - apiGroups: [""]
      resources: ["configmaps"]
      verbs: ["create", "get", "list", "watch", "update"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      labels:
        app: istio-reader
      name: istio-reader-clusterrole-istio-system
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: istio-reader-clusterrole-istio-system
    subjects:
    - kind: ServiceAccount
      name: istio-reader-service-account
      namespace: istio-system
  2. kubectl コンテキストを設定していることを確認します。cluster-1 のコンテキストは cluster-1 という名前で、cluster-2 のコンテキストは cluster-2 という名前でなければなりません。

  3. istioctl ツールをインストールします。istioctl のバージョンが ASM のバージョンと互換性があることを確認してください。作業ディレクトリを解凍した istio フォルダに切り替えて、次のコマンドを実行します。

    # <YOUR_CLUSTER1_ID> を cluster-1 の ID に置き換えます。
    bin/istioctl create-remote-secret \
    --context=cluster-1 \
    --name=<YOUR_CLUSTER1_ID> | \
    kubectl apply -f - --context=cluster-2
    このステップを完了すると、cluster-2 の istio-system 名前空間にシークレットが生成されます。このシークレットには、cluster-1 への接続に使用されるアクセス資格情報が含まれています。このシークレットが漏洩しないように、権限を管理してください。
  4. cluster-1 の kubeconfig ファイルを使用して、次のコマンドを実行し、httpbin アプリケーションのレプリカ数を 1 に変更します。

    kubectl scale deployment httpbin --replicas 1
  5. cluster-2 の kubeconfig ファイルを使用して、次のコマンドを実行し、httpbin アプリケーションのレプリカ数を 0 に変更します。

    kubectl scale deployment httpbin --replicas 0
  6. cluster-2 の kubeconfig ファイルを使用して、次のコマンドを実行し、cluster-2 から cluster-1 の httpbin アプリケーションへのアクセスをテストします。

    kubectl exec deployment/sleep -it -- curl httpbin:8000/status/418

    期待される出力:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`