productpageへのIstioの有効化
前のモジュールで見たように、Istio はマイクロサービスをより効果的に運用するための機能を提供することで、Kubernetes を強化します。
このモジュールでは、単一のマイクロサービス `productpage` に Istio を有効にします。アプリケーションの残りの部分は以前と同様に動作し続けます。Istio はマイクロサービスごとに段階的に有効にできることに注意してください。Istio はマイクロサービスに対して透過的に有効になります。マイクロサービスのコードを変更したり、アプリケーションを中断したりする必要はありません。アプリケーションは実行され続け、ユーザーのリクエストに応答します。
デフォルトのデスティネーションルールを適用します
$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/networking/destination-rule-all.yaml
`productpage` マイクロサービス(Istio 有効)を再デプロイします
$ curl -s https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml | istioctl kube-inject -f - | sed 's/replicas: 1/replicas: 3/g' | kubectl apply -l app=productpage,version=v1 -f - deployment.apps/productpage-v1 configured
アプリケーションのウェブページにアクセスし、アプリケーションが引き続き機能することを確認します。元のアプリケーションのコードを変更せずに Istio が追加されました。
`productpage` のポッドを確認し、各レプリカに2つのコンテナがあることを確認します。最初のコンテナはマイクロサービス自体で、2番目のコンテナはそれにアタッチされたサイドカープロキシです。
$ kubectl get pods details-v1-68868454f5-8nbjv 1/1 Running 0 7h details-v1-68868454f5-nmngq 1/1 Running 0 7h details-v1-68868454f5-zmj7j 1/1 Running 0 7h productpage-v1-6dcdf77948-6tcbf 2/2 Running 0 7h productpage-v1-6dcdf77948-t9t97 2/2 Running 0 7h productpage-v1-6dcdf77948-tjq5d 2/2 Running 0 7h ratings-v1-76f4c9765f-khlvv 1/1 Running 0 7h ratings-v1-76f4c9765f-ntvkx 1/1 Running 0 7h ratings-v1-76f4c9765f-zd5mp 1/1 Running 0 7h reviews-v2-56f6855586-cnrjp 1/1 Running 0 7h reviews-v2-56f6855586-lxc49 1/1 Running 0 7h reviews-v2-56f6855586-qh84k 1/1 Running 0 7h curl-88ddbcfdd-cc85s 1/1 Running 0 7h
Kubernetes は、`productpage` の元のポッドを Istio 有効なポッドに透過的かつ段階的に置き換え、ローリングアップデートを実行しました。新しいポッドが実行を開始したときのみ、古いポッドが終了され、トラフィックは新しいポッドに1つずつ透過的に切り替えられました。つまり、新しいポッドを開始する前に、複数のポッドを終了することはありませんでした。これらすべては、アプリケーションの中断を防ぎ、Istio のインジェクション中も動作し続けるようにするために行われました。
`productpage` の Istio サイドカーのログを確認します
$ kubectl logs -l app=productpage -c istio-proxy | grep GET ... [2019-02-15T09:06:04.079Z] "GET /details/0 HTTP/1.1" 200 - 0 178 5 3 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" "18710783-58a1-9e5f-992c-9ceff05b74c5" "details:9080" "172.30.230.51:9080" outbound|9080||details.tutorial.svc.cluster.local - 172.21.109.216:9080 172.30.146.104:58698 - [2019-02-15T09:06:04.088Z] "GET /reviews/0 HTTP/1.1" 200 - 0 379 22 22 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" "18710783-58a1-9e5f-992c-9ceff05b74c5" "reviews:9080" "172.30.230.27:9080" outbound|9080||reviews.tutorial.svc.cluster.local - 172.21.185.48:9080 172.30.146.104:41442 - [2019-02-15T09:06:04.053Z] "GET /productpage HTTP/1.1" 200 - 0 5723 90 83 "10.127.220.66" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" "18710783-58a1-9e5f-992c-9ceff05b74c5" "tutorial.bookinfo.com" "127.0.0.1:9080" inbound|9080|http|productpage.tutorial.svc.cluster.local - 172.30.146.104:9080 10.127.220.66:0 -
名前空間の名前を出力します。Istio ダッシュボードでマイクロサービスを認識するのに必要です。
$ echo $(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}") tutorial
/etc/hosts
ファイルで以前に設定したカスタム URL を使用して、Istio ダッシュボードを確認します。以前http://my-istio-dashboard.io/dashboard/db/istio-mesh-dashboard
左上のドロップダウンメニューから「Istio Mesh ダッシュボード」を選択します。
左上のドロップダウンメニューから「Istio Mesh ダッシュボード」を選択します。 名前空間の `productpage` サービスを確認します。名前は `productpage.<あなたの名前空間>.svc.cluster.local` であるはずです。
Istio Mesh ダッシュボード 「Istio Mesh ダッシュボード」の「サービス」列で、`productpage` サービスをクリックします。
Istio サービスダッシュボード、`productpage` が選択されています。 「サービスワークロード」セクションまでスクロールダウンします。ダッシュボードのグラフが更新されていることを確認します。
Istio サービスダッシュボード
これが、単一のマイクロサービスに Istio を適用することの直接的な利点です。時間、HTTP メソッド、パス、応答コードを含む、マイクロサービスとの間のトラフィックのログを取得できます。Istio ダッシュボードを使用してマイクロサービスを監視できます。
次のモジュールでは、Istio がアプリケーションに提供できる機能について学習します。Istio の一部の機能は、単一のマイクロサービスに適用した場合にも有益ですが、Istio をアプリケーション全体に適用して、その可能性を最大限に引き出す方法を学習します。
すべてのマイクロサービスで Istio を有効にする準備ができました。すべてのマイクロサービスで Istio を有効にする