ゲートウェイAPIを使わない場合の入門
このガイドでは、レガシーAPIのみを使用してIstioを簡単に評価できます。Kubernetes Gateway APIを使用する場合は、こちらの例を参照してください。Istioに精通している場合、または他の構成プロファイルや高度なデプロイモデルのインストールに興味がある場合は、Istioのどのインストール方法を使用すべきですか?というFAQページを参照してください。
これらの手順では、サポートされているバージョンのKubernetes (1.28、1.29、1.30、1.31)を実行しているクラスタが必要です。サポートされているバージョンを使用できます。たとえば、Minikubeやプラットフォーム固有の設定手順で指定されているものなど、サポートされているプラットフォームを使用できます。
Istioを使い始めるには、次の手順に従ってください。
Istioのダウンロード
Istioリリースページにアクセスして、ご使用のOS用のインストールファイル をダウンロードするか、最新のリリースを自動的にダウンロードして展開します(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
構成プロファイルを使用します。テストのための良好なデフォルト設定が選択されていますが、本番環境やパフォーマンステスト用の他のプロファイルもあります。$ istioctl install --set profile=demo -y ✔ Istio core installed ✔ Istiod installed ✔ Egress gateways installed ✔ Ingress gateways installed ✔ Installation complete
後でアプリケーションをデプロイする際に、IstioがEnvoyサイドカープロキシを自動的に注入するように指示する、名前空間ラベルを追加します。
$ kubectl label namespace default istio-injection=enabled namespace/default labeled
サンプルアプリケーションのデプロイ
Bookinfo
サンプルアプリケーションをデプロイします。$ kubectl apply -f @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
この時点まで、すべてが正しく動作していることを確認します。このコマンドを実行して、アプリがクラスタ内で実行され、レスポンスのページタイトルをチェックしてHTMLページを提供しているかどうかを確認します。
$ 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アプリケーションはデプロイされていますが、外部からはアクセスできません。アクセスできるようにするには、メッシュのエッジでパスをルートにマッピングするIstio Ingress Gatewayを作成する必要があります。
このアプリケーションをIstioゲートウェイに関連付けます。
$ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@ gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
構成に問題がないことを確認します。
$ istioctl analyze ✔ No validation issues found when analyzing namespace: default.
イングレスIPとポートの決定
ゲートウェイにアクセスするためのINGRESS_HOST
とINGRESS_PORT
変数を設定するには、これらの手順に従ってください。タブを使用して、選択したプラットフォームの手順を選択してください。
新しいターミナルウィンドウでこのコマンドを実行して、トラフィックをIstio Ingress Gatewayに送信するMinikubeトンネルを開始します。これにより、service/istio-ingressgateway
用の外部ロードバランサーEXTERNAL-IP
が提供されます。
$ minikube tunnel
イングレスホストとポートを設定します。
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
各環境変数にIPアドレスとポートが正常に割り当てられたことを確認します。
$ echo "$INGRESS_HOST"
127.0.0.1
$ echo "$INGRESS_PORT"
80
$ echo "$SECURE_INGRESS_PORT"
443
Kubernetesクラスタが外部ロードバランサーをサポートする環境で実行されているかどうかを確認するには、次のコマンドを実行します。
$ kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 172.21.109.129 130.211.10.121 80:31380/TCP,443:31390/TCP,31400:31400/TCP 17h
EXTERNAL-IP
値が設定されている場合、環境にはイングレスゲートウェイに使用できる外部ロードバランサーがあります。EXTERNAL-IP
値が<none>
(または常に<pending>
)の場合、環境はイングレスゲートウェイ用の外部ロードバランサーを提供しません。この場合、サービスのノードポートを使用してゲートウェイにアクセスできます。
ご使用の環境に対応する手順を選択してください。
環境に外部ロードバランサーがあることが確認された場合は、これらの手順に従ってください。
イングレスIPとポートを設定します。
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
環境に外部ロードバランサーがない場合は、これらの手順に従い、代わりにノードポートを選択してください。
イングレスポートを設定します。
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
GKE
$ export INGRESS_HOST=worker-node-address
ingressgateway
サービスのポートへのTCPトラフィックを許可するファイアウォールルールを作成する必要があります。HTTPポート、セキュアポート(HTTPS)、またはその両方のトラフィックを許可するには、次のコマンドを実行します。
$ gcloud compute firewall-rules create allow-gateway-http --allow "tcp:$INGRESS_PORT"
$ gcloud compute firewall-rules create allow-gateway-https --allow "tcp:$SECURE_INGRESS_PORT"
IBM Cloud Kubernetes Service
$ ibmcloud ks workers --cluster cluster-name-or-id
$ export INGRESS_HOST=public-IP-of-one-of-the-worker-nodes
Docker For Desktop
$ export INGRESS_HOST=127.0.0.1
その他の環境
$ export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
GATEWAY_URL
を設定します。$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
環境変数にIPアドレスとポートが正常に割り当てられたことを確認します。
$ echo "$GATEWAY_URL" 127.0.0.1:80
外部アクセスの検証
ブラウザを使用してBookinfo製品ページを表示することで、Bookinfoアプリケーションが外部からアクセス可能であることを確認します。
次のコマンドを実行して、Bookinfoアプリケーションの外部アドレスを取得します。
$ echo "http://$GATEWAY_URL/productpage"
前のコマンドの出力をWebブラウザに貼り付けて、Bookinfo製品ページが表示されることを確認します。
ダッシュボードの表示
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
Envoyサイドカープロキシを自動的に注入するようにIstioに指示するラベルは、デフォルトでは削除されません。不要になった場合は、次のコマンドを使用して削除してください。
$ kubectl label namespace default istio-injection-