異なるネットワーク上へのマルチプライマリのインストール
このガイドに従って、cluster1
とcluster2
の両方にIstioコントロールプレーンをインストールし、それぞれをプライマリクラスターにします。クラスターcluster1
はnetwork1
ネットワーク上にあり、cluster2
はnetwork2
ネットワーク上にあります。これは、クラスター境界を越えてポッド間の直接的な接続がないことを意味します。
続行する前に、始める前にの手順を完了してください。
この構成では、cluster1
と cluster2
の両方が、各クラスタのエンドポイントについて API サーバーを監視します。
クラスタ境界を越えたサービスワークロードは、東西トラフィック専用のゲートウェイを介して間接的に通信します。各クラスタのゲートウェイは、もう一方のクラスタから到達可能である必要があります。
cluster1
のデフォルトネットワークを設定する
istio-system 名前空間が既に作成されている場合は、クラスタのネットワークをそこに設定する必要があります。
$ kubectl --context="${CTX_CLUSTER1}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1
cluster1
をプライマリとして構成する
cluster1
用の Istio 構成を作成します。
$ cat <<EOF > cluster1.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster1
network: network1
EOF
cluster1
に構成を適用します。
$ istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml
cluster1
にeast-westゲートウェイをインストールする
東西トラフィック専用のゲートウェイを cluster1
にインストールします。デフォルトでは、このゲートウェイはインターネット上で公開されます。本番システムでは、外部からの攻撃を防ぐために、追加のアクセス制限(ファイアウォールルールなど)が必要になる場合があります。利用可能なオプションについては、クラウドベンダーにご確認ください。
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
--network network1 | \
istioctl --context="${CTX_CLUSTER1}" install -y -f -
東西ゲートウェイに外部 IP アドレスが割り当てられるのを待ちます。
$ kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-eastwestgateway LoadBalancer 10.80.6.124 34.75.71.237 ... 51s
cluster1
でサービスを公開する
クラスタは別々のネットワーク上にあるため、両方のクラスタで東西ゲートウェイ上のすべてのサービス(*.local)を公開する必要があります。このゲートウェイはインターネット上で公開されていますが、その背後にあるサービスは、信頼された mTLS 証明書とワークロード ID を持つサービスのみがアクセスできます。まるで同じネットワーク上にあるかのように。
$ kubectl --context="${CTX_CLUSTER1}" apply -n istio-system -f \
@samples/multicluster/expose-services.yaml@
cluster2
のデフォルトネットワークを設定する
istio-system 名前空間が既に作成されている場合は、クラスタのネットワークをそこに設定する必要があります。
$ kubectl --context="${CTX_CLUSTER2}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2
cluster2をプライマリとして構成する
cluster2
用の Istio 構成を作成します。
$ cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network2
EOF
cluster2
に構成を適用します。
$ istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
cluster2
にeast-westゲートウェイをインストールする
上記の cluster1
で行ったように、東西トラフィック専用のゲートウェイを cluster2
にインストールします。
$ @samples/multicluster/gen-eastwest-gateway.sh@ \
--network network2 | \
istioctl --context="${CTX_CLUSTER2}" install -y -f -
東西ゲートウェイに外部 IP アドレスが割り当てられるのを待ちます。
$ kubectl --context="${CTX_CLUSTER2}" get svc istio-eastwestgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-eastwestgateway LoadBalancer 10.0.12.121 34.122.91.98 ... 51s
cluster2
でサービスを公開する
上記の cluster1
で行ったように、東西ゲートウェイを介してサービスを公開します。
$ kubectl --context="${CTX_CLUSTER2}" apply -n istio-system -f \
@samples/multicluster/expose-services.yaml@
エンドポイントディスカバリーを有効にする
cluster1
の API サーバーへのアクセスを提供するリモートシークレットを cluster2
にインストールします。
$ istioctl create-remote-secret \
--context="${CTX_CLUSTER1}" \
--name=cluster1 | \
kubectl apply -f - --context="${CTX_CLUSTER2}"
cluster2
の API サーバーへのアクセスを提供するリモートシークレットを cluster1
にインストールします。
$ istioctl create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
おめでとうございます! 異なるネットワーク上の複数のプライマリクラスタにまたがる Istio メッシュを正常にインストールしました!
次のステップ
これで、インストールを検証できます。
クリーンアップ
cluster1
で Istio をアンインストールします。$ istioctl uninstall --context="${CTX_CLUSTER1}" -y --purge $ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
cluster2
で Istio をアンインストールします。$ istioctl uninstall --context="${CTX_CLUSTER2}" -y --purge $ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"