はじめに
クラウドネイティブアプリケーションのマイクロサービスを管理する実用的な方法は、アプリケーションネットワーク機能を自動化することです。
Istioは、コントロールプレーンとして機能する構成可能なサービスメッシュプラットフォームであり、構成をサイドカープロキシとゲートウェイに分散します。これは、Kubernetesクラスター内のコンテナーを接続、監視、保護するための一般的なオプションです。
このチュートリアルでは、Istioをインストールし、テストアプリケーションをデプロイし、プラットフォームで動作するようにKubernetesクラスターをセットアップする方法を学習します。
前提条件
- Kubernetesクラスター(またはminikube)
- kubectlコマンドラインツール
最新のIstioリリースをダウンロード
Istioの最新リリースをダウンロードするには、GitHubのIstioリリースページに移動します。
または、Linuxユーザーは curl
を使用できます 最新リリースを自動的にダウンロードして抽出するには:
curl -L https://istio.io/downloadIstio | sh -
このコマンドは、インストールファイルを istio-[version]
という名前のフォルダーに抽出します。 :
古いバージョンのIstioをダウンロードするには、 curl
を使用します 、ただし、次の構文を使用してバージョンとプロセッサアーキテクチャを指定します。
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
Istioインストールガイド
1.Kubernetesクラスターを起動します。この記事ではminikubeを使用しています:
minikube start
2.次に、解凍したファイルのあるフォルダーに移動して、Istioのインストールを開始します。
cd istio-1.9.2
3. bin/
ディレクトリにはistioctl
が含まれています クライアントバイナリ。 Linuxでは、次のように入力して、クライアントをパスに追加します。
export PATH=$PWD/bin:$PATH
この方法で設定された変数は、現在のシェルセッションを終了するまで続きます。変数を永続的に設定するには、Linuxで環境変数を設定する方法をお読みください。
4. istioctl
を使用します インストールプロセスを開始するためのツール:
istioctl install --set profile=demo -y
出力は、インストールが成功したことを確認します:
5. Istioは、アプリケーションのデプロイ時にEnvoyサイドカープロキシを自動的に挿入できます。これを有効にするには、 kubectl
を使用します この命令を含む名前空間ラベルを追加するには:
kubectl label namespace default istio-injection=enabled
これでIstioのインストールプロセスは終了です。
Bookinfoアプリケーションを介した展開のテスト
Istioインストールアーカイブには、 Bookinfoというサンプルアプリケーションをデプロイするために必要なすべてのファイルが含まれています。 。
1. bookinfo.yaml
を適用することから始めます kubectl
を使用したファイル :
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
システムは、いくつかのデプロイメント、サービス、およびポッドを作成します。
2.実行中のサービスを確認します:
kubectl get services
3.ポッドの準備ができているかどうかを確認します:
kubectl get pods
ポッドが上がると、Istioはサイドカーを一緒に展開します:
4. READY
まで待ちます 各ポッドのラベルは2/2
です。 。次に、次のコマンドを実行して、アプリがHTMLページを正しく提供しているかどうかを確認します。
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
出力は、タイトル自体とともに、ページのタイトルタグである必要があります:
5.次のステップは、外部トラフィックに対してアプリを開くことです。 bookinfo-gateway.yaml
を適用します samples
からのファイル フォルダ:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
出力は、アプリケーションがIstioゲートウェイに正常に関連付けられたことを確認します。
6. istioctl
を使用します 構成を分析し、潜在的な問題を確認するには:
istioctl analyze
システムで問題が検出されない場合は、次のメッセージが表示されます。
7.前の手順で設定したゲートウェイにアクセスするには、入力変数を設定します。まず、 INGRESS_PORT
をエクスポートします :
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
8.ここで、 SECURE_INGRESS_PORT
に対してプロセスを繰り返します。 :
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
9. echoコマンドを使用して、ポートが正常に割り当てられているかどうかを確認します。
echo "$INGRESS_PORT" && echo "$SECURE_INGRESS_PORT"
出力にはポート番号が表示されます:
10. INGRESS_HOST
をエクスポートします 変数:
export INGRESS_HOST=$(minikube ip)
11. echo
で変数を確認します :
echo "$INGRESS_HOST"
12.トラフィックをIstioIngressGatewayに転送するには、新しいターミナルウィンドウを開き、次のコマンドを入力します。
minikube tunnel
Minikubeは、Istioのロードバランサーとして機能するようになりました。出力には、minikubeがトラフィックを誘導していることが示されています:
13.前のターミナルウィンドウに戻り、 GATEWAY_URL
をエクスポートします。 INGRESS_HOST
で構成される変数 およびINGRESS_PORT
変数:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
14. echo
を使用します IPアドレスとポート番号全体を確認するには:
echo "$GATEWAY_URL"
15.次のコマンドを入力して、アプリケーションの外部アドレスを表示します。
echo http://$GATEWAY_URL/productpage
16.前の手順で取得したアドレスをコピーして、Webブラウザに貼り付けます。 Bookinfo Webサイトが正常に読み込まれます:
Istio用のKubernetesクラスターをセットアップする
Istioには、Grafanaダッシュボード、Jaegerトランザクショントレースソフトウェア、Prometheusメトリックスクレーパー、Kiali管理コンソールなど、人気のあるIstioサービス用のアドオンが多数付属しています。
1. samples/addons
を適用して、これらのアドオンをインストールします フォルダ:
kubectl apply -f samples/addons
2.次に、アドオンごとにKubernetesIngressリソースを作成します。これを行うには、以下を yaml
に貼り付けます。 ファイル。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: istio-system
namespace: istio-system
annotations:
kubernetes.io/ingress.class: istio
spec:
rules:
- host: my-istio-dashboard.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: grafana
servicePort: 3000
- host: my-istio-tracing.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: tracing
servicePort: 9411
- host: my-istio-logs-database.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: prometheus
servicePort: 9090
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
servicePort: 20001
3.ファイルを保存し、kubectlを使用して構成を適用します:
kubectl apply -f [file-name]
これでアドオンが構成され、使用できるようになりました。