異なるネットワーク上へのマルチプライマリのインストール

このガイドに従って、cluster1cluster2の両方にIstioコントロールプレーンをインストールし、それぞれをプライマリクラスターにします。クラスターcluster1network1ネットワーク上にあり、cluster2network2ネットワーク上にあります。これは、クラスター境界を越えてポッド間の直接的な接続がないことを意味します。

続行する前に、始める前にの手順を完了してください。

この構成では、cluster1cluster2 の両方が、各クラスタのエンドポイントについて API サーバーを監視します。

クラスタ境界を越えたサービスワークロードは、東西トラフィック専用のゲートウェイを介して間接的に通信します。各クラスタのゲートウェイは、もう一方のクラスタから到達可能である必要があります。

Multiple primary clusters on separate networks
別々のネットワーク上の複数のプライマリクラスタ

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 にインストールします。デフォルトでは、このゲートウェイはインターネット上で公開されます。本番システムでは、外部からの攻撃を防ぐために、追加のアクセス制限(ファイアウォールルールなど)が必要になる場合があります。利用可能なオプションについては、クラウドベンダーにご確認ください。

zip
$ @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 を持つサービスのみがアクセスできます。まるで同じネットワーク上にあるかのように。

zip
$ 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 にインストールします。

zip
$ @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 で行ったように、東西ゲートウェイを介してサービスを公開します。

zip
$ 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 メッシュを正常にインストールしました!

次のステップ

これで、インストールを検証できます。

クリーンアップ

  1. cluster1 で Istio をアンインストールします。

    $ istioctl uninstall --context="${CTX_CLUSTER1}" -y --purge
    $ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
    
  2. cluster2 で Istio をアンインストールします。

    $ istioctl uninstall --context="${CTX_CLUSTER2}" -y --purge
    $ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"
    
この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!