零配置 Istio
了解 Istio 即使在没有配置的情况下带来的好处。
当新用户第一次遇到 Istio 时,他们有时会对 Istio 公开的庞大功能集感到不知所措。不幸的是,这会给人一种 Istio 不必要地复杂,不适合小型团队或集群的印象。
然而,Istio 的一个优点是,它旨在为用户带来最大的价值,而无需任何配置。这使用户能够以最小的努力获得 Istio 的大部分好处。对于某些具有简单需求的用户,可能永远不需要自定义配置。其他人可以根据需要,在他们更熟悉并需要时逐渐添加 Istio 配置,例如添加入口路由、微调网络设置或锁定安全策略。
入门
要开始使用,请查看我们的 入门 文档,您将了解如何安装 Istio。如果您已经熟悉,您可以简单地运行 istioctl install
。
接下来,我们将探索 Istio 在没有任何配置或更改应用程序代码的情况下为我们提供的全部优势。
安全性
Istio 会自动为网格中 pod 之间的流量启用 双向 TLS。这使应用程序能够放弃复杂的 TLS 配置和证书管理,并将所有传输层安全卸载到 sidecar。
在熟悉自动 TLS 后,您可能会选择 仅允许 mTLS 流量,或根据您的需求配置自定义 授权策略。
可观察性
Istio 会自动为网格中所有服务通信生成详细的遥测数据。此遥测数据提供对服务行为的可观察性,使操作员能够对应用程序进行故障排除、维护和优化,而不会给服务开发人员带来任何额外负担。通过 Istio,操作员可以全面了解监视的服务是如何相互交互的,包括与其他服务以及 Istio 组件本身的交互。
所有这些功能都是由 Istio 在没有任何配置的情况下添加的。还提供与 Prometheus、Grafana、Jaeger、Zipkin 和 Kiali 等工具的 集成。
有关 Istio 提供的可观察性的更多信息,请查看 可观察性概述。
流量管理
虽然 Kubernetes 提供了许多网络功能,例如服务发现和 DNS,但这是在第 4 层完成的,可能会产生意想不到的效率低下。例如,在将流量发送到具有 3 个副本的服务的简单 HTTP 应用程序中,我们可以看到负载不均衡
$ 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 还提供对 各种流量管理设置 的自定义,包括超时、重试等等。