設定 Istio 入口閘道

到目前為止,您使用 Kubernetes Ingress 從外部存取您的應用程式。在此模組中,您將設定流量通過 Istio 入口閘道進入,以便將 Istio 控制應用於您的微服務流量。

  1. 將您的命名空間名稱儲存在 NAMESPACE 環境變數中。您將需要它來識別記錄中的微服務

    $ export NAMESPACE=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}")
    $ echo $NAMESPACE
    tutorial
    
  2. 為 Istio 入口閘道的主機名稱建立環境變數

    $ export MY_INGRESS_GATEWAY_HOST=istio.$NAMESPACE.bookinfo.com
    $ echo $MY_INGRESS_GATEWAY_HOST
    istio.tutorial.bookinfo.com
    
  3. 設定 Istio 入口閘道

    $ 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. 使用判斷入口 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 檔案中)。

    這次,您可以看到流量來自兩個來源,unknown(Kubernetes Ingress)和 istio-ingressgateway istio-system(Istio 入口閘道)。

    Kiali Graph Tab with Istio Ingress Gateway
    具有 Istio 入口閘道的 Kiali 圖表標籤
  10. 此時,您可以停止透過 Kubernetes Ingress 發送請求,並且只使用 Istio 入口閘道。停止您在先前步驟中設定的無限迴圈(在終端機視窗中按 Ctrl-C)。在真實的生產環境中,您會更新應用程式的 DNS 項目,使其包含 Istio 入口閘道的 IP,或者設定您的外部負載平衡器。

  11. 刪除 Kubernetes Ingress 資源

    $ kubectl delete ingress bookinfo
    ingress.extensions "bookinfo" deleted
    
  12. 在新的終端機視窗中,如先前步驟所述,重新啟動真實使用者流量模擬。

  13. 在 Kiali 主控台中檢查您的圖表。大約一分鐘後,您會看到 Istio Ingress Gateway 作為應用程式的單一流量來源。

    Kiali Graph Tab with Istio Ingress Gateway as a single source of traffic
    Kiali 圖表標籤頁顯示 Istio Ingress Gateway 作為單一流量來源

您已準備好使用 Istio 設定日誌記錄

此資訊是否對您有幫助?
您是否有任何改進建議?

感謝您的回饋!