跳至主要内容

設定 Istio 閘道

注意

Rancher-Istio 將在 Rancher v2.12.0 中被棄用;請使用 SUSE Rancher Application Collection 版本的 Istio 以增強安全性(包含在 SUSE Rancher Prime 訂閱中)。

詳細資訊可以在此公告中找到。

每個叢集的閘道可以有自己的連接埠或負載平衡器,這與服務網格無關。預設情況下,每個 Rancher 佈建的叢集都有一個 NGINX ingress 控制器允許流量進入叢集。

您可以在安裝或不安裝 Istio 的情況下使用 Nginx Ingress 控制器。如果這是您叢集的唯一閘道,Istio 將能夠將流量從服務路由到服務,但 Istio 將無法從叢集外部接收流量。

若要允許 Istio 接收外部流量,您需要啟用 Istio 的閘道,它作為外部流量的南北向代理。當您啟用 Istio 閘道時,結果是您的叢集將有兩個 Ingress。

您還需要為您的服務設定 Kubernetes 閘道。此 Kubernetes 資源指向 Istio 對叢集 ingress 閘道的實作。

您可以使用負載平衡器將流量路由到服務網格,或使用 Istio 的 NodePort 閘道。本節描述如何設定 NodePort 閘道。

有關 Istio 閘道的更多資訊,請參閱 Istio 文件。

In an Istio-enabled cluster, you can have two Ingresses: the default Nginx Ingress, and the default Istio controller.

啟用 Istio 閘道​

ingress 閘道是將部署在您叢集中的 Kubernetes 服務。Istio 閘道允許更廣泛的自訂和靈活性。

  1. 點擊 ☰ > Cluster Management。
  2. 前往您建立的叢集並點擊 Explore。
  3. 在左側導覽列中,點擊 Istio > Gateways。
  4. 點擊 Create from Yaml。
  5. 貼上您的 Istio 閘道 yaml,或點擊 Read from File。
  6. 點擊 Create。

**結果:**閘道已部署,現在將使用套用的規則路由流量。

Istio 閘道範例​

我們在瀏覽工作負載範例時在服務中新增 BookInfo 應用程式部署。接下來我們新增 Istio 閘道,以便可以從叢集外部存取應用程式。

  1. 點擊 ☰ > Cluster Management。
  2. 前往您建立的叢集並點擊 Explore。
  3. 在左側導覽列中,點擊 Istio > Gateways。
  4. 點擊 Create from Yaml。
  5. 複製並貼上下面提供的 Gateway yaml。
  6. 點擊 Create。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---

然後部署為閘道提供流量路由的 VirtualService:

  1. 點擊 ☰ > Cluster Management。
  2. 前往您建立的叢集並點擊 Explore。
  3. 在左側導覽列中,點擊 Istio > VirtualServices。
  4. 複製並貼上下面提供的 VirtualService yaml。
  5. 點擊 Create。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080

**結果:**您已設定閘道資源,以便 Istio 可以從叢集外部接收流量。

透過執行以下命令確認資源存在:

kubectl get gateway -A

結果應該類似於:

NAME               AGE
bookinfo-gateway 64m

從網頁瀏覽器存取 ProductPage 服務​

若要測試並查看 BookInfo 應用程式是否正確部署,可以使用 Istio 控制器 IP 和連接埠,結合您的 Kubernetes 閘道資源中指定的請求名稱,在網頁瀏覽器中檢視應用程式:

http://<Istio 控制器的 IP>:<Istio 控制器的連接埠>/productpage

若要取得 ingress 閘道 URL 和連接埠:

  1. 點擊 ☰ > Cluster Management。
  2. 前往您建立的叢集並點擊 Explore。
  3. 在左側導覽列中,點擊 Workload。
  4. 向下捲動到 istio-system 命名空間。
  5. 在 istio-system 中,有一個名為 istio-ingressgateway 的工作負載。在此工作負載的名稱下,您應該會看到連結,例如 80/tcp。
  6. 點擊其中一個連結。這應該會在您的網頁瀏覽器中顯示 ingress 閘道的 URL。將 /productpage 附加到 URL。

**結果:**您應該在網頁瀏覽器中看到 BookInfo 應用程式。

有關檢查 Istio 控制器 URL 和連接埠的幫助,請嘗試 Istio 文件中的命令。

疑難排解​

Istio 官方文件建議使用 kubectl 命令來檢查外部請求的正確 ingress 主機和 ingress 連接埠。

確認 Kubernetes 閘道與 Istio 的 Ingress 控制器匹配​

您可以嘗試本節中的步驟以確保 Kubernetes 閘道已正確設定。

在閘道資源中,選擇器透過其標籤引用 Istio 的預設 ingress 控制器,其中標籤的鍵為 istio,值為 ingressgateway。若要確保標籤適用於閘道,請執行以下操作:

  1. 點擊 ☰ > Cluster Management。
  2. 前往您建立的叢集並點擊 Explore。
  3. 在左側導覽列中,點擊 Workload。
  4. 向下捲動到 istio-system 命名空間。
  5. 在 istio-system 中,有一個名為 istio-ingressgateway 的工作負載。點擊此工作負載的名稱並前往 Labels and Annotations 區段。您應該會看到它具有鍵 istio 和值 ingressgateway。這確認了閘道資源中的選擇器與 Istio 的預設 ingress 控制器匹配。

下一步:設定 Istio 的流量管理元件​