複数クラスタ Ingress の設定

このページでは、異なるリージョンの複数のクラスタ間でトラフィックをルーティングするように複数クラスタ Ingress を構成する方法について説明します。複数クラスタ Ingress(MCI)は、Anthos クラスタ用のクラウドホスト型の複数クラスタ Ingress コントローラです。Ingress for Anthos は Google がホストするサービスであり、クラスタ間やリージョン間で共有された負荷分散のリソースのデプロイが可能になります。

複数クラスタ Ingress の仕組み外部 HTTP(S) ロードバランサの仕組みの詳細もご確認ください。

複数クラスタ Ingress の要件

複数クラスタ Ingress は次の対象に対応しています。

  • Google Cloud 上の GKE クラスタ。現在、GKE オンプレミス クラスタはサポートされていません。
  • すべての GKE リリース チャンネルの GKE クラスタ。
  • VPC ネイティブ(エイリアス IP)モードのクラスタ。詳細については、VPC ネイティブ クラスタの作成をご覧ください。
  • HTTP 負荷分散がデフォルトで有効になっているクラスタ。複数クラスタ Ingress は、外部 HTTP(S) ロードバランサのみをサポートしています。
  • MCI は Anthos on Google Cloud の一部であり、Anthos のライセンスを必要とします。

また、複数クラスタ Ingress には、クラスタの登録が可能な Cloud SDK バージョン 290 以降(gcloud --version)が必要です。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. ゾーンクラスタの場合はデフォルトの Compute Engine ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project PROJECT_ID
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot クラスタまたはリージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region COMPUTE_REGION
  • gcloud を最新バージョンに更新します。
    gcloud components update
  • プロジェクトで environ API を有効にします。

    gcloud services enable gkehub.googleapis.com
    
  • プロジェクトで Anthos API を有効にします。

    gcloud services enable anthos.googleapis.com
    
  • プロジェクトで複数クラスタ Ingress API を有効にします。

    gcloud services enable multiclusteringress.googleapis.com
    
  • 複数クラスタ Ingress を使用するには、クラスタが VPC ネイティブ モードになっている必要があります。複数クラスタ Ingress はネットワーク エンドポイント グループ(NEG)を使用して HTTP(S) ロードバランサのバックエンドを作成します。既存のクラスタが VPC ネイティブ モードでない場合は、クラスタを削除して再作成し、--enable-ip-alias フラグを使用して VPC ネイティブを有効にします。

環境の準備

クラスタの作成

この例では、次のクラスタを使用します。

NAME      LOCATION
gke-eu    europe-west1-c
gke-us    us-central1-a
  1. gke-eu クラスタを作成します。

    gcloud container clusters create gke-eu --zone europe-west1-c \
      --release-channel stable --enable-ip-alias
    
  2. gke-us クラスタを作成します。

    gcloud container clusters create gke-us --zone us-central1-a \
      --release-channel stable --enable-ip-alias
    

クラスタの登録

Connect を使用すると、ハイブリッド環境で Kubernetes クラスタを操作できます。各クラスタは、環境のメンバーとして登録する必要があります。詳細については、複数クラスタ Ingress のアーキテクチャをご覧ください。

  1. クラスタ登録の前提条件をすべて満たしていることを確認します。

  2. サービス アカウントを作成し、その秘密鍵をダウンロードしていることを確認します。

  3. クラスタの URI を確認します。

    gcloud container clusters list --uri
    
  4. gke-eu クラスタを登録します。

    gcloud container hub memberships register gke-eu \
        --project=project-id \
        --gke-uri=uri \
        --service-account-key-file=service-account-key-path
    

    ここで

    • project-id はプロジェクト ID です。
    • uri は GKE クラスタの URI です。
    • service-account-key-path は、登録の前提条件の一部としてダウンロードされたサービス アカウントの秘密鍵 JSON ファイルのローカル ファイルパスです。このサービス アカウント キーは、gke-connect 名前空間に creds-gcp という名前の Secret として保存されます。
  5. gke-us クラスタを登録します。

    gcloud container hub memberships register gke-us \
        --project=project-id \
        --gke-uri=uri \
        --service-account-key-file=service-account-key-path
    
  6. クラスタが登録されていることを確認します。

    gcloud container hub memberships list
    

    出力は次のようになります。

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    

構成クラスタの指定

