このガイドでは、Istio 1.6 から GKE クラスタの Anthos Service Mesh 1.6.14 に移行する方法について説明します。以前のバージョンの Istio がインストールされている場合は、まず Istio を 1.6 にアップグレードする必要があります。
始める前に
Anthos Service Mesh をインストールする前に、次のことを確認してください。
- 環境を設定し、必要なツールをインストールしている。
- プロジェクトを設定し、必要な API を有効にして権限を設定している。
- クラスタを設定し、必要なクラスタ オプションを有効にしている。
- Istio からの移行の準備を確認する。
認証情報と権限の設定
プロジェクトを初期化してインストールの準備をします。次のコマンドでサービス アカウントを作成し、サイドカー プロキシなどのコントロール プレーン コンポーネントがプロジェクトのデータとリソースに安全にアクセスできるようにします。
curl --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data '' \ "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"
コマンドを実行すると、空の中かっこ
{}
が返されます。クラスタとのやり取りで必要な認証情報を取得します。
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --project=${PROJECT_ID}
現在のユーザーにクラスタ管理者の権限を付与します。この権限は、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 を続行しても問題ありません。
インストール ファイルのダウンロード
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-osx.tar.gz
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
- Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
- 署名ファイルをダウンロードし、
openssl
を使用して署名を検証します。curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
想定される出力は
Verified OK
です。 -
ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
tar xzf istio-1.6.14-asm.2-win.zip
このコマンドにより、現在の作業ディレクトリに
istio-1.6.14-asm.2
という名前のインストール ディレクトリが作成されます。このディレクトリには、次のものが含まれます。samples
ディレクトリにあるサンプル アプリケーション- Anthos Service Mesh のインストールに使用する
istioctl
コマンドライン ツールは、bin
ディレクトリにあります。 - Anthos Service Mesh 構成プロファイルは
manifests/profiles
ディレクトリにあります。
- Anthos Service Mesh インストールのルート ディレクトリに移動していることを確認します。
cd istio-1.6.14-asm.2
- 利便性を考えて、
/bin
ディレクトリ内のツールを PATH に追加します。export PATH=$PWD/bin:$PATH
Linux
Mac OS
Windows
リソース構成ファイルの準備
istioctl install
コマンドを実行するときは、コマンドラインで -f istio-operator.yaml
を指定します。このファイルには、Anthos Service Mesh で必要なプロジェクトとクラスタに関する情報が含まれています。プロジェクトとクラスタの情報を設定できるように、istio-operator.yaml
と他のリソース構成ファイルを含むパッケージをダウンロードする必要があります。
開始するには、使用する認証局(CA)に基づいてダウンロードするパッケージを選択します。
asm
: thumb_up_alt このパッケージは新規インストールに推奨される Mesh CA を有効にします。asm-citadel
: 必要に応じて、Citadel を CA として有効にすることもできます。このパッケージを選択する前に、認証局の選択で詳細をご確認ください。
リソース構成ファイルを準備するには:
Anthos Service Mesh パッケージのリソース構成ファイル用に新しいディレクトリを作成します。クラスタ名をディレクトリ名として使用することをおすすめします。
Anthos Service Mesh パッケージをダウンロードするディレクトリに変更します。
CA に基づいて、使用するパッケージをダウンロードします。
Mesh CA
asm
パッケージをダウンロードします。これにより、Mesh CA が有効になります。kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.6-asm asm
Citadel
asm-citadel
パッケージをダウンロードします。これにより、Citadel が CA として使用できるようになります。kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm-citadel@release-1.6-asm asm
クラスタが作成されたプロジェクトのプロジェクト ID を設定します。
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
フリート ホスト プロジェクトのプロジェクト番号を設定します。
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
クラスタ名を設定します。
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
デフォルトのゾーンまたはリージョンを設定します。
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
使用する構成プロファイルを設定します。
すべてのクラスタが同じプロジェクトにある場合、
asm-gcp
プロファイルを設定します。kpt cfg set asm anthos.servicemesh.profile asm-gcp
サービス メッシュに別のプロジェクトのクラスタが含まれている場合は、
asm-gcp-multiproject
プロファイルを設定します(ベータ版)。kpt cfg set asm anthos.servicemesh.profile asm-gcp-multiproject
asm-gcp-multiproject
プロファイルを設定してasm
パッケージをダウンロードすると、Mesh CA が有効になります。その場合、マルチクラスタ / マルチプロジェクトのサービス メッシュを形成する他のプロジェクトに信頼ドメイン エイリアスを構成する必要があります。それ以外の場合は、この手順をスキップします。マルチクラスタ / マルチプロジェクト メッシュに含まれるすべてのクラスタのプロジェクト ID を取得します。
各クラスタのプロジェクト ID に、信頼ドメイン エイリアスを設定します。たとえば、3 つのプロジェクトにクラスタがある場合は、次のコマンドを実行して、
PROJECT_ID_1
、PROJECT_ID_2
、PROJECT_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 をインストールした後、信頼ドメイン エイリアスを設定するだけでなく、クラスタ間で負荷分散を有効にする必要があります。
kpt
セッターの値を出力します。kpt cfg list-setters asm
コマンドの出力で、次のセッターの値が正しいことを確認します。
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
Anthos Service Mesh への移行
Istio から移行するには、デュアル コントロール プレーンのアップグレード プロセス(Istio ドキュメントでは、カナリア アップグレード)に従うことをおすすめします。デュアル コントロール プレーンのアップグレードでは、既存のコントロール プレーンを残しながら、新しいバージョンのコントロール プレーンをインストールします。新しいバージョンをインストールする際は、新しいコントロール プレーンのバージョンを識別する revision
ラベルを含めます。各リビジョンは、独自の Deployment と Service を持つ完全な Anthos Service Mesh コントロール プレーンの実装です。
新しいコントロール プレーンを参照するようにワークロードに同じ revision
ラベルを設定し、ローリング再起動を行い、新しい Anthos Service Mesh バージョンでプロキシを再挿入して新しいバージョンに移行します。この方法では、少数のワークロードでアップグレードの効果をモニタリングできます。アプリケーションのテスト後に、すべてのトラフィックを新しいバージョンに移行できます。これは、インプレース アップグレードを行うよりもはるかに安全です。インプレース アップグレードでは、以前のバージョンのコントロール プレーンが新しいコントロール プレーンで瞬時に置き換わります。
コントロール プレーンの更新
次のコマンドを実行して、istio-operator.yaml
ファイルで設定した構成プロファイルを使用して新しいコントロール プレーンをデプロイします。サポートされているオプション機能を有効にするには、コマンドラインで -f
と YAML のファイル名を指定します。詳細については、オプション機能の有効化をご覧ください。
istioctl install \ -f asm/cluster/istio-operator.yaml \ --set revision=asm-1614-2
--set revision
引数は istiod
に istio.io/rev
ラベルを追加します。このコマンドの実行後は、コントロール プレーンの 2 つの Deployment と Service を並行して実行できます。
kubectl get pods -n istio-system
出力例:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-1614-2-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
ワークロードの再デプロイ
新しいリビジョンをインストールしても、既存のサイドカー プロキシには影響しません。これらをアップグレードするには、新しいコントロール プレーンを指すように構成する必要があります。これは、名前空間ラベル istio.io/rev
に基づいたサイドカー インジェクションで制御されます。
新しい Anthos Service Mesh バージョンで挿入されるワークロードを更新します。
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1614-2 --overwrite
istio.io/rev
ラベルよりも優先されるため、istio-injection
ラベルは削除する必要があります。Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACE
Pod が
istiod-asm-1614-2
コントロール プレーンを参照するように構成されていることを確認します。kubectl get pods -n NAMESPACE -l istio.io/rev=asm-1614-2
アプリケーションをテストして、ワークロードが正しく機能していることを確認します。
他の名前空間にワークロードがある場合は、各名前空間に対して前の手順を繰り返します。
アプリケーションが期待どおりに機能していることを確認したら、移行を完了するに進みます。それ以外の場合は、次の手順で以前のバージョンにロールバックします。
ロールバックするには:
コントロール プレーンの以前のバージョンで挿入されるワークロードを更新します。
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
プロキシが Istio のバージョンになるように、Pod を再起動してインジェクションを再度トリガーします。
kubectl rollout restart deployment -n NAMESPACE
以前のバージョンの
istio-ingressgateway
を再デプロイします。kubectl -n istio-system rollout undo deploy istio-ingressgateway
新しいコントロール プレーンを削除します。
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-1614-2 -n istio-system --ignore-not-found=true
移行を完了する
アプリケーションが期待どおりに機能していることを確認したら、次の手順で Anthos Service Mesh への移行を完了します。
Istio on GKE アドオンから移行した場合は、アドオンを無効にします。
gcloud beta container clusters update CLUSTER_NAME \ --project=CLUSTER_PROJECT_ID \ --update-addons=Istio=DISABLED
次のコマンドを実行して、Canonical Service コントローラをデプロイします。
kubectl apply -f asm/canonical-service/controller.yaml
このコマンドでは、Canonical Service コントローラをクラスタにデプロイします。Canonical Service コントローラは、同じ論理サービスに属するワークロードをグループにまとめ、Google Cloud コンソールのサービス ダッシュボードで追加機能のロックを解除する必要があります。詳細については、Canonical Service コントローラの有効化と無効化をご覧ください。
古いコントロール プレーンを削除します。
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Anthos Service Mesh ダッシュボードの表示
このセクションの内容は、asm-gcp
構成プロファイルを使用して Anthos Service Mesh がインストールされている場合にのみ適用されます。asm-gcp-multiproject
プロファイルを使用して Anthos Service Mesh をインストールした場合、テレメトリー データは Google Cloud コンソールの Anthos Service Mesh ダッシュボードに表示されません。
サイドカー プロキシが挿入されたクラスタにワークロードをデプロイすると、Google Cloud コンソールの Anthos の [サービス メッシュ] ページで、Anthos Service Mesh が提供するすべてのオブザーバビリティ機能を確認できます。ワークロードをデプロイした後、Google Cloud コンソールにテレメトリー データが表示されるまでに 1~2 分ほどかかることがあります。
Google Cloud コンソールでの Anthos Service Mesh へのアクセスは、Identity and Access Management(IAM)によって制御されます。Anthos Service Mesh ページにアクセスするには、プロジェクト オーナーがユーザーに対して、プロジェクト編集者または閲覧者のロール、または、より限定的なロール(Google Cloud コンソールでの Anthos Service Mesh に対するアクセス制御を参照)を付与する必要があります。
Google Cloud コンソールで、[Anthos Service Mesh] に移動します。
メニューバーのプルダウン リストから Google Cloud プロジェクトを選択します。
複数のサービス メッシュがある場合は、[サービス メッシュ] プルダウン リストからメッシュを選択します。
詳細については、Google Cloud コンソールでの Anthos Service Mesh の確認をご覧ください。
Anthos Service Mesh ページに加えて、サービスに関連する指標(特定のサービスで受信したリクエストの数など)が Cloud Monitoring に送信され、Metrics Explorer に表示されます。
指標を表示するには:
Google Cloud コンソールで、[Monitoring] ページに移動します。
[リソース] > [Metrics Explorer] を選択します。
指標の完全なリストについては、Cloud Monitoring のドキュメントの Istio 指標をご覧ください。
クラスタの登録
Google Cloud コンソールで統合ユーザー インターフェースにアクセスするには、クラスタをプロジェクトのフリートに登録する必要があります。フリートは、Google Cloud 外のクラスタを含むクラスタとそのワークロードを表示して管理するために統合された方法を提供します。
クラスタの登録については、フリートへのクラスタの登録をご覧ください。