ハイブリッド メッシュを設定する

このページでは、次のプラットフォーム用にハイブリッド メッシュを設定する方法について説明します。

  • ハイブリッド: Google Cloud 上の GKE と Google Distributed Cloud(プレビュー)
  • ハイブリッド: Google Cloud 上の GKE と Google Distributed Cloud(プレビュー)

以下の手順では、2 つのクラスタを設定しますが、このプロセスを拡張して任意の数のクラスタをメッシュに組み込むこともできます。

前提条件

  • すべてのクラスタが同じフリートのホスト プロジェクトに登録されている必要があります。
  • すべての GKE クラスタが同じネットワーク上の共有 VPC 構成に含まれている必要があります。
  • クラスタの Kubernetes コントロール プレーン アドレスとゲートウェイ アドレスが、メッシュ内のすべてのクラスタから到達可能である必要があります。GKE クラスタが配置されている Google Cloud プロジェクトで、外部ロード バランシング タイプの作成が許可されている必要があります。アクセスを制限するには、承認済みネットワークVPC ファイアウォール ルールを使用することをおすすめします。
  • GKE 限定公開クラスタを含む限定公開クラスタはサポートされていません。Google Distributed Cloud などのオンプレミス クラスタを使用する場合、Kubernetes コントロール プレーンのアドレスとゲートウェイのアドレスは、GKE クラスタの Pod から到達可能である必要があります。GKE クラスタのサブネットをオンプレミス クラスタのネットワークに接続するには、CloudVPN を使用することをおすすめします。
  • Istio CA を使用する場合は、すべてのクラスタで同じカスタムルート証明書を使用します。

始める前に

メッシュで設定するすべてのクラスタの kubeconfig ファイルにアクセスする必要があります。GKE クラスタの場合、クラスタの新しい kubeconfig ファイルを作成するには、ターミナルの値としてファイルの完全パスを含む KUBECONFIG env をエクスポートし、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. ネットワーク名の環境変数を作成します。

    • デフォルトでは、GKE クラスタの名前はクラスタ ネットワーク名になります。

      export NETWORK_1="PROJECT_ID-CLUSTER_NETWORK"

    • 他のクラスタは default を使用します。

      export NETWORK_2="default"

    --network_id の値が異なる他のクラスタに Cloud Service Mesh をインストールした場合は、同じ値を NETWORK_2 に渡す必要があります。

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

  1. CLUSTER_2(オンプレミス クラスタ)への east-west トラフィック専用のゲートウェイを CLUSTER_1(ご使用の GKE クラスタ)にインストールします。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --network ${NETWORK_1}  \
        --revision asm-1215-7 | \
        ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y -f -
    

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

  2. cluster1 用の east-west トラフィック専用のゲートウェイを cluster2 にインストールします。

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --network ${NETWORK_2} \
        --revision asm-1215-7 | \
        ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
    

サービスを公開する

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

クラスタのサービスを East-West ゲートウェイ経由で公開する

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

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

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

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

マルチクラスタ接続を確認する

サイドカー プロキシの挿入をご覧ください。