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

打印 上一主题 下一主题

主题 815|帖子 815|积分 2445

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

构建后端为etcd的CoreDNS的容器集群(一)、天生自签名证书
构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像
构建后端为etcd的CoreDNS的容器集群(三)、etcd功能测试
构建后端为etcd的CoreDNS的容器集群(四)、etcd挂载私有自签名证书进行访问测试
构建后端为etcd的CoreDNS的容器集群(五)、coredns对接etcd测试
二、本次使命目标

 coredns对接了etcd数据库,本次尝试编写一段脚本,通过fping命令查抄远端服务器的存活状态,域名假定为www.test.com,ip假定为192.168.1.168,如果ip存活,则查抄etcd数据库有无此记录,没有则添加;如IP不存活,则查抄etcd数据库中有无此记录,有则删除。同时为了克制在网络非常时域名记录被完全清除,在操纵前增长一个对当地网关的查抄,如果fping当地网关不通的时候才扫行域名记录的增、删操纵,如果网关fping非常则不做任何操纵。
三、代码编写

本使命代码如下:
  1. [root@localhost etcd]# cat auto_main_domain.sh
  2. #!/bin/bash  
  3. ##__author__='daigjianbing'
  4. DOMAIN="www.test.com"  
  5. IP="192.168.80.135"  
  6. GATEWAY="192.168.80.135"  
  7. ETCD_KEY="/coredns/com/test/www"  
  8. ETCD_VALUE='{"host":"192.168.80.135","ttl":10}'
  9. ETCD_ENDPOINT="https://etcd-1:2379"  # 根据实际情况调整etcd的端点  
  10. ETCD_CERT="/opt/etcd/ssl/etcd.pem"  # 如果etcd使用了TLS证书,请指定证书路径,否则留空
  11. ETCD_KEY_FILE="/opt/etcd/ssl/etcd-key.pem"  # 如果etcd使用了TLS密钥文件,请指定密钥文件路径,否则留空
  12. ETCD_CACERT="/opt/etcd/ssl/ca.pem"  # 如果etcd使用了CA证书,请指定CA证书路径,否则留空
  13. # 检查本地网关存活状态  
  14. if ! fping -c 1 $GATEWAY &> /dev/null; then  
  15.     echo "Gateway $GATEWAY is not reachable. Skipping further operations."  
  16.     exit 1  
  17. else  
  18.     echo "Gateway $GATEWAY is reachable."  
  19. fi  
  20.   
  21. # 检查IP存活状态  
  22. if fping -c 1 $IP &> /dev/null; then  
  23.     echo "IP $IP is alive."  
  24.       
  25.     # 检查etcd中是否有记录  
  26.     itemcheck=`/opt/etcd/etcdctl --endpoints=$ETCD_ENDPOINT --cert=$ETCD_CERT --key=$ETCD_KEY_FILE --cacert=$ETCD_CACERT get $ETCD_KEY | grep $ETCD_KEY |wc -l`
  27.     if [ ${itemcheck} -eq 0 ]; then  
  28.         echo "Record for $DOMAIN ($IP) does not exist in etcd. Adding..."  
  29.         /opt/etcd/etcdctl --endpoints=$ETCD_ENDPOINT --cert=$ETCD_CERT --key=$ETCD_KEY_FILE --cacert=$ETCD_CACERT put $ETCD_KEY $ETCD_VALUE  
  30.         if [ $? -eq 0 ]; then  
  31.             echo "Record added successfully."  
  32.         else  
  33.             echo "Failed to add record."  
  34.         fi  
  35.     else  
  36.         echo "Record for $DOMAIN ($IP) already exists in etcd."  
  37.     fi  
  38. else  
  39.     echo "IP $IP is not alive."  
  40.       
  41.     # 检查etcd中是否有记录  
  42.     itemcheck=`/opt/etcd/etcdctl --endpoints=$ETCD_ENDPOINT --cert=$ETCD_CERT --key=$ETCD_KEY_FILE --cacert=$ETCD_CACERT get $ETCD_KEY | grep $ETCD_KEY |wc -l`
  43.     if [ $itemcheck -ne 0 ]; then  
  44.         echo "Record for $DOMAIN ($IP) exists in etcd. Deleting..."  
  45.         /opt/etcd/etcdctl --endpoints=$ETCD_ENDPOINT --cert=$ETCD_CERT --key=$ETCD_KEY_FILE --cacert=$ETCD_CACERT del $ETCD_KEY  
  46.         if [ $? -eq 0 ]; then  
  47.             echo "Record deleted successfully."  
  48.         else  
  49.             echo "Failed to delete record."  
  50.         fi  
  51.     else  
  52.         echo "Record for $DOMAIN ($IP) does not exist in etcd."  
  53.     fi  
  54. fi
  55. [root@localhost etcd]#
