Istio 1.10 中即將推出的網路變更

了解 Istio 網路即將發生的變更、這些變更可能對您的叢集造成的影響,以及應採取的行動。

2021 年 4 月 15 日 | 作者:John Howard - Google

背景

雖然 Kubernetes 網路是可自訂的,但典型的 Pod 網路會像這樣

A pod's network
Pod 的網路

應用程式可以選擇繫結到迴路介面 lo(通常繫結到 127.0.0.1),或 Pod 的網路介面 eth0(通常繫結到 Pod 的 IP),或兩者皆繫結(通常繫結到 0.0.0.0)。

繫結到 lo 可讓從 Pod 內呼叫 curl localhost 之類的指令。繫結到 eth0 可讓從其他 Pod 呼叫此 Pod。

通常,應用程式會繫結到兩者。但是,具有內部邏輯的應用程式(例如管理介面)可能會選擇僅繫結到 lo 以避免其他 Pod 的存取。此外,某些應用程式(通常是有狀態的應用程式)會選擇僅繫結到 eth0

目前行為

在 1.10 版本之前的 Istio 中,與應用程式在同一個 Pod 中執行的 Envoy Proxy 會繫結到 eth0 介面,並將所有傳入流量重新導向到 lo 介面。

A pod's network with Istio today
目前使用 Istio 的 Pod 網路

這會產生兩個重要的副作用,導致行為與標準 Kubernetes 不同

繫結到兩個介面(這是典型的)的應用程式將不會受到影響。

未來行為

從 Istio 1.10 開始,網路行為會變更為與 Kubernetes 中的標準行為一致。

A pod's network with Istio in the future
未來使用 Istio 的 Pod 網路

在這裡我們可以看到 Proxy 不再將流量重新導向到 lo 介面,而是將其轉發到 eth0 上的應用程式。因此,Kubernetes 的標準行為會保留下來,但我們仍然可以獲得 Istio 的所有好處。此變更讓 Istio 更接近其目標,也就是成為一個隨插即用的透明 Proxy,可以零配置的方式與現有工作負載搭配運作。此外,它還可以避免意外暴露僅繫結到 lo 的應用程式。

我是否會受到影響?

對於新使用者而言,此變更應該只是一種改進。但是,如果您是現有使用者,您可能已經有意識或無意識地開始依賴舊行為。

為了協助偵測這些情況,我們新增了一個檢查來尋找會受到影響的 Pod。您可以執行 istioctl experimental precheck 命令以取得任何繫結到 lo 且在 Service 中公開的連接埠的 Pod 的報告。此命令在 Istio 1.10+ 中可用。如果未採取任何行動,這些連接埠在升級後將不再可存取。

$ istioctl experimental precheck
Error [IST0143] (Pod echo-local-849647c5bd-g9wxf.default) Port 443 is exposed in a Service but listens on localhost. It will not be exposed to other pods.
Error [IST0143] (Pod echo-local-849647c5bd-g9wxf.default) Port 7070 is exposed in a Service but listens on localhost. It will not be exposed to other pods.
Error: Issues found when checking the cluster. Istio may not be safe to install or upgrade.
See https://istio.dev.org.tw/latest/docs/reference/config/analysis for more information about causes and resolutions.

移轉

如果您目前繫結到 lo,您有幾個選項

分享此文章