Istio Ingress Gateway の設定
これまで、Kubernetes Ingressを使用してアプリケーションに外部からアクセスしていました。このモジュールでは、マイクロサービスへのトラフィックにIstioの制御を適用するために、トラフィックがIstio Ingress Gatewayを経由するように設定します。
名前空間の名前を
NAMESPACE
環境変数に保存します。ログでマイクロサービスを認識するために必要になります。$ export NAMESPACE=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}") $ echo $NAMESPACE tutorial
Istio Ingress Gatewayのホスト名の環境変数を設定します。
$ export MY_INGRESS_GATEWAY_HOST=istio.$NAMESPACE.bookinfo.com $ echo $MY_INGRESS_GATEWAY_HOST istio.tutorial.bookinfo.com
Istio Ingress Gatewayを設定します。
$ kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # use Istio default gateway implementation servers: - port: number: 80 name: http protocol: HTTP hosts: - $MY_INGRESS_GATEWAY_HOST --- apiVersion: networking.istio.io/v1 kind: VirtualService metadata: name: bookinfo spec: hosts: - $MY_INGRESS_GATEWAY_HOST gateways: - bookinfo-gateway.$NAMESPACE.svc.cluster.local http: - match: - uri: exact: /productpage - uri: exact: /login - uri: exact: /logout - uri: prefix: /static route: - destination: host: productpage port: number: 9080 EOF
Ingress IPとポートの特定セクションの手順に従って、
INGRESS_HOST
とINGRESS_PORT
を設定します。このコマンドの出力を
/etc/hosts
ファイルに追加します。$ echo $INGRESS_HOST $MY_INGRESS_GATEWAY_HOST
コマンドラインからアプリケーションのホームページにアクセスします。
$ curl -s $MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
次のコマンドの出力をブラウザのアドレスバーに貼り付けます。
$ echo http://$MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage
新しいターミナルウィンドウで無限ループを設定して、アプリケーションへの現実世界のユーザートラフィックをシミュレートします。
$ while :; do curl -s <output of the previous command> | grep -o "<title>.*</title>"; sleep 1; done <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> ...
Kialiコンソール
my-kiali.io/kiali/console
で名前空間のグラフを確認します。(my-kiali.io
URLは、以前設定した/etc/hosts
ファイルに含まれている必要があります)。今回は、トラフィックが2つのソース、
unknown
(Kubernetes Ingress)とistio-ingressgateway istio-system
(Istio Ingress Gateway)から来ていることがわかります。Istio Ingress Gatewayを含むKialiグラフタブ この時点で、Kubernetes Ingressを経由したリクエストの送信を停止し、Istio Ingress Gatewayのみを使用できます。前の手順で設定した無限ループ(ターミナルウィンドウで
Ctrl-C
)を停止します。実際の運用環境では、アプリケーションのDNSエントリにIstio Ingress GatewayのIPを含めるか、外部ロードバランサーを設定します。Kubernetes Ingressリソースを削除します。
$ kubectl delete ingress bookinfo ingress.extensions "bookinfo" deleted
新しいターミナルウィンドウで、前の手順で説明したように、現実世界のユーザートラフィックシミュレーションを再開します。
Kialiコンソールでグラフを確認します。約1分後、アプリケーションのトラフィックの単一ソースとしてIstio Ingress Gatewayが表示されます。
Istio Ingress Gatewayを単一トラフィックソースとするKialiグラフタブ
Istioを使用したロギングの設定準備ができました。