-
Notifications
You must be signed in to change notification settings - Fork 80
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lazyload should support smartdns #385
Comments
关于场景二: 解析出来的那个ip是不是真的并不重要,只要能转发到gs,就能流程走通 所以我们修改了内部的pilotagent,if xx then mock .. 这个做法不够普遍.. |
@MouceL 两个场景解析出来的 ip 是什么都不太重要,只要 dns 正常就行。 |
不需要确定 cds 的 host 是 svc 的 host,因为我们也要支持 serviceentries 中自定义的 host。 还有一种方式可以让 lazyload 不需要关心 eds,就是直接使用 cds 的 host 做 dns 解析,如果不成功的 host 放到 serviceentries 中。 |
我发现 istio coredns plugin 这个能直接解决我们的问题,只是现在不维护了。 |
如果 svc 域名或者 service entry 无法解析,使用 template plugin 返回 fake ip 1.1.1.2 ,coredns 配置如下:
在 coredns 中 template plugin 默认执行顺序先与 kuberntes plugin , forward plugin 执行顺序后于 kubernetes plugin。所以我们监听一个 153 端口,通过 forward 实现我们的需求。 coredns 版本需要大于 1.9.3 ,不然不支持多个 forward 。 |
不太熟悉coredns的配置,我来瞧瞧 如果可以,这个确实可以作为一个社区方案,弥补slime对serviceentry支持的不足 |
以上配置在开启 smartdns 时存在问题。更新配置如下:
|
问题背景
场景一:
在多集群环境中,当要被调用的服务不在本集群中,如果不开启 smart dns,请求调用时会解析 host 失败。
场景二:
istio serviceentries 也是依赖 smart dns 解析的 host
这两种场景开启 lazyload 模式都会导致请求 host 解析失败。
您想要的解决方案
基本方案
在集群中有一个辅助域名服务,能解析所有集群的 svc host 与 service entries, 并添加到默认的 /etc/resolv.conf 中。
原本的 /etc/resolv.conf :
假如辅助域名服务的 cluster ip 是 172.20.0.11, 新的 /etc/resolv.conf :
注意辅助域名服务 的 cluster ip 需要静态化指定。
您考虑过的替代方案
可选方案一: Global Sidecar 的 pilot-agent 做为 辅助域名服务
可选方案二: coredns 返回一个 fakeip
额外的上下文
The text was updated successfully, but these errors were encountered: