零配置 Istio

了解 Istio 帶來的優勢,即使在沒有使用任何配置的情況下。

2021 年 2 月 25 日 | 作者:John Howard - Google

當新用戶第一次接觸 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 還提供了對各種流量管理設定的自定義,包括逾時、重試等等。

分享這篇文章