Anthos Service Mesh 1.6

オンプレミスの Anthos Service Mesh のアップグレード

このガイドでは、GKE on-prem で Anthos Service Mesh のバージョンを 1.5.4+ or 1.6.4+ から 1.6.8 にアップグレードする方法について説明します。Anthos Service Mesh 1.4.5 以降からアップグレードするには、まず Anthos Service Mesh 1.5 にアップグレードする必要があります。Anthos Service Mesh 1.4 から 1.6 に直接アップグレードすることはできません。

アップグレードを行う際は、デュアル コントロール プレーンのアップグレード(カナリア アップグレード)をおすすめします。ここでは、コントロール プレーンの新しいバージョンと以前のバージョンの両方を実行し、少数のワークロードで新しいバージョンのテストを行います。このアプローチはインプレース アップグレードよりも安全です。インプレース アップグレードでは、コントロール プレーンの新しいバージョンが以前のバージョンに置き換わります。istio-ingressgateway はインプレースでアップグレードされるため、クラスタの中断を計画する必要があるので注意してください。

Anthos Service Mesh のコントロール プレーン コンポーネントのデプロイには 5~10 分ほどかかります。また、すべてのワークロードに新しいサイドカー プロキシを挿入し、現在の Anthos Service Mesh バージョンで更新されるようにする必要があります。サイドカー プロキシの更新にかかる時間は、Pod 数、ノード数、デプロイのスケーリング設定、Pod 中断のコスト、その他の構成要素など、さまざまな要因に左右されます。サイドカー プロキシの更新にかかる大まかな時間は 1 分あたり 100 Pod です。

アップグレードの概要

このセクションでは、Anthos Service Mesh のアップグレード手順を説明します。

準備

  1. サポートされている機能とこのガイドを確認して、機能とアップグレード プロセスをよく理解してください。

  2. 以前のバージョンの Anthos Service Mesh をインストールしたときにオプション機能を有効にした場合は、アップグレードするときに同じ機能を有効にする必要があります。オプション機能を有効にするには、--set values フラグを追加するか、istioctl install コマンドを実行するときに YAML ファイルで -f フラグを指定します。

アップグレード

  1. このガイドの手順に従って、Anthos Service Mesh のアップグレードを準備します。

  2. Anthos Service Mesh をアップグレードします

環境設定

Anthos Service Mesh をインストールするマシンには、次のツールが必要です。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。

  • curl コマンドライン ツール
  • Cloud SDKgcloud コマンドライン ツール)

Cloud SDK をインストールしたら、次の手順を実施します。

  1. Cloud SDK で認証します。

    gcloud auth login
    
  2. コンポーネントを更新します。

    gcloud components update
    
  3. kubectl をインストールします。

    gcloud components install kubectl
    
  4. Online Boutique のサンプル アプリケーションでインストールをデプロイしてテストする場合は、kpt をインストールします。

    gcloud components install kpt
    
  5. 次のようにしてコンテキストをユーザー クラスタに切り替えます。

    kubectl config use-context CLUSTER_NAME
  6. ユーザー アカウント(Google Cloud ログイン メールアドレス)にクラスタ管理者の権限を付与します。この権限は、Anthos Service Mesh に必要なロールベースのアクセス制御(RBAC)ルールを作成するのに必要です。

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

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

    Linux

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

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

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

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

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

  4. Mac OS

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

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

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

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

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

  8. Windows

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

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

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

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

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

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

Anthos Service Mesh の更新

最初に新しいコントロール プレーンのデプロイをリビジョン ベースで行ってから Anthos Service Mesh をアップグレードすることをおすすめします。デュアル コントロール プレーンでは、少数のワークロードでアップグレードの効果をモニタリングできます。アプリケーションのテスト後に、すべてのトラフィックを新しいバージョンに移行できます。これは、インプレース アップグレードを行うよりもはるかに安全です。インプレース アップグレードでは、以前のバージョンのコントロール プレーンが新しいコントロール プレーンで置き換わります。

Anthos Service Mesh の新しいバージョンをインストールするときに、revision インストール設定を使用すると、複数の独立したコントロール プレーンを同時にデプロイできます。アップグレードを開始するには、別の revision 設定を使用して、新しいバージョンのコントロール プレーンを古いものの隣にインストールします。各リビジョンは、独自の Deployment、Service などを持つ完全な Anthos Service Mesh コントロール プレーンの実装です。

コントロール プレーンの更新

  1. revision 設定の環境変数を作成します。次のコマンドで、revision_name をリビジョンを表す文字列で置き換えます。

    export REVISION=revision_name

    リビジョン引数により、istio.io/rev ラベルがコントロール プレーン デプロイに追加されます。リビジョン名は DNS-1035 のラベルにします。ラベルには小文字の英数字または - を使用し、ラベルの先頭は英字に、ラベルの最後は英数字にする必要があります(例: my-name'abc-123)。検証に使用される正規表現は '[a-z]([-a-z0-9]*[a-z0-9])?') です。

  2. 新しいリビジョンをインストールします。

    istioctl install \
      --set profile=asm-multicloud \
      --revision=${REVISION}
    

    このコマンドの実行後は、2 つのコントロール プレーン デプロイとサービスを並行して実行できます。

    kubectl get pods -n istio-system
    

    revision が文字列「asm16」に設定されている出力例:

    NAME                                   READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-c56675fcd-86zdn   1/1     Running   0          2m9s
    istio-ingressgateway-c56675fcd-vn4nv   1/1     Running   0          2m21s
    istiod-asm16-6d5cfd4b89-xztlr         1/1     Running   0          3m44s
    istiod-fb7f746f4-wcntn                 1/1     Running   0          50m
    promsd-579f9f9bf4-m65nc                2/2     Running   1          50m

ワークロードの再デプロイ

新しいリビジョンをインストールしても、既存のサイドカー プロキシには影響しません。これらをアップグレードするには、新しいコントロール プレーンを指すように構成する必要があります。これは、名前空間ラベル istio.io/rev に基づいたサイドカー インジェクションで制御されます。

  1. 再デプロイするワークロードの名前空間の環境変数を作成します。

    export NAMESPACE=your_namespace
  2. ワークロードのデプロイに使用する Deployment の名前の環境変数を作成します。

    export DEPLOYMENT=your_deployment
  3. 新しい Anthos Service Mesh バージョンで挿入されるワークロードを更新します。

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

    下位互換性によって istio.io/rev ラベルより優先されるため、istio-injection ラベルを削除する必要があります。

  4. Pod を再起動して再挿入をトリガーします。

    kubectl rollout restart deployment ${DEPLOYMENT} -n ${NAMESPACE}
    
  5. Pod が istiod-$REVISION コントロール プレーンを指すように構成されていることを確認します。

    kubectl get pods -n ${NAMESPACE} -l istio.io/rev=${REVISION}
    
  6. アプリケーションをテストして、ワークロードが正しく機能していることを確認します。

    以前のバージョンにロールバックする必要がある場合:

    1. 以前の Anthos サービス メッシュ バージョンで挿入するワークロードを更新します。

      kubectl label namespace ${NAMESPACE} istio.io/rev-  istio-injection=enabled --overwrite
      
    2. Pod を再起動して再挿入をトリガーします。

      kubectl rollout restart deployment ${DEPLOYMENT} -n ${NAMESPACE}
      

    アプリケーションが想定どおりに動作していることを確認したら、古いコントロール プレーンを削除してアップグレードを完了します。

    kubectl delete svc istiod -n istio-system
    kubectl delete deploy istiod -n istio-system

    メッシュでサービス拒否(DOS)攻撃を防止するため、ISTIO-SECURITY-2020-007 で指定された構成変更を適用します。