オンプレミスへの Anthos Service Mesh のインストール

このガイドでは、GKE on VMware に Anthos Service Mesh バージョン 1.5.10-asm.2 をクリーン インストールする方法について説明します。以前のバージョンの Anthos Service Mesh がインストールされている場合は、GKE on VMware での Anthos Service Mesh のアップグレードをご覧ください。

インストールすると、GKE on VMware 上でサポートされる機能が有効になります。

コントロール プレーン コンポーネントの概要

GKE on VMware には、次の Istio コンポーネントがプリインストールされています。

  • Citadel は kube-system 名前空間にインストールされます。
  • パイロットと Istio Ingress Gateway は gke-system 名前空間にインストールされます。

GKE on VMware では、これらのコンポーネントを使用して Ingress を有効にし、Google が管理するコンポーネント間のセキュア通信を実現しています。Ingress 機能のみが必要な場合は、OSS Istio または Anthos Service Mesh をインストールする必要はありません。Ingress の構成の詳細については、Ingress を有効にするをご覧ください。

Anthos Service Mesh をインストールすると、そのコンポーネントは istio-system 名前空間にインストールされます。Anthos Service Mesh コンポーネントは別の名前空間にあるため、GKE on VMware がプリインストールされた Istio コンポーネントと競合することはありません。

準備

設定を始める前に、次の要件と制限事項をご確認ください。

要件

  • GKE Enterprise の試用版ライセンスまたはサブスクリプションが必要です。詳細については、GKE Enterprise の料金ガイドをご覧ください。

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

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

  • クラスタ バージョンが、サポートされている環境に含まれていることを確認します。クラスタのバージョンを確認するには、gkectl コマンドライン ツールを使用します。

    gkectl version
    

    次のような出力が表示されます。

    1.2.0-gke.6 (git-0912663b0)
    

    gkectl がインストールされていない場合は、GKE On-Prem のダウンロードをご覧ください。

制限事項

1 つの Google Cloud プロジェクトにインストールできる Anthos Service Mesh は 1 つだけです。1 つのプロジェクトで複数のメッシュ デプロイはサポートされていません。

環境設定

ローカルマシンに Google Cloud CLI をインストールして初期化します。

gcloud CLI がすでにインストールされている場合は、次の手順を行います。

  1. gcloud CLI を使用して認証します。

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

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

    gcloud components install kubectl
    
  4. クラスタが作成されたプロジェクトのプロジェクト ID を取得します。

    gcloud

    gcloud projects list

    コンソール

    1. Google Cloud コンソールで、[ダッシュボード] ページに移動します。

      [ダッシュボード] ページに移動する

    2. ページ上部の [選択元] プルダウン リストをクリックします。表示された [選択元] ウィンドウで、プロジェクトを選択します。プロジェクト ID は、プロジェクト ダッシュボードの [プロジェクト情報] カードに表示されます。

  5. Google Cloud CLI のデフォルトのプロジェクト ID を設定します。

    gcloud config set project PROJECT_ID

認証情報と権限の設定

  1. Anthos Service Mesh をインストールする GKE on VMware ユーザー クラスタの kubectl があることを確認します。Anthos Service Mesh はユーザー クラスタにのみインストールできます。管理クラスタにはインストールできません。
  2. 現在のユーザーにクラスタ管理者の権限を付与します。この権限は、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 のインストールの準備

    Linux

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

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

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

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

    • samples にはサンプル アプリケーション。
    • bin ディレクトリには次のツール:
      • istioctl: istioctl は Anthos Service Mesh のインストールに使用します。
      • asmctl: asmctl を使用して、Anthos Service Mesh をインストールした後、セキュリティ構成を検証します(現在、asmctl は GKE on VMware ではサポートされていません)。

  4. Mac OS

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

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

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

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

    • samples にはサンプル アプリケーション。
    • bin ディレクトリには次のツール:
      • istioctl: istioctl は Anthos Service Mesh のインストールに使用します。
      • asmctl: asmctl を使用して、Anthos Service Mesh をインストールした後、セキュリティ構成を検証します(現在、asmctl は GKE on VMware ではサポートされていません)。

  8. ウィンドウ

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

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

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

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

    • samples にはサンプル アプリケーション。
    • bin ディレクトリには次のツール:
      • istioctl: istioctl は Anthos Service Mesh のインストールに使用します。
      • asmctl: asmctl を使用して、Anthos Service Mesh をインストールした後、セキュリティ構成を検証します(現在、asmctl は GKE on VMware ではサポートされていません)。

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

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

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

kubectl create namespace istio-system

Anthos Service Mesh のインストール

このセクションでは、Anthos Service Mesh をインストールし、[サポートされている機能] ページに表示されたサポートされているデフォルト機能を有効にする方法について説明します。サポートされているオプション機能の有効化については、オプション機能の有効化をご覧ください。

Anthos Service Mesh をインストールするには:

次のいずれかのコマンドを選択して、PERMISSIVE 相互 TLS(mTLS)認証モードまたは STRICT mTLS モードで Anthos Service Mesh を構成します。

PERMISSIVE mTLS

istioctl manifest apply --set profile=asm-onprem

STRICT mTLS

istioctl manifest apply --set profile=asm-onprem \
  --set values.global.mtls.enabled=true

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

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

kubectl get pod -n istio-system

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

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

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

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

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

自動サイドカー インジェクションは、次のように 1 つのコマンドで有効にできます。

kubectl label namespace NAMESPACE istio-injection=enabled --overwrite

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

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

外部 IP アドレスの構成

デフォルトの Anthos Service Mesh インストールでは、外部 IP アドレスが LoadBalancer サービスに自動的に割り振られることを前提としています。これは、GKE on VMware には当てはまりません。このため、Anthos Service Mesh Ingress Gateway リソースに IP アドレスを手動で割り振る必要があります。

外部 IP アドレスを構成するには、クラスタの負荷分散モードに応じて、以下のいずれかのセクションに従います。

統合負荷分散モード

  1. istio-ingressgateway Service の構成を開きます。

    kubectl edit svc -n istio-system istio-ingressgateway
    

    istio-ingressgateway Service の構成がシェルのデフォルトのテキスト エディタで開かれます。

  2. このファイルの仕様(spec)ブロックの下に次の行を追加します。

    loadBalancerIP: <your static external IP address>
    

    例:

    spec:
     loadBalancerIP: 203.0.113.1
    
  3. ファイルを保存します。

手動負荷分散モード

選択したロードバランサで VIP を使用して NodePort タイプの Service を公開するには、まず nodePort 値を確認する必要があります。

  1. シェルで istio-ingressgateway Service の構成を表示します。

    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    

    Anthos Service Mesh のゲートウェイの各ポートが表示されます。コマンドの出力は次のようになります。

     ...
     ports:
     - name: status-port
       nodePort: 30391
       port: 15020
       protocol: TCP
       targetPort: 15020
     - name: http2
       nodePort: 31380
       port: 80
       protocol: TCP
       targetPort: 80
     - name: https
       nodePort: 31390
       port: 443
       protocol: TCP
       targetPort: 443
     - name: tcp
       nodePort: 31400
       port: 31400
       protocol: TCP
       targetPort: 31400
     - name: https-kiali
       nodePort: 31073
       port: 15029
       protocol: TCP
       targetPort: 15029
     - name: https-prometheus
       nodePort: 30253
       port: 15030
       protocol: TCP
       targetPort: 15030
     - name: https-grafana
       nodePort: 30050
       port: 15031
       protocol: TCP
       targetPort: 15031
     - name: https-tracing
       nodePort: 31204
       port: 15032
       protocol: TCP
       targetPort: 15032
     - name: tls
       nodePort: 30158
       port: 15443
       protocol: TCP
       targetPort: 15443
     ...
    
  2. こうしたポートはロードバランサで公開されます。

    たとえば、http2 という名前のサービスポートには port 80 と nodePort 31380 があります。ユーザー クラスタのノードアドレスが 192.168.0.10192.168.0.11192.168.0.12 で、ロードバランサの VIP が 203.0.113.1 であると仮定します。

    203.0.113.1:80 に送信されたトラフィックが 192.168.0.10:31380192.168.0.11:31380192.168.0.12:31380 のいずれかに転送されるようにロードバランサを構成します。この指定された VIP で公開するサービスポートを選択できます。

次のステップ