Kubernetes Engine への Istio のインストール

Istio は、Kubernetes Engine 上で実行されるサービスを含むマイクロサービスを接続、モニタリング、保護するためのオープンソース フレームワークです。サービスコードの変更を必要とせずに、負荷分散、サービス間認証、モニタリングなどを使用して、デプロイされたサービスのネットワークを構築できます。サービスに Istio サポートを追加するには、特殊な Envoy サイドカー プロキシを各アプリケーションのポッドにデプロイします。Envoy プロキシは、マイクロサービス間のすべてのネットワーク通信を傍受し、Istio のコントロール プレーン機能を使用して設定および管理されます。このチュートリアルでは、Kubernetes Engine に Istio をインストールして設定し、Istio 対応のマルチサービス アプリケーションをデプロイする方法を示します。

始める前に

次の手順に従って Google Kubernetes Engine API を有効にします。
  1. Google Cloud Platform Console で Kubernetes Engine ページにアクセスします。
  2. プロジェクトを作成または選択します。
  3. API と関連サービスが有効になるのを待ちます。これには数分かかることがあります。
  4. プロジェクトの課金を有効にします。

    課金の有効化

このチュートリアルで使用されている以下のコマンドライン ツールをインストールします。

  • Kubernetes Engine クラスタを作成および削除するには、gcloud を使用します。gcloudGoogle Cloud SDK に含まれています。
  • kubectl は、Kubernetes Engine で使用されるクラスタ オーケストレーション システムである Kubernetes を管理するために使用されます。gcloud を使用して kubectl をインストールできます。
    gcloud components install kubectl

gcloud コマンドライン ツールのデフォルトを設定する

次のコマンドを実行してデフォルト値を設定しておくと、gcloud コマンドライン ツールでプロジェクト IDCompute Engine ゾーンの各オプションを入力する時間を節約できます。
gcloud config set project [PROJECT_ID]
gcloud config set compute/zone us-central1-b

Kubernetes Engine クラスタを作成する

このチュートリアル用のクラスタを作成するには、次のコマンドを実行します。このチュートリアル クラスタには istio-tutorial という名前を付けます。

gcloud container clusters create istio-tutorial \
    --machine-type=n1-standard-2 \
    --num-nodes=4 \
    --no-enable-legacy-authorization

必要なクラスタができたら:

  • 現在のユーザーにクラスタ管理者権限を付与する - この権限は Istio に必要な役割に基づくアクセス制御(RBAC)ルールを作成するために必要です。

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

独自のクラスタを使用する

このチュートリアルで既存のクラスタを使用する場合は、Kubernetes Engine のデフォルト バージョンの Kubernetes が使用されており、役割ベースのアクセス制御(RBAC)が有効になっていることを確認してください。RBAC を有効にするには、--no-enable-legacy-authorization オプションを使用してクラスタを作成または更新する必要があります。また、kubectl がインストールされており、そのバージョンがクラスタと同じかそれより新しいことを確認する必要もあります。

ステップ 1: Istio をインストールする

まずは、Istio をインストールしましょう。0.2 リリースから、Istio は、独自の istio-system 名前空間にインストールされ、他のすべての名前空間からのマイクロサービスを管理することができます。インストールには、Istio コア コンポーネント、ツール、サンプルが含まれています。

クラスタ資格情報が設定されているマシンと同じマシンで次の手順を実行します。これはクラスタ管理マシンです。

  1. Istio リリースページに移動して、Istio クライアントを実行する OS に対応したインストール ファイルをダウンロードします。

  2. ダウンロードしたインストール ファイルを展開します。インストール ディレクトリに次のものが格納されます。

    • install/ には Kubernetes 用のインストール .yaml ファイル
    • samples/ にはサンプル アプリケーション
    • bin/ ディレクトリには istioctl クライアント バイナリ。istioctl は、Envoy をサイドカー プロキシとして手動で挿入するときと、ルーティング ルールやポリシーを作成するために使用されます。
    • istio.VERSION 構成ファイル
  3. Istio インストールのルート ディレクトリにいることを確認します。

  4. istioctl クライアントを PATH に追加します。

    export PATH=$PWD/bin:$PATH
    
  5. Istio のコア コンポーネントをインストールします。

    kubectl apply -f install/kubernetes/istio-auth.yaml
    

    これにより、以下が実行されます。

    • 必要な RBAC 権限とともに istio-system 名前空間が作成されます。
    • 次のコア Istio コンポーネントがデプロイされます。

      • Istio-Pilot。サービス ディスカバリと Istio サービス メッシュ内の Envoy サイドカー プロキシの設定を担当します。
      • Istio-Mixer。サービス メッシュ全体にアクセス制御と利用ポリシーを適用します。
      • Istio-Ingress。クラスタ外部からのトラフィックの受信ポイントを提供します。
      • Istio-CA(認証局)。Istio の鍵と証明書の管理を自動化します。
    • Envoy サイドカー間の相互 TLS 認証を可能にします。この認証オプションはすべてのアプリケーションに対して機能するとは限らないことに注意してください。Istio セットアップ ガイドで、認証オプションなしで Istio をインストールする方法とそうすることが必要な場合を確認してください。

