基于db 进行dns 记录的管理还是比较有用的,尤其在一些开发环境中,以下是一个使用
同时也会尝试集成readyset(但是木有成功,应该是mysql 编码兼容的问题)
添加&构建插件
方法比较简单,官方有比较完整的文档说明,主要就是修改plugin.cfg 文件,同时通过go get 获取插件,然后就是
go generate 以及 go build,为了方便我构建了一个容器镜像,可以直接使用dalongrong/coredns
环境准备
- docker-compose 文件
version: '3'services:coredns:image: dalongrong/corednscommand: -conf=/opt/Corefilevolumes:- ./Corefile:/opt/Corefileports:- 53:53- 53:53/udpmysql:image: mysql:8.0.32command: --default-authentication-plugin=mysql_native_password --log-bin --binlog-format=ROW --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_cienvironment:- MYSQL_ROOT_PASSWORD=dalong- MYSQL_DATABASE=corednsports:- 3306:3306# 包含了readyset 但是目前似乎是兼容问题没成功readyset:image: public.ecr.aws/readyset/readyset:beta-2023-01-18command: --standalone --deployment=quickstart-mysql --database-type=mysql -upstream-db-url=mysql://root:dalong@mysql:3306/coredns --address=0.0.0.0:5433 --password=dalong --query-caching=explicit --db-dir=/state --allow-unauthenticated-connectionsenvironment:- DEPLOYMENT_ENV=quickstart_docker- RS_API_KEYports:- 5433:5433volumes:- ./readyset:/stateCorefile 配置文件
.:53 {mysql {dsn root:dalong@tcp(mysql:3306)/coredns?tls=skip-verify&autocommit=truettl 20}}
运行&准备
- 启动环境
docker-compose up -d
- 初始化数据表
CREATE TABLE `coredns_records` (`id` INT NOT NULL AUTO_INCREMENT,`zone` VARCHAR(255) NOT NULL,`name` VARCHAR(255) NOT NULL,`ttl` INT DEFAULT NULL,`content` TEXT,`record_type` VARCHAR(255) NOT NULL,PRIMARY KEY (`id`))
INSERT INTO coredns_records (zone, name, ttl, content, record_type) VALUES('example.org.', 'foo', 30, '{"ip": "1.1.1.1"}', 'A'),('example.org.', 'foo', '60', '{"ip": "1.1.1.0"}', 'A'),('example.org.', 'foo', 30, '{"text": "hello"}', 'TXT'),('example.org.', 'foo', 30, '{"host" : "foo.example.org.","priority" : 10}', 'MX');
- 查询效果
dig @127.0.0.1 A MX foo.example.org
说明
本来是想测试readyset的,但是碰到了兼容问题,基本就是没成功,错误信息如下,应该是编码兼容问题,readyset 的想法是很不错的,目前兼容性问题还是不少的,可能pg 协议会好点,后边尝试下
参考资料
https://docs.readyset.io/guides/quickstart/
https://github.com/readysettech/readyset
https://github.com/cloud66-oss/coredns_mysql
https://github.com/coredns/coredns
https://coredns.io/2017/07/25/compile-time-enabling-or-disabling-plugins/