如何在 k8s 的 coredns 中设定,部分域名转发到某一个 pod(提供了 DNS 服务)来解析?

2021-12-04 11:23:33 +08:00
 asilin

如题,业务上部分域名(a.b.com)需要使用自定义 DNS 来解析,这在 CoreDNS 中很好设置,使用如下形式:

a.b.com:53 {
    forward . 192.168.123.45:5353
}

上述配置,将告诉 CoreDNS 遇到 a.b.com 及其子域的查询,就转到 192.168.123.45:5353 这个 DNS 。

但是现在有一个需求,提供 192.168.123.45:5353 的机器是单点的,所以就想把 a.b.com 子域查询的 DNS 服务部署在 k8s 集群中,享受 Pod 带来的所有便利。

所以,问题就是如何将请求转发给这个 Pod 呢?写死 Pod IP 肯定不行,因为 IP 会变; 使用 NodePort 将端口映射出来,再写死 NodePort IP ,嗯... 也是一种办法,但不是很优雅。

有没有 V 友能够解答下?

2276 次点击
所在节点    Kubernetes
15 条回复
liuliuball
2021-12-04 11:29:21 +08:00
能 forward 到 service 吗
asilin
2021-12-04 11:30:10 +08:00
@liuliuball 就是这么想的,但是查找了 Google 和官方文档,没发现类似写法
swulling
2021-12-04 11:37:19 +08:00
用 rewrite
https://coredns.io/2017/05/08/custom-dns-entries-for-kubernetes/

前一个项目里用过。

rewrite name foo.example.com foo.default.svc.cluster.local
asilin
2021-12-04 11:44:43 +08:00
@swulling 子域或者泛域名解析也可以吗?我试试
Infinitify
2021-12-04 13:19:36 +08:00
@asilin 这个设配好了,估计宝塔也可以跑在 K8S 中了。
swulling
2021-12-04 14:41:41 +08:00
@asilin 功能很强大,别说子域名了,正则匹配都行

https://coredns.io/plugins/rewrite/
wd
2021-12-04 17:05:08 +08:00
给你的 service 设置一个固定的 ip 不就可以了么
yprisoner
2021-12-04 17:18:13 +08:00
用 service externalName 可以吗
asilin
2021-12-04 17:40:08 +08:00
@wd 因为 coredns 不能随便修改(不由我们控制),如果我这边把 service 删除了,或者 ip 被占用了,就不太符合预期了。
asilin
2021-12-04 17:40:40 +08:00
@yprisoner 需要子域或者泛域名解析
asilin
2021-12-04 18:22:55 +08:00
@swulling #6 rewrite 本身是在 CoreDNS 内部解决 DNS 的请求转换,而不是将解析送给上有的 DNS 服务器,应该不满足我的需求。
v2000000001ex
2021-12-04 18:30:32 +08:00
配合 dnsmasq 一起使用?
asilin
2021-12-04 18:33:36 +08:00
@v2000000001ex #12 是的,就是想将 dnsmasq 作为上游 DNS ,运行在 k8s 集群中,自定义某些特定域名及其子域名的解析。
wd
2021-12-04 23:14:45 +08:00
@asilin 不理解 你这个服务如果是你自己的,为什么会出现你说的情况呢? ip 你先占到了在改 coredns 啊,service 为啥会被删除?如果删除不就是不想提供服务了吗?不改 coredns 顶多就是你那个自定义域名不能解析
asilin
2021-12-04 23:22:48 +08:00
@wd #14 具体需求就是 k8s 不由我们掌控,偶尔让对方修改一次 CoreDNS 还可以,多次修改可能会拒绝。

当 service 被删除(无论是有意还是无意),都会导致 service ip 变化,但是 service name 是恒定的。

所以,希望在 CoreDNS 中填写一个恒定的 service name ,比多次让对方修改变化的 service ip ,更现实。

当然了,如果 service 不会被删除,那 service ip 肯定不会变,这种情况下 service ip 也是最佳方案。

最理想的当然是 forward 到 恒定的 service name 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819983

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX