Anthos Service Mesh のインストール

このページは、異なる Google Cloud プロジェクトにある複数のクラスタを含むメッシュで、Anthos Service Mesh バージョン 1.7.8 を GKE クラスタにインストールする方法を説明するガイドの一部です。単一クラスタ メッシュでのインストールまたは同じ Google Cloud プロジェクト内の複数のクラスタを含むメッシュの場合は、GKE のインストール、移行、アップグレードをご覧ください。Istio から移行するマルチクラスタ / マルチプロジェクト メッシュがある場合は、Istio から Anthos Service Mesh への移行をご覧ください。

始める前に

Anthos Service Mesh をインストールする前に、次のことを確認してください。

認証情報と権限の設定

  1. プロジェクトを初期化してインストールの準備をします。次のコマンドでサービス アカウントを作成し、サイドカー プロキシなどのコントロール プレーン コンポーネントがプロジェクトのデータとリソースに安全にアクセスできるようにします。

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"

    コマンドを実行すると、空の中かっこ {} が返されます。

  2. クラスタとやり取りするために必要な認証情報を取得します。このコマンドは、クラスタに対して kubectl の現在のコンテキストも設定します。

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  3. 現在のユーザーにクラスタ管理者の権限を付与します。この権限は、Anthos Service Mesh に必要なロールベースのアクセス制御(RBAC)ルールを作成するのに必要です。

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

"cluster-admin-binding" already exists エラーが発生した場合は、無視して既存の cluster-admin-binding を続行しても問題ありません。

インストール ファイルのダウンロード

    Linux

  1. Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
  2. 署名ファイルをダウンロードし、openssl を使用して署名を検証します。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    想定される出力は Verified OK です。

  3. ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
    tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz

    このコマンドにより、現在の作業ディレクトリに istio-1.7.8-asm.10 という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。

    • samples ディレクトリにあるサンプル アプリケーション
    • Anthos Service Mesh のインストールに使用する istioctl コマンドライン ツールは、bin ディレクトリにあります。
    • Anthos Service Mesh 構成プロファイルは manifests/profiles ディレクトリにあります。

  4. Mac OS

  5. Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
  6. 署名ファイルをダウンロードし、openssl を使用して署名を検証します。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    想定される出力は Verified OK です。

  7. ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
    tar xzf istio-1.7.8-asm.10-osx.tar.gz

    このコマンドにより、現在の作業ディレクトリに istio-1.7.8-asm.10 という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。

    • samples ディレクトリにあるサンプル アプリケーション
    • Anthos Service Mesh のインストールに使用する istioctl コマンドライン ツールは、bin ディレクトリにあります。
    • Anthos Service Mesh 構成プロファイルは manifests/profiles ディレクトリにあります。

  8. Windows

  9. Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
  10. 署名ファイルをダウンロードし、openssl を使用して署名を検証します。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    想定される出力は Verified OK です。

  11. ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
    tar xzf istio-1.7.8-asm.10-win.zip

    このコマンドにより、現在の作業ディレクトリに istio-1.7.8-asm.10 という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。

    • samples ディレクトリにあるサンプル アプリケーション
    • Anthos Service Mesh のインストールに使用する istioctl コマンドライン ツールは、bin ディレクトリにあります。
    • Anthos Service Mesh 構成プロファイルは manifests/profiles ディレクトリにあります。

  12. Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
    cd istio-1.7.8-asm.10
  13. 利便性を考えて、/bin ディレクトリ内のツールを PATH に追加します。
    export PATH=$PWD/bin:$PATH

リソース構成ファイルの準備

istioctl install コマンドを実行するときは、コマンドラインで -f istio-operator.yaml を指定します。このファイルには、Anthos Service Mesh で必要なプロジェクトとクラスタに関する情報が含まれています。プロジェクトとクラスタの情報を設定できるように、istio-operator.yaml と他のリソース構成ファイルを含むパッケージをダウンロードする必要があります。

リソース構成ファイルを準備するには:

Mesh CA

  1. Anthos Service Mesh パッケージのリソース構成ファイル用に新しいディレクトリを作成します。クラスタ名をディレクトリ名として使用することをおすすめします。

  2. Anthos Service Mesh パッケージをダウンロードするディレクトリに変更します。

  3. パッケージをダウンロードします。

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. クラスタが作成されたプロジェクトのプロジェクト ID を設定します。

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. フリート ホスト プロジェクトのプロジェクト番号を設定します。

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  6. クラスタ名を設定します。

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. デフォルトのゾーンまたはリージョンを設定します。

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. インストールする Anthos Service Mesh のバージョンにタグを設定します。

    kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
    
  9. リビジョン ラベルを使用するように Webhook の検証を設定します。

    kpt cfg set asm anthos.servicemesh.rev asm-178-10
    

    Anthos Service Mesh をインストールするときに、istiod にリビジョン ラベルを設定します。検証 Webhook に同じリビジョンを設定する必要があります。

  10. マルチクラスタ構成内のクラスタは異なるプロジェクトにあるため、マルチクラスタ / マルチプロジェクトのサービスメッシュを形成する他のプロジェクトに、信頼できるドメイン エイリアスを構成する必要があります。

    1. マルチクラスタ / マルチプロジェクト メッシュに含まれるすべてのクラスタのプロジェクト ID を取得します。

    2. 各クラスタのプロジェクト ID に、信頼ドメイン エイリアスを設定します。たとえば、3 つのプロジェクトにクラスタがある場合は、次のコマンドを実行して、PROJECT_ID_1PROJECT_ID_2PROJECT_ID_3 を各クラスタのプロジェクト ID に置き換えます。

      kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog

      他のプロジェクトにクラスタを構成する場合は、同じコマンドを使用できます。

      信頼ドメイン エイリアスにより、Mesh CA は他のプロジェクトのクラスタ上のワークロードを認証できます。Anthos Service Mesh をインストールした後、信頼ドメイン エイリアスを設定するだけでなく、クラスタ間で負荷分散を有効にする必要があります。

  11. kpt セッターの値を出力します。

    kpt cfg list-setters asm
    

    コマンドの出力で、次のセッターの値が正しいことを確認します。

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • anthos.servicemesh.trustDomainAliases
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    他のセッターの値は無視してかまいません。

Citadel

  1. Anthos Service Mesh パッケージのリソース構成ファイル用に新しいディレクトリを作成します。クラスタ名をディレクトリ名として使用することをおすすめします。

  2. Anthos Service Mesh パッケージをダウンロードするディレクトリに変更します。

  3. パッケージをダウンロードします。

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. クラスタが作成されたプロジェクトのプロジェクト ID を設定します。

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. フリート ホスト プロジェクトのプロジェクト番号を設定します。

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  6. クラスタ名を設定します。

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. デフォルトのゾーンまたはリージョンを設定します。

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. インストールする Anthos Service Mesh のバージョンにタグを設定します。

    kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
    
  9. リビジョン ラベルを使用するように Webhook の検証を設定します。

    kpt cfg set asm anthos.servicemesh.rev asm-178-10
    

    Anthos Service Mesh をインストールするときに、istiod にリビジョン ラベルを設定します。検証 Webhook に同じリビジョンを設定する必要があります。

  10. kpt セッターの値を出力します。

    kpt cfg list-setters asm
    

    コマンドの出力で、次のセッターの値が正しいことを確認します。

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    他のセッターの値は無視してかまいません。

Anthos Service Mesh のインストール

Mesh CA

  1. 現在の kubeconfig コンテキストが、Anthos Service Mesh をインストールするクラスタを指していることを確認します。

    kubectl config current-context
    

    出力は次の形式になります。

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    kubeconfig コンテキストと kpt セッターの値は一致する必要があります。必要に応じて、gcloud container clusters get-credentials コマンドを実行して、現在の kubeconfig コンテキストを設定します。

  2. 次のコマンドを実行し、asm-gcp-multiproject プロファイルを使用して Anthos Service Mesh をインストールします。サポートされているオプション機能を有効にするには、コマンドラインで -f と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。

    istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml \
      --revision=asm-178-10
    

    --revision 引数は、istio.io/rev=asm-178-10 形式のリビジョン ラベルを istiod に追加します。リビジョン ラベルは、自動サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定の istiod リビジョンに関連付けます。名前空間のサイドカー自動挿入を有効にするには、istiod Deployment に一致するリビジョンにラベルを付ける必要があります。

    次のファイルは istio-operator.yaml ファイルの設定をオーバーライドします。

    • multiproject.yaml ファイルは asm-gcp-multiproject プロファイルを設定します。

    • multicluster.yaml ファイルは、マルチクラスタ構成で Anthos Service Mesh が必要とする設定を構成します。

  3. 検証 Webhook を構成して、リビジョン ラベルで istiod を検出できるようにします。

    kubectl apply -f asm/istio/istiod-service.yaml

    このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。

  4. 正規サービス コントローラをクラスタにデプロイします。

    kubectl apply -f asm/canonical-service/controller.yaml

    正規サービス コントローラは、同じ論理サービスに属するワークロードをグループ化します。正規サービスのさらに詳しい内容については、正規サービスの概要をご覧ください。

