问题背景:
我们的kubernetes环境中使用了ingress-nginx,使用host进行路由。
例如:
console.demo.com
路由到 console,管理服务
storage.demo.com
路由到storage,存储服务
payment.demo.com
路由到payment,支付服务
还有一些动态生成的,url也需要路由到不同的服务中。例如:
有些时候会给一些付费用户部署一个单独的服务,例如
xxxxxxx.user-zone.demo.com
那么,以上不同的子域名,都需要解析到同一个ingress controller上,然后由ingress controller进行路由。
DNS搭建
假设将DNS部署在192.168.0.18
服务器上,这个IP后面会用到。
因为需要暴露53端口,所以服务器上监听的该端口需要先关掉。
$ sudo netstat -anp | grep LISTEN | grep ":53"
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 694/systemd-resolve
$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
$ sudo vi /etc/systemd/resolved.conf
[Resolve]
DNS=114.114.114.114
FallbackDNS=8.8.8.8
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=no-negative
DNSStubListener=no
#ReadEtcHosts=yes
$ sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ nslookup jianshu.com
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
Name: jianshu.com
Address: 39.98.74.233
创建目录/opt/dns/data
,用于存储数据
docker run \
--name dns-server \
-d \
--restart=always \
--publish 53:53/tcp \
--publish 53:53/udp \
--publish 10000:10000/tcp \
--volume /opt/dns/data:/data \
sameersbn/bind:latest
进入界面,进行DNS解析配置
打开界面进行配置,[https://192.168.0.18:10000], 端口为10000,协议为https
用户名root
密码password




重启docker container生效配置
$ docker restart dns-server
在windows中配置DNS,然后就可以访问了
本地指向DNS Server,就可以访问了
> nslookup payment.demo.com
服务器: UnKnown
Address: 192.168.0.18
名称: payment.demo.com
Address: 192.168.0.98
> nslookup console.demo.com
服务器: UnKnown
Address: 192.168.0.18
名称: console.demo.com
Address: 192.168.0.98
> nslookup storage.demo.com
服务器: UnKnown
Address: 192.168.0.18
名称: storage.demo.com
Address: 192.168.0.98
# 任意一个子域名 + demo.com都被解析到了192.168.0.98了。
> nslookup OMG.demo.com
服务器: UnKnown
Address: 192.168.0.18
名称: omg.demo.com
Address: 192.168.0.98
网友评论