はじめに

このガイドでは、Istioを迅速に評価できます。Istioに既に精通している場合、またはその他の構成プロファイルや高度なデプロイメントモデルのインストールに興味がある場合は、どのIstioインストール方法を使用すべきですか?に関するFAQページを参照してください。

続行するには、Kubernetesクラスタが必要です。クラスタを持っていない場合は、kindまたはその他のサポートされているKubernetesプラットフォームを使用できます。

Istioを使い始めるには、次の手順に従ってください。

  1. Istioのダウンロードとインストール
  2. Kubernetes Gateway API CRDのインストール
  3. サンプルアプリケーションのデプロイ
  4. 外部トラフィックへのアプリケーションの公開
  5. ダッシュボードの表示

Istioのダウンロード

  1. ご使用のOS向けのインストールファイルをダウンロードするには、Istioリリースページにアクセスするか、最新リリースを自動的にダウンロードして解凍する(LinuxまたはmacOS)ことができます。

    $ curl -L https://istio.dokyumento.jp/downloadIstio | sh -
    
  2. Istioパッケージディレクトリに移動します。例えば、パッケージがistio-1.24.0の場合

    $ cd istio-1.24.0
    

    インストールディレクトリには以下のものが含まれています。

    • samples/内のサンプルアプリケーション
    • bin/ディレクトリ内のistioctlクライアントバイナリ。
  3. istioctlクライアントをパスに追加します (LinuxまたはmacOS)

    $ export PATH=$PWD/bin:$PATH
    

Istioのインストール

このガイドでは、構成プロファイルdemoを使用します。これはテスト用の適切なデフォルト設定が設定されているため選択されていますが、本番環境、パフォーマンステスト、またはOpenShift用の他のプロファイルもあります。

Istio Gatewayとは異なり、Kubernetes Gatewayを作成すると、デフォルトでゲートウェイプロキシサーバもデプロイされます。これらは使用されないため、demoプロファイルの一部として通常インストールされるデフォルトのIstioゲートウェイスービスのデプロイを無効にします。

  1. ゲートウェイなしで、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.
    
  2. 後でアプリケーションをデプロイする際に、IstioがEnvoyサイドカープロキシを自動的に注入するように指示するネームスペースラベルを追加します。

    $ kubectl label namespace default istio-injection=enabled
    namespace/default labeled
    

Kubernetes Gateway API CRDのインストール

Kubernetes Gateway API CRDは、ほとんどのKubernetesクラスタにはデフォルトでインストールされていないため、Gateway APIを使用する前にインストールされていることを確認してください。

  1. 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を設定しました。

  1. 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サイドカーコンテナの両方が存在することが確認されます。

  2. レスポンスのページタイトルを確認して、アプリケーションがクラスタ内で実行されていることを検証します。

    $ 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アプリケーションはデプロイされましたが、外部からはアクセスできません。アクセス可能にするには、メッシュのエッジでパスをルートにマッピングするイングレスゲートウェイを作成する必要があります。

  1. 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アドレスに対してどのように構成されるかについて学習したい場合は、イングレスゲートウェイのドキュメントを参照してください。

  2. ゲートウェイにアノテーションを付けて、サービスの種類をClusterIPに変更します。

    $ kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default
    
  3. ゲートウェイのステータスを確認するには、以下を実行します。

    $ 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アプリケーションを表示します。

Bookinfo Application
Bookinfoアプリケーション

ページを更新すると、リクエストが異なるバージョンのreviewsサービスに分散されるため、本のレビューと評価が変化するはずです。

ダッシュボードの表示

Istioはいくつかの異なるテレメトリアプリケーションと統合されています。これらは、サービスメッシュの構造を理解し、メッシュのトポロジーを表示し、メッシュの健全性を分析するのに役立ちます。

Kialiダッシュボードと、PrometheusGrafanaJaegerをデプロイするには、次の手順に従ってください。

  1. 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
    
  2. Kialiダッシュボードにアクセスします。

    $ istioctl dashboard kiali
    
  3. 左側のナビゲーションメニューで、グラフを選択し、名前空間のドロップダウンでdefaultを選択します。

    Kialiダッシュボードには、Bookinfoサンプルアプリケーション内のサービス間の関係を示すメッシュの概要が表示されます。また、トラフィックフローを視覚化するためのフィルターも提供します。

    Kiali Dashboard
    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 -
    
この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!