Istio中resolution设为DNS的ServiceEntry何时更新路由表?
Istio ServiceEntry DNS解析时机说明
当你将ServiceEntry的resolution字段设置为DNS时,Istio的域名解析与路由表更新遵循以下逻辑:
解析触发时机
- ServiceEntry创建/更新时:Istio控制平面(Pilot)会立即对
hosts字段中的域名执行一次DNS解析,将解析得到的IP地址同步到数据平面Envoy的路由表中。 - 周期性自动刷新:Istio默认每30秒会自动重新解析配置的DNS域名(该周期可通过全局配置调整),确保路由表中的端点地址始终是最新状态,无需依赖流量触发。
- 流量触发的按需解析:如果Envoy收到针对该域名的请求,但本地路由表中没有可用的有效端点(比如之前解析的IP已失效),会立即触发一次DNS解析,快速更新路由表以响应当前请求。
针对你的示例说明
对于你配置的mine.ops.hm-net域名:
- 在
internal-service-entry这个ServiceEntry创建或更新时,Istio会立即解析该域名,将结果同步到Envoy路由表; - 之后每30秒自动重新解析并更新;
- 若某次请求时发现之前的解析结果不可用,也会立刻触发重新解析,再通过
mine-ops-vs这个VirtualService将流量路由到mine-ops-service。
通配符主机的特殊逻辑
对于*.ops.hm-net这类带通配符的ServiceEntry,Istio无法提前预解析所有可能的子域名(因为子域名数量不确定)。此时解析逻辑变为仅当收到具体子域名的请求时才触发解析:比如当Envoy收到a.ops.hm-net的请求时,才会去解析这个具体的子域名,而不会提前填充所有潜在子域名的路由条目。这就是为什么通配符ServiceEntry无法像固定域名那样提前生成完整路由表的原因。
对应你提出的猜想验证
- 正确:ServiceEntry首次注册或更新时确实会触发解析;
- 部分正确:并非针对所有“路由表中不存在的新域名”,而是针对通配符下的具体请求、或固定域名但端点失效的请求时触发;
- 正确:Istio拥有周期性刷新DNS的生命周期机制来维护路由表。
内容的提问来源于stack exchange,提问作者HyeonJunOh
相关产品推荐
相关产品推荐

