构建后端为etcd的CoreDNS的容器集群(七)、编写适合阅读的域名管理脚本

本文为系列测试文章,拟基于自签名证书认证的etcd容器来构建coredns域名解析系统。

一、前置文章

构建后端为etcd的CoreDNS的容器集群(一)、生成自签名证书

构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像

构建后端为etcd的CoreDNS的容器集群(三)、etcd功能测试

构建后端为etcd的CoreDNS的容器集群(四)、etcd挂载私有自签名证书进行访问测试

构建后端为etcd的CoreDNS的容器集群(五)、coredns对接etcd测试

构建后端为etcd的CoreDNS的容器集群(六)、编写自动维护域名记录的代码脚本

二、对接etcd,新增域名的脚本

etcdctl命令添加域名记录key值形如"/coredns/com/test/www",比较难阅读,编写shell脚本,用于较方便地新增域名。

1、编写脚本,脚本名:adddomain.sh,内容如下:
bash 复制代码
[root@localhost coredns]# cat adddomain.sh
#!/bin/bash
##__author__='daigjianbing'

ENDPOINTS=https://etcd-1:2379,https://etcd-2:2379,https://etcd-3:2379
SSL_CACERT=/opt/coredns/ssl/ca.pem
SSL_CERT=/opt/coredns/ssl/etcd.pem
SSL_KEY=/opt/coredns/ssl/etcd-key.pem

