零配置 Istio
了解 Istio 带来的好处,即使不使用任何配置。
当新用户第一次遇到 Istio 时,他们有时会被它所暴露的庞大功能集所淹没。不幸的是,这会给人一种印象,即 Istio 过于复杂,不适合小型团队或集群。
然而,关于 Istio 的一个重要部分是,它旨在为用户带来开箱即用的价值,而无需任何配置。这使用户能够以最少的努力获得 Istio 的大部分好处。 对于一些要求简单的用户,自定义配置可能根本不需要。其他人将能够在他们更舒适且需要时逐步添加 Istio 配置,例如添加入口路由、微调网络设置或锁定安全策略。
入门
要开始使用,请查看我们的 入门(getting started) 文档,您可以在其中学习如何安装 Istio。如果您已经熟悉,您可以简单地运行 istioctl install
。
接下来,我们将探索 Istio 为我们提供的所有好处,无需对应用程序代码进行任何配置或更改。
安全
Istio 自动为网格中 pod 之间的流量启用 mutual TLS。这使应用程序能够放弃复杂的 TLS 配置和证书管理,并将所有传输层安全性卸载到 sidecar。
熟悉自动 TLS 后,您可以选择 仅允许 mTLS 流量(allow only mTLS traffic),或配置自定义 授权策略(authorization policies) 满足您的需求。
可观察性
Istio 自动为网格中的所有服务通信生成详细的遥测数据。这种遥测提供了服务行为的可观察性,使运营商能够对其应用程序进行故障排除、维护和优化——而不会给服务开发人员带来任何额外的负担。通过 Istio,运维人员可以全面了解受监控的服务如何与其他服务以及 Istio 组件本身进行交互。
所有这些功能都是由 Istio 添加的,无需任何配置。 也可以与 Prometheus, Grafana, Jaeger, Zipkin, and Kiali 等工具 集成(Integrations) 使用。
有关 Istio 提供的可观察性的更多信息,请查看 可观察性概述(observability overview)。
流量管理
虽然 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),并且我们的服务将根据 request 而不是根据connection 自动进行负载平衡:
$ 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
在这里,我们可以看到我们的请求是 轮询(round-robin) 在所有后端之间进行负载平衡的。
除了这些默认设置之外,Istio 还提供了 各种流量管理设置(variety of traffic management settings) 的自定义设置,包括超时、重试等等。