构建企业级DNS系统(十)搭建Docker容器bind

news2024/9/25 13:23:10

把bind运行在docker中

伴随着应用微服务化,大量应用跑在了容器之中,为了让容器的管理更可靠、可控并为上层应用提供更好的体验,更快的发布,更灵活的调度,容器云应运而生。
当各种上层应用跑在了容器之中,大家开始希望各种基础设施也能容器化,借助容器的特性和优势提供更好的服务,于是将DNS服务容器化成为了一个关注的话题。本文介绍一个最简单的bind容器化落地方案,基于ISC官方发布的docker镜像快速构建一个基于docker的DNS系统。

在docker hub中找到ISC官方bind镜像

ISC官方的docker镜像在hub中的链接:docker hub bind9
我们可以在docker hub的官网中搜索internetsystemsconsortium/bind9即可看到ISC官方的bind9镜像。
在这里插入图片描述
在这里插入图片描述

下载bind镜像并启动容器实现一个简单的递归DNS

首先,我们要准备好一个已经安装了docker的环境,本文的实验环境是centos7.8。
使用docker search命令先看看是否能找到这个镜像,如下所示成功找到了Official ISC BING 9 Docker,而且是基于Ubuntu。

[root@localhost ~]# docker search bind9
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
resystit/bind9                    Bind9 running on Alpine. 9Mo                    47                   [OK]
internetsystemsconsortium/bind9   Official ISC BIND 9 Docker, based on Ubuntu …   44                   
ubuntu/bind9                      BIND 9 is a very flexible, full-featured DNS…   31                   
fike/bind9                        Bind9 running on Debian Wheezy. Enjoy it and…   8                    [OK]
conceptant/bind9-namedmanager     This docker image implements BIND DNS server…   6                    [OK]
emsi/bind9                        Clean bind9 docker. Config in volume.           5                    [OK]
mjkaye/bind9-alpine               Bind9 running on Alpine Linux [amd64/armhf/a…   3                    
pwa666/bind9                      Lightweight container with bind9 and webmin …   3                    
mbentley/bind9                                                                    2                    [OK]
vinyldns/bind9                    **DEPRECATED** BIND9 DNS Docker image for Vi…   1                    
zhusj/bind9                       Bind 9.16 with Alpine Linux                     1                    [OK]
bantolph/bind9                    arm64 build of the internetsystemsconsortium…   1                    
emsi/bind9-data                   emsi/bind9 data-only container. Please refer…   1                    [OK]
prehley/bind9                     Docker image for bind                           1                    [OK]
vandalirice/bind9                 Bind9 docker image                              0                    [OK]
labradorcode/bind9                bind9 based on alpine                           0                    
bratkartoffel/bind9               https://github.com/bratkartoffel/bind9-docker   0                    
yangzhaofengsteven/bind9                                                          0                    
459below/bind9                    A Docker image for bind9                        0                    [OK]
diverdane/bind9                                                                   0                    
mlinarik/bind9                                                                    0                    
gmelillo/bind9                                                                    0                    
sutaxyz/bind9                                                                     0                    
jchonig/bind9                     Run ISC nameserver (bind9) in a container       0                    
neomediatech/bind9                Dockerized bind9 daemon, based on Ubuntu        0                    
[root@localhost ~]# 

使用docker pull拉取镜像,本文测试时使用的是bind9.16版本

[root@localhost ~]# docker pull internetsystemsconsortium/bind9:9.16
9.16: Pulling from internetsystemsconsortium/bind9
Digest: sha256:52ea8c50223d031ce5b8fc60c4e465ff4897a9cfed227e21f5b00a77dcd23e64
Status: Image is up to date for internetsystemsconsortium/bind9:9.16
docker.io/internetsystemsconsortium/bind9:9.16
[root@localhost ~]# docker images
REPOSITORY                        TAG       IMAGE ID       CREATED         SIZE
internetsystemsconsortium/bind9   9.16      748e4b634100   12 months ago   253MB

执行docker run启动容器

[root@localhost ~]#  docker run -d  --restart=always --publish 53:53/udp --publish 53:53/tcp --publish 127.0.0.1:953:953/tcp internetsystemsconsortium/bind9:9.16
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                  COMMAND                  CREATED              STATUS              PORTS                                                            NAMES
6e19e494742a   internetsystemsconsortium/bind9:9.16   "/usr/sbin/named -g …"   About a minute ago   Up About a minute   0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp, 127.0.0.1:953->953/tcp   serene_goldstine

容器启动后可以查看本机的53端口监听情况,然后可用dig命令测试一下运行的bind容器是否能做域名解析。

[root@localhost ~]# netstat -anp|grep 53
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      3019/docker-proxy   
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      3007/docker-proxy   
udp        0      0 0.0.0.0:53              0.0.0.0:*                           3031/docker-proxy   
unix  2      [ ACC ]     STREAM     LISTENING     27353    1048/master          private/lmtp
[root@localhost ~]# 
[root@localhost ~]# dig @127.0.0.1 www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @127.0.0.1 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6667
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       300     IN      A       110.242.68.4
www.a.shifen.com.       300     IN      A       110.242.68.3

;; Query time: 4162 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Nov 12 17:05:03 CST 2022
;; MSG SIZE  rcvd: 104

如果在启动容器过程中报错Docker之WARNING: IPv4 forwarding is disabled. Networking will not work那么可按照如下方法解决。

vim /etc/sysctl.conf

#配置转发
net.ipv4.ip_forward=1

#重启服务,让配置生效
systemctl restart network

进入正在运行的bind容器中查看相关信息。

[root@localhost ~]# docker exec -ti 6e19e494742a  /bin/sh
# 
# ps -ef|grep named
bind          1      0  0 09:01 ?        00:00:00 /usr/sbin/named -g -c /etc/bind/named.conf -u bind
root         22     15  0 09:06 pts/0    00:00:00 grep named
# 
# ls /etc/bind
bind.keys  db.0  db.127  db.255  db.empty  db.local  named.conf  named.conf.default-zones  named.conf.local  named.conf.options  rndc.key  zones.rfc1918
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
Codename:       focal

创建权威区搭建权威DNS

上面的小实验实现了一个基于bind容器的递归DNS,因为递归DNS如果没有特别特殊的需求,不涉及本地域名配置数据的持久化,那么基于此方式可以。而一旦要搭建权威DNS,涉及DNS记录数据的持久化,那么在启动容器时要考虑区数据的持久化以及一致性问题。
通过docker的volume可将宿主机的某个目录挂到容器中,还可以实现多个容器共用相同的一个目录下的数据文件。
执行docker run命令启动bind容器,此时主要volume参数的使用。

[root@localhost ~]#  docker run -d  --restart=always --publish 53:53/udp --publish 53:53/tcp --publish 127.0.0.1:953:953/tcp --volume /etc/bind --volume /var/cache/bind --volume /var/lib/bind --volume /var/log internetsystemsconsortium/bind9:9.16
5058038eb073ce71ca4656e94dec1a8b35538a8a09aa44cdc68fa2b7d02ed45a
[root@localhost ~]# 
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                  COMMAND                  CREATED          STATUS          PORTS                                                            NAMES
5058038eb073   internetsystemsconsortium/bind9:9.16   "/usr/sbin/named -g …"   41 seconds ago   Up 40 seconds   0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp, 127.0.0.1:953->953/tcp   unruffled_noyce

进入到bind容器中创建test.com权威区和相关记录

# cat /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";
        // forwarders {
        //      0.0.0.0;
        // };
        dnssec-validation auto;
        listen-on-v6 { any; };
};