構成クラスタは、メンバー クラスタ間で Ingress を制御する中心となる GKE クラスタです。GKE Ingress とは異なり、Anthos Ingress コントローラは単一のクラスタには存在しませんが、構成クラスタ内のリソースを監視する Google マネージド サービスです。この GKE クラスタは、MultiClusterIngressMultiClusterService などのリソースを保存するためのマルチクラスタ API サーバーとして使用されますが、一度に存在できる構成クラスタは 1 つだけです。

構成クラスタの詳細については、構成クラスタの設計をご覧ください。

構成クラスタが停止しているか、アクセスできない場合は、MultiClusterIngress オブジェクトと MultiClusterService オブジェクトはメンバー クラスタ間で更新できません。ロードバランサとトラフィックは、停止時でも構成クラスタとは独立して機能し続けます。

複数クラスタ Ingress を有効にして構成クラスタを選択する手順は同じです。構成クラスタとして選択する GKE クラスタは、すでに environ に登録されている必要があります。

  1. 構成クラスタとして指定するクラスタの URI を特定します。

    gcloud container hub memberships list
    

    出力は次のようになります。

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    
  2. 複数クラスタ Ingress を有効にして、構成クラスタとして gke-us を選択します。

    gcloud alpha container hub ingress enable \
      --config-membership=projects/project_id/locations/global/memberships/gke-us
    

    出力は次のようになります。

    Waiting for Feature to be created...done.
    

    コントローラのブートストラップ中は、このプロセスに数分かかることがあります。成功すると、出力は次のようになります。

    Waiting for Feature to be created...done.
    Waiting for controller to start...done.
    

    失敗した場合、コマンドは次のようにタイムアウトします。

    Waiting for controller to start...failed.
    ERROR: (gcloud.alpha.container.hub.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
    

    前の手順でエラーが発生しなかった場合は、次の手順に進むことができます。前の手順でエラーが発生した場合は、機能の状態を確認します。問題点を正確に記述する必要があります。

    gcloud alpha container hub ingress describe
    

    失敗状態の例を以下に示します。

    featureState:
      detailsByMembership:
        projects/393818921412/locations/global/memberships/0375c958-38af-11ea-abe9-42010a800191:
          code: FAILED,
          description: "... is not a VPC-native cluster..."
    lifecycleState: ENABLED
    multiclusteringressFeatureSpec:
      configMembership: projects/project_id/locations/global/memberships/0375c958-38af-11ea-abe9-42010a800191
    name: projects/project_id/locations/global/features/multiclusteringress
    updateTime: '2020-01-22T19:16:51.172840703Z'
    

    このようなエラー メッセージの詳細については、トラブルシューティングとオペレーションをご覧ください。

共有 VPC のデプロイ

複数クラスタ Ingress は共有 VPC ネットワーク内のクラスタにデプロイできますが、参加しているバックエンド GKE クラスタがすべて同じプロジェクト内に存在する必要があります。同じ Cloud Load Balancing VIP を使用する異なるプロジェクトで GKE クラスタを使用することはサポートされていません。

非共有 VPC ネットワークでは、複数クラスタ Ingress コントローラがファイアウォール ルールを管理し、Cloud Load Balancing からコンテナ ワークロードにヘルスチェックを許可できます。

共有 VPC ネットワークでは、複数クラスタ Ingress はこれらのファイアウォール ルールを管理できません。これは、ファイアウォールはホスト プロジェクトによって管理されており、サービス プロジェクト管理者がアクセスできないためです。共有 VPC ネットワークの一元化されたセキュリティ モデルは、ネットワーク制御を意図的に集中化します。共有 VPC ネットワークでは、ホスト プロジェクト管理者が、複数クラスタ Ingress の代わりに Cloud Load Balancing トラフィックに必要なファイアウォール ルールを手動で作成する必要があります。

次のコマンドは、クラスタが共有 VPC ネットワーク上にある場合に作成する必要のあるファイアウォール ルールを示しています。ソース範囲は、Cloud Load Balancing が Google Cloud のバックエンドにトラフィックを送信するために使用する範囲です。このルールは、複数クラスタ Ingress の運用期間中に存続している必要があり、複数クラスタ Ingress または GKE 負荷分散への Cloud Load Balancing が使用されなくなった場合にのみ削除できます。

  • 共有 VPC ネットワーク上にクラスタがある場合は、次のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create firewall-rule-name \
        --project host-project \
        --network shared-vpc \
        --direction INGRESS \
        --allow tcp:0-65535 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16
    

次のステップ