如题,业务上部分域名(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 友能够解答下?
1
liuliuball 2021-12-04 11:29:21 +08:00 via iPhone
能 forward 到 service 吗
|
2
asilin OP @liuliuball 就是这么想的,但是查找了 Google 和官方文档,没发现类似写法
|
3
swulling 2021-12-04 11:37:19 +08:00 via iPhone
用 rewrite
https://coredns.io/2017/05/08/custom-dns-entries-for-kubernetes/ 前一个项目里用过。 rewrite name foo.example.com foo.default.svc.cluster.local |
5
Infinitify 2021-12-04 13:19:36 +08:00
@asilin 这个设配好了,估计宝塔也可以跑在 K8S 中了。
|
6
swulling 2021-12-04 14:41:41 +08:00 via iPhone
|
7
wd 2021-12-04 17:05:08 +08:00 via iPhone
给你的 service 设置一个固定的 ip 不就可以了么
|
8
yprisoner 2021-12-04 17:18:13 +08:00
用 service externalName 可以吗
|
9
asilin OP @wd 因为 coredns 不能随便修改(不由我们控制),如果我这边把 service 删除了,或者 ip 被占用了,就不太符合预期了。
|
11
asilin OP @swulling #6 rewrite 本身是在 CoreDNS 内部解决 DNS 的请求转换,而不是将解析送给上有的 DNS 服务器,应该不满足我的需求。
|
12
v2000000001ex 2021-12-04 18:30:32 +08:00
配合 dnsmasq 一起使用?
|
13
asilin OP @v2000000001ex #12 是的,就是想将 dnsmasq 作为上游 DNS ,运行在 k8s 集群中,自定义某些特定域名及其子域名的解析。
|
14
wd 2021-12-04 23:14:45 +08:00 via iPhone
@asilin 不理解 你这个服务如果是你自己的,为什么会出现你说的情况呢? ip 你先占到了在改 coredns 啊,service 为啥会被删除?如果删除不就是不想提供服务了吗?不改 coredns 顶多就是你那个自定义域名不能解析
|
15
asilin OP @wd #14 具体需求就是 k8s 不由我们掌控,偶尔让对方修改一次 CoreDNS 还可以,多次修改可能会拒绝。
当 service 被删除(无论是有意还是无意),都会导致 service ip 变化,但是 service name 是恒定的。 所以,希望在 CoreDNS 中填写一个恒定的 service name ,比多次让对方修改变化的 service ip ,更现实。 当然了,如果 service 不会被删除,那 service ip 肯定不会变,这种情况下 service ip 也是最佳方案。 最理想的当然是 forward 到 恒定的 service name 。 |