zone "test.com." {
        type primary;
        file "/var/lib/bind/test.com.zone";
        notify explicit;
};
# cat /var/lib/bind/test.com.zone
;
;
$ORIGIN .
$TTL    3600
test.com        IN      SOA     ns1.test.com. mail.test.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
                NS ns1.test.com.
$ORIGIN test.com.
ns1     IN      A       172.16.29.170
www     IN      A       10.10.10.100
www     IN      AAAA    2000::1

执行rndc reload命令

# rndc reload
server reload successful

测试此时可以正常解析到test.com权威区中的资源记录

(base) user1@bogon ~ % dig @172.16.29.170 www.test.com

; <<>> DiG 9.10.6 <<>> @172.16.29.170 www.test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19041
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.test.com.			IN	A

;; ANSWER SECTION:
www.test.com.		3600	IN	A	10.10.10.100

;; Query time: 0 msec
;; SERVER: 172.16.29.170#53(172.16.29.170)
;; WHEN: Sat Nov 12 17:51:25 CST 2022
;; MSG SIZE  rcvd: 57

至此,一个简单的基于ISC官方docker bind镜像的实验就做完了。
而在实际的投产过程中,要考虑的细节比较多。例如:bind集群的技术架构,因为如果基于容器的动态扩缩容的方式,那么数据的一致性如何解决?此时建议可以考虑采用“多主”的方式,所有bind共享一份数据,或者采用“隐主”的方式。另外,bind运行在容器中的解析性能相比直接运行在宿主机上会有一定的下降。