if [ $# -lt 2 ]; then
    echo -e "Usage: $0 <domain> <ip> \nJust like: $0 www.163.com 192.168.1.1"
    exit 1
fi

domain=$1
ip=$2

parts=(${domain//\./ }) #用.分拆域名
reversed_domain=""
# 倒序重新生成易于阅读的域名
for ((i=${#parts[@]}-1; i>=0; i--)); do
    if [ -z "$reversed_domain" ]; then
        reversed_domain="${parts[$i]}"
    else
        reversed_domain="${reversed_domain}/${parts[$i]}"
    fi
done

# 生成实际命令
etcdctl_command="etcdctl --endpoints=${ENDPOINTS} --cacert=${SSL_CACERT} --cert=${SSL_CERT} --key=${SSL_KEY} put /coredns/$reversed_domain '{\"host\":\"$ip\",\"ttl\":10}'"
echo "${etcdctl_command}"   #回显命令
eval $etcdctl_command       #执行命令
[root@localhost coredns]# 
2、执行测试
bash 复制代码
[root@localhost coredns]# ./adddomain.sh www.test.com 192.168.1.1
etcdctl --endpoints=https://etcd-1:2379,https://etcd-2:2379,https://etcd-3:2379 --cacert=/opt/coredns/ssl/ca.pem --cert=/opt/coredns/ssl/etcd.pem --key=/opt/coredns/ssl/etcd-key.pem put /coredns/com/test/www '{"host":"192.168.1.1","ttl":10}
OK
[root@localhost coredns]# 

可以看到具体添加域名的指令及执行结果为ok。

三、对接etcd,查询域名的脚本

同样编写脚本,将etcd数据库中存储的域名,以适合阅读的形式进行回显输出。

1、编写脚本,脚本名showdomain.sh
bash 复制代码
[root@localhost coredns]# cat showdomain.sh 
#!/bin/bash
##__author__='daigjianbing'

ENDPOINTS=https://etcd-1:2379,https://etcd-2:2379,https://etcd-3:2379
SSL_CACERT=/opt/coredns/ssl/ca.pem
SSL_CERT=/opt/coredns/ssl/etcd.pem
SSL_KEY=/opt/coredns/ssl/etcd-key.pem

while read -r line; do
    if [[ $line =~ ^/coredns/ ]]; then
        key=${line#/coredns/}
        parts=(${key//\// })
        reversed_parts=($(for part in "${parts[@]}"; do echo $part; done | tac))
        domain=""
        for ((i=0; i<${#reversed_parts[@]}; i++)); do
            if [ -z "$domain" ]; then
                domain="${parts[$i]}"
            else
                domain="${parts[$i]}.${domain}"
            fi
        done
    else
        value=$(echo $line | awk -F'"host":"|","ttl":' '{print $2}')
        echo "${domain}, $value"
    fi
done <<< "$(etcdctl --endpoints=${ENDPOINTS} --cacert=${SSL_CACERT} --cert=${SSL_CERT} --key=${SSL_KEY} get --prefix "/")"
[root@localhost coredns]#
2、执行测试
bash 复制代码
[root@localhost coredns]# ./showdomain.sh     
www.test.com, 192.168.1.1

测试回显正常。

三、编写删除域名的脚本

1、脚本名deldomain.sh,内容:
bash 复制代码
[root@localhost coredns]# cat deldomain.sh
#!/bin/bash
##__author__='daigjianbing'

ENDPOINTS=https://etcd-1:2379,https://etcd-2:2379,https://etcd-3:2379
SSL_CACERT=/opt/coredns/ssl/ca.pem
SSL_CERT=/opt/coredns/ssl/etcd.pem
SSL_KEY=/opt/coredns/ssl/etcd-key.pem

if [ $# -lt 1 ]; then
    echo -e "Usage: $0 <domain>\nJust like: $0 www.163.com"
    exit 1
fi

domain=$1

parts=(${domain//\./ })
reversed_domain=""
for ((i=${#parts[@]}-1; i>=0; i--)); do
    if [ -z "$reversed_domain" ]; then
        reversed_domain="${parts[$i]}"
    else
        reversed_domain="${reversed_domain}/${parts[$i]}"
    fi
done

etcdctl_command="etcdctl --endpoints=${ENDPOINTS} --cacert=${SSL_CACERT} --cert=${SSL_CERT} --key=${SSL_KEY} del /coredns/$reversed_domain"
echo "${etcdctl_command}"
eval $etcdctl_command
[root@localhost coredns]#
2、执行删除测试
bash 复制代码
[root@localhost coredns]# sh deldomain.sh www.test.com
etcdctl --endpoints=https://etcd-1:2379,https://etcd-2:2379,https://etcd-3:2379 --cacert=/opt/coredns/ssl/ca.pem --cert=/opt/coredns/ssl/etcd.pem --key=/opt/coredns/ssl/etcd-key.pem del /coredns/com/test/www
1
[root@localhost coredns]#
3、再次查询数据库
bash 复制代码
[root@localhost coredns]# ./showdomain.sh 
[root@localhost coredns]#

可见记录已删除。

相关推荐
Omics Pro7 分钟前
~30,000+引用!理论2005,R包2008,多组学集成AI增强
开发语言·数据库·人工智能·算法·机器学习·自然语言处理·r语言
螺蛳粉 螺蛳粉7 分钟前
第一篇:Keepalived 高可用实战:VIP 漂移与 Nginx 主备切换完整指南
运维·nginx·负载均衡·keepalived·高可用
荣合技术服务10 分钟前
VMware ESXi 虚拟化平台服务器虚拟机数据恢复服务
linux·运维·服务器
爱吃香菜的初学者16 分钟前
十三.Linux——信号量
linux·运维·服务器·开发语言
吴声子夜歌26 分钟前
Nginx应用与运维——Nginx在Kubernetes中的应用(三)
运维·nginx·kubernetes
呆萌很30 分钟前
数据库逻辑结构设计
数据库
小小龙学IT32 分钟前
ROS2 安装完全指南(Ubuntu 版):从零开始到跑通第一个节点本文
linux·运维·ubuntu
Ruiery33 分钟前
Linux 6.6内核 CPU 深度解析(十二):SMT 进阶 — core scheduling 与共享算力的负载平衡
linux·运维·服务器
howdoyoudo20260639 分钟前
当新案例冲击旧框架:分类系统的宿命与修正路径
大数据·网络·数据库·人工智能·安全·ai·分类
自己的九又四分之三站台1 小时前
GeoPackage 到底适合什么场景:从 SQLite 容器到空间数据格式选型
数据库·oracle·sqlite