はじめに
このガイドでは、Istioを迅速に評価できます。Istioに既に精通している場合、またはその他の構成プロファイルや高度なデプロイメントモデルのインストールに興味がある場合は、どのIstioインストール方法を使用すべきですか?に関するFAQページを参照してください。
続行するには、Kubernetesクラスタが必要です。クラスタを持っていない場合は、kindまたはその他のサポートされているKubernetesプラットフォームを使用できます。
Istioを使い始めるには、次の手順に従ってください。
- Istioのダウンロードとインストール
- Kubernetes Gateway API CRDのインストール
- サンプルアプリケーションのデプロイ
- 外部トラフィックへのアプリケーションの公開
- ダッシュボードの表示
Istioのダウンロード
ご使用のOS向けのインストールファイルをダウンロードするには、Istioリリースページにアクセスするか、最新リリースを自動的にダウンロードして解凍する(LinuxまたはmacOS)ことができます。
$ curl -L https://istio.dokyumento.jp/downloadIstio | sh -
Istioパッケージディレクトリに移動します。例えば、パッケージが
istio-1.24.0
の場合$ cd istio-1.24.0
インストールディレクトリには以下のものが含まれています。
samples/
内のサンプルアプリケーションbin/
ディレクトリ内のistioctl
クライアントバイナリ。
istioctl
クライアントをパスに追加します (LinuxまたはmacOS)$ export PATH=$PWD/bin:$PATH
Istioのインストール
このガイドでは、構成プロファイルのdemo
を使用します。これはテスト用の適切なデフォルト設定が設定されているため選択されていますが、本番環境、パフォーマンステスト、またはOpenShift用の他のプロファイルもあります。
Istio Gatewayとは異なり、Kubernetes Gatewayを作成すると、デフォルトでゲートウェイプロキシサーバもデプロイされます。これらは使用されないため、demo
プロファイルの一部として通常インストールされるデフォルトのIstioゲートウェイスービスのデプロイを無効にします。
ゲートウェイなしで、
demo
プロファイルを使用してIstioをインストールします。$ istioctl install -f @samples/bookinfo/demo-profile-no-gateways.yaml@ -y ✔ Istio core installed ✔ Istiod installed ✔ Installation complete Made this installation the default for injection and validation.
後でアプリケーションをデプロイする際に、IstioがEnvoyサイドカープロキシを自動的に注入するように指示するネームスペースラベルを追加します。
$ kubectl label namespace default istio-injection=enabled namespace/default labeled
Kubernetes Gateway API CRDのインストール
Kubernetes Gateway API CRDは、ほとんどのKubernetesクラスタにはデフォルトでインストールされていないため、Gateway APIを使用する前にインストールされていることを確認してください。
Gateway API CRDがまだ存在していない場合は、インストールします。
$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \ { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl apply -f -; }
サンプルアプリケーションのデプロイ
default
名前空間でデプロイするアプリケーションに、サイドカーコンテナを注入するようにIstioを設定しました。
Bookinfo
サンプルアプリケーションをデプロイします。$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created
アプリケーションが開始します。各ポッドの準備が整うと、Istioサイドカーが一緒にデプロイされます。
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.212 <none> 9080/TCP 29s kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 25m productpage ClusterIP 10.0.0.57 <none> 9080/TCP 28s ratings ClusterIP 10.0.0.33 <none> 9080/TCP 29s reviews ClusterIP 10.0.0.28 <none> 9080/TCP 29s
そして
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
ポッドに
READY 2/2
と表示され、アプリケーションコンテナとIstioサイドカーコンテナの両方が存在することが確認されます。レスポンスのページタイトルを確認して、アプリケーションがクラスタ内で実行されていることを検証します。
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
外部トラフィックへのアプリケーションの公開
Bookinfoアプリケーションはデプロイされましたが、外部からはアクセスできません。アクセス可能にするには、メッシュのエッジでパスをルートにマッピングするイングレスゲートウェイを作成する必要があります。
BookinfoアプリケーションのKubernetes Gatewayを作成します。
$ kubectl apply -f @samples/bookinfo/gateway-api/bookinfo-gateway.yaml@ gateway.gateway.networking.k8s.io/bookinfo-gateway created httproute.gateway.networking.k8s.io/bookinfo created
デフォルトでは、Istioはゲートウェイに
LoadBalancer
サービスを作成します。トンネルを使用してこのゲートウェイにアクセスするため、ロードバランサは必要ありません。ロードバランサが外部IPアドレスに対してどのように構成されるかについて学習したい場合は、イングレスゲートウェイのドキュメントを参照してください。ゲートウェイにアノテーションを付けて、サービスの種類を
ClusterIP
に変更します。$ kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default
ゲートウェイのステータスを確認するには、以下を実行します。
$ kubectl get gateway NAME CLASS ADDRESS PROGRAMMED AGE bookinfo-gateway istio bookinfo-gateway-istio.default.svc.cluster.local True 42s
アプリケーションへのアクセス
作成したゲートウェイを介してBookinfo productpage
サービスに接続します。ゲートウェイにアクセスするには、kubectl port-forward
コマンドを使用する必要があります。
$ kubectl port-forward svc/bookinfo-gateway-istio 8080:80
ブラウザを開き、http://localhost:8080/productpage
に移動して、Bookinfoアプリケーションを表示します。
ページを更新すると、リクエストが異なるバージョンのreviews
サービスに分散されるため、本のレビューと評価が変化するはずです。
ダッシュボードの表示
Istioはいくつかの異なるテレメトリアプリケーションと統合されています。これらは、サービスメッシュの構造を理解し、メッシュのトポロジーを表示し、メッシュの健全性を分析するのに役立ちます。
Kialiダッシュボードと、Prometheus、Grafana、Jaegerをデプロイするには、次の手順に従ってください。
Kialiおよびその他のアドオンをインストールし、デプロイが完了するまで待ちます。
$ kubectl apply -f samples/addons $ kubectl rollout status deployment/kiali -n istio-system Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available... deployment "kiali" successfully rolled out
Kialiダッシュボードにアクセスします。
$ istioctl dashboard kiali
左側のナビゲーションメニューで、グラフを選択し、名前空間のドロップダウンでdefaultを選択します。
Kialiダッシュボードには、
Bookinfo
サンプルアプリケーション内のサービス間の関係を示すメッシュの概要が表示されます。また、トラフィックフローを視覚化するためのフィルターも提供します。Kialiダッシュボード
次のステップ
評価インストールの完了おめでとうございます!
これらのタスクは、初心者の方にとって、このdemo
インストールを使用してIstioの機能をさらに評価するための優れた場所です。
本番環境でIstioをカスタマイズする前に、次のリソースを参照してください。
Istio コミュニティへの参加
Istioコミュニティに参加して、ご質問やフィードバックをお寄せください。
アンインストール
Bookinfo
サンプルアプリケーションとその構成を削除するには、Bookinfo
クリーンアップを参照してください。
Istioアンインストールは、RBAC権限とistio-system
名前空間の下にあるすべてのリソースを階層的に削除します。存在しないリソースに対するエラーは無視しても安全です。これは、階層的に削除されている可能性があるためです。
$ kubectl delete -f @samples/addons@
$ istioctl uninstall -y --purge
istio-system
名前空間はデフォルトでは削除されません。不要になった場合は、次のコマンドを使用して削除します。
$ kubectl delete namespace istio-system
IstioがEnvoyサイドカープロキシを自動的に注入するように指示するラベルは、デフォルトでは削除されません。不要になった場合は、次のコマンドを使用して削除します。
$ kubectl label namespace default istio-injection-
Kubernetes Gateway API CRDをインストールし、削除する場合は、次のコマンドのいずれかを実行します。
CRDの実験版を必要とするタスクを実行した場合
$ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v1.2.0" | kubectl delete -f -
それ以外の場合は
$ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl delete -f -