Istio Ingress Gateway の設定

これまで、Kubernetes Ingressを使用してアプリケーションに外部からアクセスしていました。このモジュールでは、マイクロサービスへのトラフィックにIstioの制御を適用するために、トラフィックがIstio Ingress Gatewayを経由するように設定します。

  1. 名前空間の名前をNAMESPACE環境変数に保存します。ログでマイクロサービスを認識するために必要になります。

    $ export NAMESPACE=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}")
    $ echo $NAMESPACE
    tutorial
    
  2. Istio Ingress Gatewayのホスト名の環境変数を設定します。

    $ export MY_INGRESS_GATEWAY_HOST=istio.$NAMESPACE.bookinfo.com
    $ echo $MY_INGRESS_GATEWAY_HOST
    istio.tutorial.bookinfo.com
    
  3. 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
    
  4. Ingress IPとポートの特定セクションの手順に従って、INGRESS_HOSTINGRESS_PORTを設定します。

  5. このコマンドの出力を/etc/hostsファイルに追加します。

    $ echo $INGRESS_HOST $MY_INGRESS_GATEWAY_HOST
    
  6. コマンドラインからアプリケーションのホームページにアクセスします。

    $ curl -s $MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage | grep -o "<title>.*</title>"
    <title>Simple Bookstore App</title>
    
  7. 次のコマンドの出力をブラウザのアドレスバーに貼り付けます。

    $ echo http://$MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage
    
  8. 新しいターミナルウィンドウで無限ループを設定して、アプリケーションへの現実世界のユーザートラフィックをシミュレートします。

    $ 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>
    ...
    
  9. Kialiコンソールmy-kiali.io/kiali/consoleで名前空間のグラフを確認します。(my-kiali.io URLは、以前設定した/etc/hostsファイルに含まれている必要があります)。

    今回は、トラフィックが2つのソース、unknown(Kubernetes Ingress)とistio-ingressgateway istio-system(Istio Ingress Gateway)から来ていることがわかります。

    Kiali Graph Tab with Istio Ingress Gateway
    Istio Ingress Gatewayを含むKialiグラフタブ
  10. この時点で、Kubernetes Ingressを経由したリクエストの送信を停止し、Istio Ingress Gatewayのみを使用できます。前の手順で設定した無限ループ(ターミナルウィンドウでCtrl-C)を停止します。実際の運用環境では、アプリケーションのDNSエントリにIstio Ingress GatewayのIPを含めるか、外部ロードバランサーを設定します。

  11. Kubernetes Ingressリソースを削除します。

    $ kubectl delete ingress bookinfo
    ingress.extensions "bookinfo" deleted
    
  12. 新しいターミナルウィンドウで、前の手順で説明したように、現実世界のユーザートラフィックシミュレーションを再開します。

  13. Kialiコンソールでグラフを確認します。約1分後、アプリケーションのトラフィックの単一ソースとしてIstio Ingress Gatewayが表示されます。

    Kiali Graph Tab with Istio Ingress Gateway as a single source of traffic
    Istio Ingress Gatewayを単一トラフィックソースとするKialiグラフタブ

Istioを使用したロギングの設定準備ができました。

この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございました!