Google Cloud の外部でマルチクラスタ メッシュを設定する

このガイドでは、次のプラットフォーム向けにマルチクラスタ メッシュを設定する方法について説明します。

  • GKE on VMware
  • Google Distributed Cloud Virtual for Bare Metal
  • GKE on AWS
  • Amazon EKS

このガイドでは 2 つのクラスタを設定する方法について説明しますが、このプロセスを拡張して任意の数のクラスタをメッシュに組み込むこともできます。

始める前に

このガイドでは、asmcli install を使用して Anthos Service Mesh がインストールされていることを前提としています。asmcli と、asmcli install の実行時に --output_dir で指定したディレクトリに asmcli がダウンロードする構成パッケージが必要です。設定が必要な場合は、スタートガイドの手順に沿ってください。

メッシュで設定するすべてのクラスタの kubeconfig ファイルにアクセスする必要があります。

環境変数とプレースホルダを設定する

east-west ゲートウェイをインストールするには、次の環境変数が必要です。

  1. プロジェクト番号の環境変数を作成します。次のコマンドで、FLEET_PROJECT_IDフリート ホスト プロジェクトのプロジェクト ID に置き換えます。

    export PROJECT_NUMBER=$(gcloud projects describe FLEET_PROJECT_ID --format="value(projectNumber)")
    
  2. メッシュ ID の環境変数を作成します。

    export MESH_ID="proj-${PROJECT_NUMBER}"
    
  3. クラスタ名の環境変数を、asmcli に必要な形式で作成します。

    export CLUSTER_1="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_1"
    export CLUSTER_2="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_2"
    

east-west ゲートウェイをインストールする

次のコマンドで、

  • CLUSTER_NAME_1CLUSTER_NAME_2 をクラスタの名前に置き換えます。

  • PATH_TO_KUBECONFIG_1PATH_TO_KUBECONFIG_2 をクラスタの kubeconfig ファイルに置き換えます。

Mesh CA

  1. east-west トラフィック専用の cluster1 内のゲートウェイを $CLUSTER_2 にインストールします。デフォルトでは、このゲートウェイはインターネット上で公開されます。本番環境のシステムでは、外部からの攻撃を防ぐため、追加のアクセス制限(ファイアウォール ルールなど)が必要になる場合があります。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_1} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y --set spec.values.global.pilotCertProvider=kubernetes -f -
    
  2. $CLUSTER_1 用の east-west トラフィック専用の $CLUSTER_2 内のゲートウェイをインストールします。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_2} \
        --network default \
        --revision asm-1118-4 | \
        istioctl install --kubeconfig=PATH_TO_KUBECONFIG_2 -y --set spec.values.global.pilotCertProvider=kubernetes -f -
    

Istio CA

  1. east-west トラフィック専用の cluster1 内のゲートウェイを $CLUSTER_2 にインストールします。デフォルトでは、このゲートウェイはインターネット上で公開されます。本番環境のシステムでは、外部からの攻撃を防ぐため、追加のアクセス制限(ファイアウォール ルールなど)が必要になる場合があります。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_1} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y -f -
    
  2. $CLUSTER_1 用の east-west トラフィック専用の $CLUSTER_2 内のゲートウェイをインストールします。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_2} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
    

サービスの公開

クラスタは別々のネットワーク上にあるため、すべてのサービス(*.local)を両方のクラスタの east-west ゲートウェイ上で公開する必要があります。このゲートウェイはインターネットで一般公開されますが、その背後にあるサービスは、信頼できる mTLS 証明書とワークロード ID を持つサービスのみが、両者が同じネットワーク上にあるかのように、アクセスできます。

  1. CLUSTER_NAME_1 用の east-west ゲートウェイ経由でサービスを公開します。

    kubectl --kubeconfig=PATH_TO_KUBECONFIG_1 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml
    
  2. CLUSTER_NAME_2 用の east-west ゲートウェイ経由でサービスを公開します。

    kubectl --kubeconfig=PATH_TO_KUBECONFIG_2 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml
    

エンドポイント ディスカバリを有効にする

asmcli create-mesh コマンドを実行して、エンドポイント ディスカバリを有効にします。この例では 2 つのクラスタのみが示されていますが、このコマンドを実行して、フリートに追加できるクラスタの最大数の制限対象となる追加のクラスタで、エンドポイントの検出を有効にできます。

  ./asmcli create-mesh \
      FLEET_PROJECT_ID \
      PATH_TO_KUBECONFIG_1 \
      PATH_TO_KUBECONFIG_2