复制代码
四、IP正常测试

1、清空域名解析数据库记录

  1. [root@localhost etcd]# ./etcdctl --endpoints=https://etcd-1:2379  --cacert ssl/ca.pem --cert ssl/etcd.pem  --key ssl/etcd-key.pem del --prefix "/" 
  2. 3
  3. [root@localhost etcd]# ./etcdctl --endpoints=https://etcd-1:2379  --cacert ssl/ca.pem --cert ssl/etcd.pem  --key ssl/etcd-key.pem get --prefix "/" 
  4. [root@localhost etcd]# 
复制代码
可以看到当前已无域名记录。
2、运行程序

  1. [root@localhost etcd]# sh auto_main_domain.sh   
  2. Gateway 192.168.80.135 is reachable.
  3. IP 192.168.80.135 is alive.
  4. Record for www.test.com (192.168.80.135) does not exist in etcd. Adding...
  5. OK
  6. Record added successfully.
  7. [root@localhost etcd]# ./etcdctl --endpoints=https://etcd-1:2379  --cacert ssl/ca.pem --cert ssl/etcd.pem  --key ssl/etcd-key.pem get --prefix "/"
  8. /coredns/com/test/www
  9. {"host":"192.168.80.135","ttl":10}
复制代码
3、验证解析

  1. [root@localhost etcd]# nslookup www.test.com 127.0.0.1
  2. Server:         127.0.0.1
  3. Address:        127.0.0.1#53
  4. Name:   www.test.com
  5. Address: 192.168.80.135
  6. ** server can't find www.test.com: NXDOMAIN
  7. [root@localhost etcd]#
复制代码
可以看到域名解析正常
四、非常测试

1、测试预备

本次非常测试因测试地点就是本机IP,无法设置不能访问,因此采取仅修改域名对应查抄IP的方式来进行,修改原脚本中的IP值为当前无法访问的ip

 2、实际测试

  1. [root@localhost etcd]# sh auto_main_domain.sh
  2. Gateway 192.168.80.135 is reachable.
  3. IP 192.168.80.136 is not alive.
  4. Record for www.test.com (192.168.80.136) exists in etcd. Deleting...
  5. 1
  6. Record deleted successfully.
  7. [root@localhost etcd]# ./etcdctl --endpoints=https://etcd-1:2379  --cacert ssl/ca.pem --cert ssl/etcd.pem  --key ssl/etcd-key.pem get --prefix "/"
  8. [root@localhost etcd]#
  9. [root@localhost etcd]# nslookup www.test.com 127.0.0.1
  10. Server:         127.0.0.1
  11. Address:        127.0.0.1#53
  12. ** server can't find www.test.com: NXDOMAIN
  13. [root@localhost etcd]#
复制代码
可以看到,相干域名记录已自动删除,解析已无结果。
五、总结

通过上述代码,可以根据后端服务器IP的存活情况对域名进行动态管理,团结单域名多IP,可以实现域名IP智能化分发。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表