設定 Istio 入口閘道
到目前為止,您使用 Kubernetes Ingress 從外部存取您的應用程式。在此模組中,您將設定流量通過 Istio 入口閘道進入,以便將 Istio 控制應用於您的微服務流量。
將您的命名空間名稱儲存在
NAMESPACE
環境變數中。您將需要它來識別記錄中的微服務$ export NAMESPACE=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}") $ echo $NAMESPACE tutorial
為 Istio 入口閘道的主機名稱建立環境變數
$ export MY_INGRESS_GATEWAY_HOST=istio.$NAMESPACE.bookinfo.com $ echo $MY_INGRESS_GATEWAY_HOST istio.tutorial.bookinfo.com
設定 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
使用判斷入口 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
檔案中)。這次,您可以看到流量來自兩個來源,
unknown
(Kubernetes Ingress)和istio-ingressgateway istio-system
(Istio 入口閘道)。具有 Istio 入口閘道的 Kiali 圖表標籤 此時,您可以停止透過 Kubernetes Ingress 發送請求,並且只使用 Istio 入口閘道。停止您在先前步驟中設定的無限迴圈(在終端機視窗中按
Ctrl-C
)。在真實的生產環境中,您會更新應用程式的 DNS 項目,使其包含 Istio 入口閘道的 IP,或者設定您的外部負載平衡器。刪除 Kubernetes Ingress 資源
$ kubectl delete ingress bookinfo ingress.extensions "bookinfo" deleted
在新的終端機視窗中,如先前步驟所述,重新啟動真實使用者流量模擬。
在 Kiali 主控台中檢查您的圖表。大約一分鐘後,您會看到 Istio Ingress Gateway 作為應用程式的單一流量來源。
Kiali 圖表標籤頁顯示 Istio Ingress Gateway 作為單一流量來源
您已準備好使用 Istio 設定日誌記錄。