接続されたクラスタへの Anthos Service Mesh のインストール

このガイドでは、GKE Enterprise 接続クラスタに Anthos Service Mesh バージョン 1.6.14-asm.2 をクリーン インストールする方法について説明します。このガイドでは、次の環境に Anthos Service Mesh をインストールします。

  • Kubernetes バージョン 1.16 の Amazon Elastic Kubernetes Service(Amazon EKS)
  • Kubernetes バージョン 1.16 の Microsoft Azure Kubernetes Service(Microsoft AKS)

インストールすると、asm-multicloud 構成プロファイルにてクラスタ上でサポートされる機能が有効になります。

準備

要件

  • Anthos Service Mesh をインストールするユーザー クラスタに、4 つ以上の vCPU、15 GB のメモリ、4 つのレプリカがある。

  • クラスタに Anthos Service Mesh やオープンソースの Istio がインストールされていない。

  • サービス メッシュに含めるには、サービスポートに名前を付ける必要があります。名前には、name: protocol[-suffix] の構文でポートのプロトコルを含める必要があります。角かっこは、ダッシュで始まるオプションの接尾辞です。詳細については、サービスポートの命名をご覧ください。

制限事項

1 つの Google Cloud プロジェクトに関連付けることができるメッシュは 1 つのみです。

環境設定

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

Google Cloud CLI をインストールした後:

  1. Google Cloud CLI で認証します。

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

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

    gcloud components install kubectl
    
  4. 必要とするバージョンの kpt をインストールします。

       curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2
       chmod +x kpt_0_39_2
       alias kpt="$(readlink -f kpt_0_39_2)"
    
  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

Anthos Service Mesh のインストールの準備

    Linux

  1. Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
  2. 署名ファイルをダウンロードし、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 です。

  3. ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
    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 ディレクトリにあります。

  4. Mac OS

  5. Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
  6. 署名ファイルをダウンロードし、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 です。

  7. ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
    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 ディレクトリにあります。

  8. Windows

  9. Anthos Service Mesh インストール ファイルを現在の作業ディレクトリにダウンロードします。
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
  10. 署名ファイルをダウンロードし、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 です。

  11. ファイル システム上の任意の場所にファイルの内容を抽出します。たとえば、現在の作業ディレクトリにコンテンツを抽出するには、次のコマンドを実行します。
    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 ディレクトリにあります。

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

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

コントロール プレーン コンポーネント用に istio-system という名前空間を作成します。

kubectl create namespace istio-system

検証 Webhook の構成

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

次の YAML を istiod-service.yaml という名前のファイルにコピーします。

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-1614-2
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-1614-2

Anthos Service Mesh のインストール

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

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-1614-2
    

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

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

    kubectl apply -f istiod-service.yaml
    

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

自動相互 TLS(自動 mTLS)はデフォルトで有効になっています。自動 mTLS の場合、クライアント サイドカー プロキシがサーバーにサイドカーがあるかどうかを自動的に検出します。クライアント サイドカーは、サイドカーを含むワークロードに mTLS を送信し、サイドカーなしでワークロードに書式なしテキストのトラフィックを送信します。

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

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

コマンドの出力に 1 つ以上のコンポーネントが Running 状態でないことが示されている場合は、接続されたクラスタでの GKE Enterprise のトラブルシューティングで、コンポーネントの詳細を取得するためのスクリプトを確認してください。

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

Anthos Service Mesh は、サイドカー プロキシを使用してネットワークのセキュリティ、信頼性、オブザーバビリティを強化します。Anthos Service Mesh では、これらの機能がアプリケーションのプライマリ コンテナから抽出され、同じ Pod 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。

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

Anthos Service Mesh のインストール前にクラスタで実行されていたワークロードの場合、現在の Anthos Service Mesh バージョンを使用するように、サイドカー プロキシを挿入または更新する必要があります。新しいワークロードをデプロイする前に、Anthos Service Mesh がトラフィックをモニタリングおよび保護できるように、サイドカー プロキシ インジェクションを構成します。

サイドカー自動挿入を有効にするには、istiod で設定したリビジョンと同じ名前を使用して、名前空間にラベルを付けます。次のコマンドを実行して、istiod のラベルを表示します。

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

リビジョン ラベル istio.io/rev=asm-1614-2 が出力にあることを確認します。これは、自動挿入を有効にするために使用するラベルです。自動挿入は、次のように 1 つのコマンドで有効にできます。

kubectl label namespace NAMESPACE istio-injection-istio.io/rev=asm-1614-2 --overwrite

ここで、NAMESPACE はアプリケーションのサービスの名前空間の名前です。名前空間を明示的に作成していない場合は default です。

詳細については、サイドカー プロキシの挿入をご覧ください。

サンプル アプリケーションのデプロイ

Anthos Service Mesh には事前構成された Ingress ゲートウェイ istio-ingressgateway があります。これにより、サービス メッシュで実行されているアプリケーションへの受信トラフィックを管理できます。クラスタ外(ブラウザなど)からアプリケーションにアクセスできるようにするには、次のコマンドを実行します。

  • istio-ingressgateway の外部 IP アドレスを取得する必要があります。

  • アプリケーションでは、Online Boutique サンプル アプリケーションの frontend-gateway.yaml と同様に、ゲートウェイと VirtualService リソースを定義する必要があります。

サンプル アプリケーションをデプロイして実行するには:

  1. サンプルをダウンロードします。

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    microservices-demo
    
  2. 自動サイドカー インジェクションを有効にします。

    kubectl label namespace default istio-injection=enabled
    
  3. サンプルをクラスタにデプロイします。

    kubectl apply -f microservices-demo
    

istio-ingressgateway の外部 IP アドレスを取得するには:

  1. ホスト鍵環境変数を作成します。

    Microsoft AKS

      export HOST_KEY="ip"
    

    Amazon EKS

      export HOST_KEY="hostname"
    
  2. INGRESS_HOST 環境変数を作成します。

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].'"$HOST_KEY"'}')
    
  3. INGRESS_PORT 環境変数を作成します。

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  4. ブラウザでアプリケーションにアクセスします。次の URL で、EXTERNAL_IP$INGRESS_HOST:$INGRESS_PORT に置き換えます。

    http://EXTERNAL_IP/

確認が終わったら、サンプルを削除します。

kubectl delete -f microservices-demo