Citadel

  1. 現在の kubeconfig コンテキストが、Anthos Service Mesh をインストールするクラスタを指していることを確認します。

    kubectl config current-context
    

    出力は次の形式になります。

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    kubeconfig コンテキストと kpt セッターの値は一致する必要があります。必要に応じて、gcloud container clusters get-credentials コマンドを実行して、現在の kubeconfig コンテキストを設定します。

  2. istio-system 名前空間を作成します。

    kubectl create namespace istio-system
    
  3. シークレット cacerts を作成するには:

    kubectl create secret generic cacerts  \
      -n istio-system \
      --from-file=ca-cert.pem \
      --from-file=ca-key.pem \
      --from-file=root-cert.pem \
      --from-file=cert-chain.pem
    

    詳細については、既存の CA 証明書への接続をご覧ください。

  4. 次のコマンドを実行し、asm-gcp-multiproject プロファイルを使用して Anthos Service Mesh をインストールします。サポートされているオプション機能を有効にするには、コマンドラインで -f と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。

    istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/citadel-ca.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml \
      --revision=asm-178-10
    

    --revision 引数は、istio.io/rev=asm-178-10 形式のリビジョン ラベルを istiod に追加します。リビジョン ラベルは、自動サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定の istiod リビジョンに関連付けます。名前空間のサイドカー自動挿入を有効にするには、istiod Deployment に一致するリビジョンにラベルを付ける必要があります。

    次のファイルは istio-operator.yaml ファイルの設定をオーバーライドします。

    • citadel-ca.yaml によって、Citadel が CA として構成されます。

    • multiproject.yaml ファイルは asm-gcp-multiproject プロファイルを設定します。

    • multicluster.yaml ファイルは、マルチクラスタ構成で Anthos Service Mesh が必要とする設定を構成します。

  5. 検証 Webhook を構成して、リビジョン ラベルで istiod を検出できるようにします。

    kubectl apply -f asm/istio/istiod-service.yaml

    このコマンドは、構成の適用前に検証 Webhook が構成を自動的にチェックするサービス エントリを作成します。

  6. 正規サービス コントローラをクラスタにデプロイします。

    kubectl apply -f asm/canonical-service/controller.yaml

    正規サービス コントローラは、同じ論理サービスに属するワークロードをグループ化します。正規サービスのさらに詳しい内容については、正規サービスの概要をご覧ください。

コントロール プレーン コンポーネントを確認する

istio-system のコントロール プレーン Pod が稼働していることを確認します。

kubectl get pod -n istio-system

予想される出力は次のようになります。

NAME                                   READY   STATUS      RESTARTS   AGE
istio-ingressgateway-cff9f5c7d-qg4ls   1/1     Running   0          7m5s
istio-ingressgateway-cff9f5c7d-vlkzb   1/1     Running   0          7m20s
istiod-66b587859c-886gx                1/1     Running   0          7m33s
istiod-66b587859c-dfs2j                1/1     Running   0          7m33s

サイドカー プロキシの挿入

Anthos Service Mesh は、サイドカー プロキシを使用してネットワークのセキュリティ、信頼性、オブザーバビリティを強化します。Anthos Service Mesh では、これらの機能がアプリケーションのプライマリ コンテナから抽出され、同じ Pod 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。Pod にサイドカー プロキシを挿入するには、Anthos Service Mesh をインストールしたときに istiod に設定したものと同じリビジョン ラベルを使用して名前空間をラベル付けし、自動サイドカー プロキシ インジェクション(自動インジェクション)を構成します。

  • Anthos Service Mesh をインストールする前に、クラスタで実行されているワークロードがある名前空間で自動インジェクションを有効にする必要があります。

  • 新しいワークロードをデプロイする前に、Anthos Service Mesh がトラフィックをモニタリングおよび保護できるように、自動インジェクションを構成します。

自動インジェクションを有効にするには:

  1. 次のコマンドを使用して、istiod のリビジョン ラベルを探します。

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

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

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-178-10-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-178-10-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586

    出力の LABELS 列で、接頭辞 istio.io/rev= に続く istiod リビジョン ラベルの値をメモします。この例での値は asm-178-10 です。

  2. リビジョン ラベルを適用し、存在する場合は istio-injection ラベルを削除します。次のコマンドで、NAMESPACE は自動インジェクションを有効にする名前空間の名前で、REVISION は前の手順でメモしたリビジョン ラベルです。

    kubectl label namespace NAMESPACE istio-injection-istio.io/rev=REVISION --overwrite
    

    出力中のメッセージ "istio-injection not found" は無視して構いません。これは、今までは名前空間に istio-injection ラベルが付いていなかったことを意味します。Anthos Service Mesh の新規インストールや新規デプロイでは、こうなって当然です。名前空間に istio-injection とリビジョン ラベルの両方があると自動インジェクションが失敗するため、Anthos Service Mesh ドキュメント内のすべての kubectl label コマンドには istio-injection ラベルの削除が含まれています。

  3. Anthos Service Mesh をインストールする前にクラスタでワークロードが実行されていた場合は、Pod を再起動して再インジェクションをトリガーします。

    Pod を再起動する方法は、アプリケーションとクラスタが属する環境によって異なります。たとえば、ステージング環境では、すべての Pod を削除するのみの場合がありますが、それによって Pod が再起動されます。ただし、本番環境では、Blue/Green デプロイを実装するプロセスにより、トラフィックが中断しないように Pod を安全に再起動できます。

    kubectl を使用すると、ローリングの再起動を実行できます。

    kubectl rollout restart deployment -n NAMESPACE
    
  4. Pod が新しいバージョンの istiod を指すように構成されていることを確認します。

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    

クラスタの登録

Google Cloud コンソールで統合ユーザー インターフェースにアクセスするには、クラスタをプロジェクトのフリートに登録する必要があります。フリートは、Google Cloud 外のクラスタを含むクラスタとそのワークロードを表示して管理するために統合された方法を提供します。

クラスタの登録については、フリートへのクラスタの登録をご覧ください。

次のステップ