headless service 相关问题
服务间通过注册中心调用响应 404
- 现象: 传统服务 (比如 Srping Cloud) 迁移到 istio 后,服务间调用返回 404。
- 原因: 没走 Kubernetes 的服务发现,而是通过注册中心获取服务 IP 地址,然后服务间调用不经过域名解析,直接向获取到的目的 IP 发起调用。由于 istio 的 LDS 会拦截 headless service 中包含的 PodIP+Port 的请求,然后匹配请求 hosts,如果没有 hosts 或者 hosts 中没有这个 PodIP+Port 的 service 域名 (比如直接是 Pod IP),就会匹配失败,最后返回 404。
- 解决方案:
- 注册中心不直接注册 Pod IP 地址,注册 service 域名。
- 或者客户端请求时带上 hosts (需要改代码)。