总结

DNS属于重要的网络基础服务,是业务访问的入口,随着近年来微服务的演进,服务发现和注册的全新应用,DNS曝光度越来越高,也出现了不同形态的DNS。
在企业实际生产环境中,要注意在合适的场景下选择合适的技术方案。假如我们的DNS系统定位就是一套高可用的,面向所有租户提供跨集群服务的高性能、高可靠DNS服务。那么在多地部署高性能服务器并采用Anycast方式构建DNS系统或许比docker的方式更加可靠,毕竟DNS服务和上层应用不一样,它不一定需要那么灵活,但前提一定要可靠和可控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux怎么设置中文语言? centos中文乱码的解决办法

怎么设置Linux系统中文语言&#xff1f;是很多小伙伴在开始使用Linux的时候&#xff0c;都会遇到一个问题&#xff0c;就是终端输入命令回显的时候中文显示乱码。出现这个情况一般是由于没有安装中文语言包&#xff0c;或者设置的默认语言有问题导致的。今天我们就以centos为例…

千亿贴息助科研,维视智造院校实验室建设攻略来了(四)!

01千亿政策贴息助力院校设备升级 近期&#xff0c;关于高校教育信息化的利好政策密集出台。9月7日&#xff0c;国务院常务会议提出对高校、职业院校和实训基地等10大领域设备购置和更新改造新增贷款&#xff0c;实施阶段性鼓励政策&#xff0c;中央财政贴息2.5个百分点&#xf…

【跟学C++】C++STL标准模板库——算法详细整理(下)(Study18)

文章目录1、简介2、STL算法分类及常用函数2.2、变序算法&#xff08;二&#xff09;2.2.1 替换算法(2个)2.2.2 排序算法(6个)2.2.3 分区算法(4个)2.2.4 可用于排序容器的算法(3个)3、总结 【说明】 大家好&#xff0c;本专栏主要是跟学C内容&#xff0c;自己学习了这位博主【 …

SAP PS 第八节 PS 常见问题处理-来源于SAP EPPM分享

SAP PS 常见问题处理1 配置类1.1 结果分析的几类方法1.1.1 关于CO表中价值类别和值类型区别1.1.2 关于结果分析取那个计划成本的问题1.1.3 实际成本大于计划成本的报错1.1.4 结果分析一些典型配置&#xff08;闲人提供&#xff09;1.1.5 结果分析1.2 计划成本1.3 结算时&#x…

回炉重造,温故知新__css常规布局方法梳理__开发实战后的经验之谈

目录 1 基础css布局 1.1 position定位 1.2 float定位 2 开发中常用的布局 2.1 flex布局 2.2 antd栅格布局 2.3 grid网格布局 3 flex布局详解 3.1 flex布局是什么 3.2 教程文档小结 3.3 flex布局应用 4 参考资料 &#x1f44b;&#x1f3fb; 写在前面&#xff1a; 在…

【OpenEVSE 】汽车充电桩控制项目解析

【OpenEVSE 】汽车充电桩控制项目解析1. 项目介绍2. 项目硬件3. 软件原理以及流程4. 系统结构&#xff1a;ESP32RAPI APIMQTT 上的 RAPI:5. SAE J1772协议简析&#xff1a;6. 专用充电接插件7 . 源码解析&#xff1a;此项目来源于openEnergyMonitor 的 openEVSE 部分&#xff0…

A. Tokitsukaze and Strange Inequality(前缀和+桶)

Problem - 1677A - Codeforces 时津风有一个长度为n的排列组合p。回顾一下&#xff0c;长度为n的排列组合p是由n个不同的整数组成的序列p1,p2,...,pn&#xff0c;每个整数从1到n&#xff08;1≤pi≤n&#xff09;。 她想知道在这个排列组合中&#xff0c;有多少个不同的指数图…

玩转MySQL:你知道什么是表分区吗

引言 分库分表相信大家都听说过&#xff0c;但(partitioning)表分区这个概念却鲜为人知&#xff0c;MySQL在5.1版本中开始支持了表分区技术&#xff0c;同时在MySQL5.5中进行了优化&#xff0c;自从MySQL支持的绝大部分引擎都开启了表分区功能。 但到底什么是表分区技术呢&…

