零配置 Istio
了解 Istio 帶來的優勢,即使在沒有使用任何配置的情況下。
當新用戶第一次接觸 Istio 時,他們有時會被它所暴露的龐大功能集所淹沒。不幸的是,這可能會給人一種印象,認為 Istio 不必要地複雜,不適合小型團隊或集群。
然而,Istio 的一個優點是,它旨在在完全不進行任何配置的情況下,為用戶提供儘可能多的開箱即用價值。這使得用戶能夠以最少的努力獲得 Istio 的大部分優勢。對於一些需求簡單的用戶來說,可能根本不需要自定義配置。其他用戶則可以在更熟悉 Istio 並需要時,逐步添加 Istio 配置,例如添加入口路由、微調網路設定或鎖定安全策略。
開始使用
要開始使用,請查看我們的入門指南文件,您將學習如何安裝 Istio。如果您已經熟悉,您可以直接執行 istioctl install
。
接下來,我們將探索 Istio 在不進行任何配置或更改應用程式程式碼的情況下,為我們提供的所有好處。
安全性
Istio 會自動為網格中 Pod 之間的流量啟用相互 TLS (mTLS)。這使得應用程式可以放棄複雜的 TLS 配置和憑證管理,並將所有傳輸層安全性卸載到 Sidecar。
在熟悉自動 TLS 後,您可以選擇僅允許 mTLS 流量,或為您的需求配置自定義授權策略。
可觀測性
Istio 會自動為網格內的所有服務通訊生成詳細的遙測數據。此遙測數據提供了服務行為的可觀測性,使運營商能夠排除故障、維護和優化其應用程式,而不會給服務開發人員帶來任何額外的負擔。透過 Istio,運營商可以全面了解受監控服務如何與其他服務以及 Istio 元件本身互動。
所有這些功能都是由 Istio 添加的,無需任何配置。與 Prometheus、Grafana、Jaeger、Zipkin 和 Kiali 等工具的整合也可用。
有關 Istio 提供的可觀測性的更多資訊,請查看可觀測性概觀。
流量管理
雖然 Kubernetes 提供了許多網路功能,例如服務發現和 DNS,但這是透過第 4 層完成的,這可能會產生意想不到的效率低落。例如,在一個簡單的 HTTP 應用程式將流量傳送到具有 3 個副本的服務中,我們可以看到負載不平衡
$ curl http://echo/{0..5} -s | grep Hostname
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
$ curl http://echo/{0..5} -s | grep Hostname
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
這裡的問題是,Kubernetes 會在建立連線時決定要傳送到哪個後端,並且同一個連線上的所有未來請求都會被傳送到同一個後端。在我們的範例中,我們的前 5 個請求都傳送到 echo-cb96f8d94-2ssll
,而我們的下一組請求(使用新的連線)都傳送到 echo-cb96f8d94-879sn
。我們的第三個實例從未收到任何請求。
使用 Istio 時,會自動偵測 HTTP 流量(包括 HTTP/2 和 gRPC),我們的服務會自動按請求而不是按連線進行負載平衡
$ curl http://echo/{0..5} -s | grep Hostname
Hostname=echo-cb96f8d94-wf4xk
Hostname=echo-cb96f8d94-rpfqz
Hostname=echo-cb96f8d94-cgmxr
Hostname=echo-cb96f8d94-wf4xk
Hostname=echo-cb96f8d94-rpfqz
Hostname=echo-cb96f8d94-cgmxr
在這裡,我們可以看到我們的請求在所有後端之間進行輪詢負載平衡。
除了這些更好的預設值之外,Istio 還提供了對各種流量管理設定的自定義,包括逾時、重試等等。