【Istio 控制面】DestinationRule:Cluster 之上的 subset、outlier 与 TLS 挂载

💡 原文中文,约9700字,阅读约需23分钟。
📝

内容提要

本文介绍Istio中DestinationRule如何配置Envoy Cluster:它不创建服务,仅对匹配的host追加配置;TrafficPolicy四组件(连接池、异常检测、负载均衡、TLS)按序映射到Cluster字段;subset只生成Cluster,需VirtualService配合路由;四层合并规则中,subset继承顶层,port级不继承而回落Envoy默认值;TLS模式管客户端出站,与PeerAuthentication对应。

🔎

延伸解读

host 拼错会静默失效

DestinationRule 的 host 必须精确匹配已有服务名,否则规则不会生效且不报错。排障时不要先怀疑 outlier 参数,而应先用 istioctl proxy-config cluster 确认预期的 subset 是否出现。另外,Sidecar egress 作用域也会影响规则可见性,未导入命名空间的规则不会被代理看到。

port 级与 subset 级继承不对称

四层合并规则中,subset 级覆盖会继承 DestinationRule 顶层同名字段,而 port 级覆盖不继承,未写字段直接落到 Envoy 默认值。例如,若在 portLevelSettings 中只设置 loadBalancer,该端口的 connectionPool 和 outlierDetection 会回到 Envoy 默认,而非顶层配置。这可能导致端口间熔断阈值不一致,需在 port 级重复配置所需字段。

TLS 模式与 PeerAuthentication 的对应

DestinationRule 的 tls.mode 控制客户端出站连接,PeerAuthentication 控制服务端入站,两者是同一连接的两端。auto mTLS 的 best-effort 推断仅覆盖 mesh/namespace 级,忽略 workload/port 级。若 PeerAuthentication 设为 STRICT 而 DestinationRule 显式 DISABLE,或对无 sidecar 目标误配 ISTIO_MUTUAL,都会导致 503,且 CDS/RDS 单独看都正常。

Q&A

Istio 中 DestinationRule 的作用是什么?它是否会创建新的服务?

DestinationRule 不会创建新的服务,它只是对匹配的 host 追加 Cluster 配置。如果 host 拼写错误或大小写不一致,规则会静默失效,不会报错。

TrafficPolicy 的四个组件分别映射到 Envoy Cluster 的哪些字段?

connectionPool 映射到 circuit_breakers 和连接/请求上限;outlierDetection 映射到 outlier_detection;loadBalancer 映射到 lb_policy 和 lb_subset_config;tls 映射到 transport_socket。

在 Istio 中,如何将流量路由到 DestinationRule 定义的 subset?

需要配合 VirtualService 使用,在 route 的 destination 中指定 subset 名称。仅定义 subset 只会生成对应的 Cluster,不会自动路由流量。

Istio 中 DestinationRule 的 port 级设置与 subset 级设置在继承规则上有什么不同?

subset 级设置会继承 DestinationRule 顶层的同名字段,未设置的字段会从顶层补齐;而 port 级设置不会继承,未设置的字段会直接使用 Envoy 的默认值。

DestinationRule 中的 tls.mode 与 PeerAuthentication 有什么关系?

DestinationRule 的 tls.mode 控制客户端出站连接使用的 TLS 模式,而 PeerAuthentication 控制服务端入站连接的 mTLS 要求。两者对应同一条连接的两端,需要配合使用。

auto mTLS 的推断机制有什么限制?

auto mTLS 的推断是 best-effort 的,只覆盖 mesh 和 namespace 级别的 PeerAuthentication,忽略 workload 和 port 级别的策略。因此,对于 workload 级别的 PeerAuthentication,需要显式在 DestinationRule 中设置 tls.mode。

🏷️

标签

➡️

继续阅读