基于golang+uniapp+python 实现的一套A股提醒系统

shareshttps://github.com/xxjwxc/shares 功能 A 股量化交易系统 后台开发语言 Go/Python gmsechttps://github.com/gmsec/gmsec gormt 嵌入&#xff0c;自动数据库代码生成 gorm 自动构建(gormt)https://github.com/xxjwxc/gormt 分时任务,盯盘助手,研报股评,每日监控,微信…

Bioinformatics2022 | AdvProp+:基于集成网络的分子性质预测与药物研发

论文标题&#xff1a;Advanced graph and sequence neural networks for molecular property prediction and drug discovery 代码&#xff1a;https://github.com/divelab/MoleculeX 一、Materials and methods 1、Notations and problem definitions 旨在通过基于图和基于…

Vue基础5

Vue基础5绑定样式绑定class样式绑定style样式条件渲染列表渲染v-for指令key的原理index作为key的时候id作为key的时候总结绑定样式 class样式 写法&#xff1a;class"xxx“ xxx可以是字符串、对象、数组 字符串的写法适用于&#xff1a;类名不确定&#xff0c;要动态获取…

如何做一个小程序商城,需要多少钱

如何做一个小程序商城&#xff0c;需要多少钱&#xff1f; 操作像玩消消乐那么简单&#xff01; 费用是一年1998元至3498元。免300元认证费。买两年用四年。 日均花费不到2元就能搭建一个小程序商城。 下面分享的是自建小程序商城的教程: 1、进入第三方小程序商城制作平台…

Mybatis-Plus中getOne方法获取最新一条数据

Mybatis-Plus中getOne方法获取最新一条数据一、代码1、Controller2、Service3、效果一、代码 1、Controller GetMapping("/queryNewProduct")public ProductDTO queryNewProduct(RequestParam("type") String type) {return opProductService.queryNewPro…

Python基础(二):不同系统安装Python3

​​​​​​​ 文章目录 不同系统安装Python3 一、Anaconda安装与使用 1、下载 2、安装 3、配置 4、使用 5、常用命令 二、原生Python安装 三、在Linux环境Python安装 不同系统安装Python3 14天学习训练营导师课程&#xff1a;杨鑫《Python 自学编程基础》杨鑫《 P…

HTML学生个人网站作业设计——中华美食(HTML+CSS) 美食静态网页制作 WEB前端美食网站设计与实现

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

JVM 中类加载的链接与初始化

类加载系统&#xff0c;主要有以下部分 加载链接 验证准备解析初始化 它们每部分都做些什么事情呢&#xff1f; 加载 (2条消息) JVM 双亲委派模型_兜兜转转m的博客-CSDN博客 链接 链接-验证 一般验证部分&#xff0c;IDEA已经帮我们规范了。 验证是连接阶段的第一步&…

第二章 数据库设计

数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境&#xff0c;构造最优的数据库模式&#xff0c;建立数据库极其应用系统&#xff0c;有效存储数据&#xff0c;满足用户信息要求和处理要求。 数据库设计的步骤 ⒈需求分析阶段 收集和分析用户需…

怎么搭建属于自己的网站?

搭建属于自己的网站已经不是什么新鲜事了&#xff0c;有些人甚至搭建一个网站用来做自己的简历。搭建网站对一些懂代码的人来说也是比较简单的&#xff0c;就算不精通也能下载源代码模板。那如果不太懂代码的小伙伴&#xff0c;又怎么搭建属于自己的网站呢&#xff1f; 一、善…

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

编译 简单就是把代码跑一哈&#xff0c;然后我们的代码 .java文件 就被编译成了 .class 文件 反编译 就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来&#xff0c;可以看到你的代码写的啥。 比较常用的反编译工具 JD-GUI &#xff0c;直接把编译好的jar丢进…

MySQL 进阶 图文详解InnoDB储存引擎

前言 SQL 语句的最终执行者是存储引擎。存储引擎在经解析器、优化器处理后被执行器调用其接口执行优化后的执行计划。MySQL 存储引擎包括 InnoDB、Myisam、Memory、Archive、CSV 存储引擎等&#xff0c;其中最常用也是MySQL 默认的存储引擎是 InnoDB。 写入缓冲池&#xff08;…