背景

当Linux集群中机器不断增多,集群内通过配置/hosts实现域名内网访问。

目标

  • 相同域名在集群之外通过公有DNS访问外网地址
  • 相同域名在集群内通过DNS解析访问内网地址

步骤

搭建DNS服务器

DNS服务器可以通过jpillora/dnsmasq容器实现

新增配置文件 dnsmasq.conf

# 完整配置文件参考以下地址
#  http://oss.segetech.com/intra/srv/dnsmasq.conf
# 记录所有DNS查询请求
log-queries
# 不使用本地配置的域名解析器
no-resolv
# 不使用本地hosts
no-hosts
# 配置上游DNS服务器地址,用于解析国内域名
server=114.114.114.114
# 配置国际DNS服务器地址
server=8.8.8.8
strict-order
# 配置内网解析
address=/gitlab.fjy8018.top/192.168.1.11

配置docker-compose文件,DNS服务器默认通过53 udp端口解析,不建议修改53端口的外部地址

version: "3.5"

services:

  dnsmasq:
    image: jpillora/dnsmasq:1.1.0
    networks:
      - dns-net
    ports:
      - 53:53/udp
      - 5380:8080
    volumes:
      - ./dnsmasq.conf:/etc/dnsmasq.conf
    environment:
      - "HTTP_USER=admin"
      - "HTTP_PASS=admin"
    restart: always

networks:
  dns-net:

启动服务即可

后续需要修改DNS解析只需要访问5380的web UI界面即可动态调整

服务器指向新DNS服务器

将所有服务器/etc/resolv.conf文件指向新DNS服务器地址

$ tee /etc/resolv.conf <<-'EOF'
# Generated by NetworkManager
nameserver 192.168.1.13
EOF

补充

对于kubernetes集群,由于集群内使用了corednsnodelocaldns缓存服务,还需要重启两个dns服务组件

$ kubectl -n kube-system rollout restart daemonset nodelocaldns
$ kubectl -n kube-system rollout restart deploy coredns
Last modification:May 9th, 2021 at 06:14 pm
如果觉得我的文章对你有用,请随意赞赏