ステップ 2: Istio インストールを確認する

  1. Kubernetes サービス istio-pilotistio-mixeristio-ingress がデプロイされていることを確認します。

    $ kubectl get service -n istio-system
    NAME            CLUSTER-IP      EXTERNAL-IP       PORT(S)                       AGE
    istio-ingress   10.83.245.171   35.184.245.62     80:32730/TCP,443:30574/TCP    5h
    istio-pilot     10.83.251.173   <none>            8080/TCP,8081/TCP             5h
    istio-mixer     10.83.244.253   <none>            9091/TCP,9094/TCP,42422/TCP   5h

  2. 対応する Kubernetes ポッドがデプロイされており、すべてのコンテナ(istio-pilot-*istio-mixer-*istio-ingress-*istio-ca-*)が稼働していることを確認します。

    $ kubectl get pods -n istio-system
    istio-ca-3657790228-j21b9           1/1       Running   0          5h
    istio-ingress-1842462111-j3vcs      1/1       Running   0          5h
    istio-initializer-184129454-zdgf5   1/1       Running   0          5h
    istio-pilot-2275554717-93c43        1/1       Running   0          5h
    istio-mixer-2104784889-20rm8        2/2       Running   0          5h

ステップ 3: BookInfo サンプル アプリケーションをデプロイする

Istio がインストールされ、そのすべてのコンポーネントが実行されたら、インストールに付属しているサンプル アプリケーションをどれでもデプロイすることができます。このチュートリアルでは、BookInfo をインストールします。これは、ウェブ製品ページ、書籍の詳細、レビュー(レビュー サービスのバージョンはいくつか存在する)、評価(これらのすべてが Istio を使用して管理されている)を提供する 4 つのサービスで構成された単純な模擬書店アプリケーションです。この例で使用されているソースコードとその他のすべてのファイルは、Istio インストールの samples/bookinfo ディレクトリにあります。

以下の手順を実行すると、Istio 対応環境で BookInfo アプリケーションのサービスがデプロイされ、Istio 機能を提供するために Envoy サイドカー プロキシが各サービスと一緒に挿入されます。

  1. まだクラスタ管理マシン上の Istio インストール ディレクトリのルートにいることを確認します。

  2. kubectl applyistioctl kube-inject を使用してアプリケーションをデプロイします。kube-inject コマンドは、サイドカーがサービスと一緒に各アプリケーション ポッドにデプロイされるように BookInfo デプロイメントを更新します。

    kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)
    
  3. 次のコマンドを実行して、アプリケーションが正しくデプロイされていることを確認します。

    $ kubectl get services
    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    $ kubectl get pods
    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m

ステップ 4: アプリケーションのデプロイメントを検証する

これでデプロイが完了したため、実際に BookInfo アプリケーションを確認してみましょう。

受信 IP とポートの取得

BookInfo を使用するには、まず、受信 IP とポートを次のように取得する必要があります。

$ kubectl get ingress -o wide
NAME      HOSTS     ADDRESS                PORTS     AGE
gateway   *         35.184.245.62          80        1d

これにより、受信サービスのアドレスが次のように表示されます。

export GATEWAY_URL=35.184.245.62:80

アプリケーションの実行

アドレスとポートを取得したら、curl を使用して BookInfo アプリケーションが実行されていることを確認します。

curl -I http://${GATEWAY_URL}/productpage

レスポンスが 200 OK を示している場合は、アプリケーションが Istio と正しく連動していることを意味します。

その後で、ブラウザに http://$GATEWAY_URL/productpage を指定して BookInfo ウェブページを表示します。ページを何回か更新すると、まだ Istio を使用してバージョン ルーティングを管理していないため、ラウンドロビン スタイル(赤色の星、黒色の星、星なし)で示される、さまざまなバージョンのレビューが製品ページに表示されるはずです。

独自のアプリケーションのデプロイ

独自のアプリケーションをデプロイする場合は、独自の YAML デプロイメントと同じ手順に従うだけです。Istio ではアプリケーション自体を変更する必要はありません。Envoy プロキシは HTTP/1.0 をサポートしていないため、アプリケーションはすべての HTTP トラフィックに対して HTTP/1.1 または HTTP/2.0 プロトコルを使用する必要があることにご注意ください。Envoy プロキシは、HTTP/1.0 には存在しないヘッダーをルーティングに使用します。

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

次のステップの BookInfo アプリケーションの調査に進まない場合は、このチュートリアルで使用されているリソースの料金が Google Cloud Platform アカウントに請求されないように、次の操作を行ってください。

  1. istio-ingress 受信サービスを削除します。

    kubectl -n istio-system delete service istio-ingress
    
  2. 次のコマンドの出力を監視して、istio-ingress ロードバランサが削除されるまで待機します。

    gcloud compute forwarding-rules list
    
  3. コンテナ クラスタを削除します。

    gcloud container clusters delete istio-tutorial
    

次のステップ

Istio コントロール プレーンは、Kubernetes にしかインストールできませんが、Istio のメッシュ拡張機能を使用すれば、Compute Engine VM などの非 Kubernetes マシンを Istio サービス メッシュに追加することができます。Compute Engine で Istio を使用するで、この方法と BookInfo の例を展開する方法が説明されています。

Istio の詳細を調べたい場合は、Istio サイトのガイド セクションに、次のような BookInfo の Istio 機能を試すためのチュートリアルがあります。

  • Intelligent Routing: この例では、BookInfo で Istio のさまざまなトラフィック管理機能を使用する方法を示します。これは、このチュートリアルの次のステップとして行うことを強くおすすめします。
  • In-Depth Telemetry: この例では、Istio Mixer と Envoy プロキシを使用して BookInfo のサービス全体で均一な指標、ログ、トレースを取得する方法を示します。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント