このトピックでは、ASMリモートコントロールプレーン機能を使用した後に、クラスター間の相互アクセスを実現する方法について説明します。
このトピックでは、ASM リモートコントロールプレーンを使用したプッシュレイテンシの削減で説明されている cluster-1 と cluster-2 を引き続き使用します。 cluster-1 はクラウド上の ACK クラスター(ASM マネージドコントロールプレーンによって管理)を表し、cluster-2 は非 ACK クラスター(ASM リモートコントロールプレーンによって管理)を表します。 ASM リモートコントロールプレーンを使用したプッシュレイテンシの削減のすべての手順を完了していることを確認してください。
このトピックの手順では、kubeconfig を複数回切り替える必要があります。 cluster-1 と cluster-2 の kubeconfig を同じ構成ファイルに構成し、
kubectl config use-context
を使用して切り替えることをお勧めします。 また、kubecm または kubectx を使用して、複数のクラスターの kubeconfig を管理することもできます。
ステップ 1:cluster-1 から cluster-2 にアクセスする
クラスターネットワークと East-West ゲートウェイを構成します。 詳細については、ASM East-West ゲートウェイを使用したマルチクラスタークロスネットワーク相互接続の実現をご参照ください。
cluster-1 の kubeconfig を使用して、httpbin アプリケーションと sleep アプリケーションをデプロイします。 具体的なデプロイ手順については、httpbin アプリケーションのデプロイをご参照ください。
両方のクラスターに httpbin アプリケーションと sleep アプリケーションがあります。 ASM は、両方のクラスターの httpbin サービスを 1 つのサービスとして扱います。 cluster-1 の sleep を使用して httpbin にアクセスすると、リクエストは両方のクラスターの httpbin ワークロードに均等に分散されます。
テストのために、次のコマンドを実行して cluster-1 の httpbin サービスを 0 にスケールインします。
kubectl scale deployment httpbin --replicas 0
次のコマンドを実行して、cluster-1 の sleep から httpbin サービスにアクセスします。
kubectl exec deployment/sleep -it -- curl httpbin:8000/status/418
期待される出力:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
アクセスがまだ成功していることがわかります。 リクエストは cluster-2 の httpbin サービスによって処理され、cluster-1 と cluster-2 間の通信は mTLS を使用して暗号化されます。
ステップ 2:cluster-2 から cluster-1 へのアクセスをテストする
このセクションの手順は、istiocli ツールに依存します。 インストールされている istiocli のバージョンが ASM のバージョンと互換性があることを確認してください。
デフォルトでは、リモートコントロールプレーンによって管理されるワークロードは、マネージドコントロールプレーンによって管理されるサービスを検出しません。 このセクションでは、cluster-2 から cluster-1 のサービスにアクセスする方法について説明します。
次の内容で role.yaml を作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app: istio-reader name: istio-reader-clusterrole-istio-system rules: - apiGroups: // API グループ - 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
作業ディレクトリを展開した istio フォルダに切り替え、次のコマンドを実行して cluster-1 に ClusterRole と ClusterRoleBinding を作成します。これにより、cluster-2 のリモートコントロールプレーンは ClusterRole を介して cluster-1 からサービス情報を取得できます。
bin/istioctl create-remote-secret \ --context=cluster-1 \ --name=${cluster-1 ID} | \ kubectl apply -f role.yaml --context=cluster-2
説明この手順を完了すると、cluster-2 の istio-system ネームスペースにシークレットが生成されます。 シークレットには、cluster-1 への接続に使用される証明書が含まれています。 このシークレットは適切に保管する必要があります。
コンテキストを cluster-1 に切り替え、次のコマンドを実行して httpbin サービスのレプリカ数を 1 に変更します。
kubectl scale deployment httpbin --replicas 1
コンテキストを cluster-2 に切り替え、次のコマンドを実行して httpbin サービスのレプリカ数を 0 に変更します。
kubectl scale deployment httpbin --replicas 0
次のコマンドを実行して、cluster-2 から httpbin サービスへのアクセスをテストします。
kubectl exec deploy/sleep -it -- curl httpbin:8000/status/418
期待される出力:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
アクセスが成功していることがわかります。