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

本文为系列测试文章,拟基于自签名证书认证的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异常则不做任何操作。

三、代码编写

本任务代码如下:

[root@localhost etcd]# cat auto_main_domain.sh 
#!/bin/bash  
##__author__='daigjianbing'

DOMAIN="www.test.com"  
IP="192.168.80.135"  
GATEWAY="192.168.80.135"  
ETCD_KEY="/coredns/com/test/www"  
ETCD_VALUE='{"host":"192.168.80.135","ttl":10}'
ETCD_ENDPOINT="https://etcd-1:2379"  # 根据实际情况调整etcd的端点  
ETCD_CERT="/opt/etcd/ssl/etcd.pem"  # 如果etcd使用了TLS证书,请指定证书路径,否则留空
ETCD_KEY_FILE="/opt/etcd/ssl/etcd-key.pem"  # 如果etcd使用了TLS密钥文件,请指定密钥文件路径,否则留空
ETCD_CACERT="/opt/etcd/ssl/ca.pem"  # 如果etcd使用了CA证书,请指定CA证书路径,否则留空

# 检查本地网关存活状态  
if ! fping -c 1 $GATEWAY &> /dev/null; then  
    echo "Gateway $GATEWAY is not reachable. Skipping further operations."  
    exit 1  
else  
    echo "Gateway $GATEWAY is reachable."  
fi  
  
# 检查IP存活状态  
if fping -c 1 $IP &> /dev/null; then  
    echo "IP $IP is alive."  
      
    # 检查etcd中是否有记录  
    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`
    if [ ${itemcheck} -eq 0 ]; then  
        echo "Record for $DOMAIN ($IP) does not exist in etcd. Adding..."  
        /opt/etcd/etcdctl --endpoints=$ETCD_ENDPOINT --cert=$ETCD_CERT --key=$ETCD_KEY_FILE --cacert=$ETCD_CACERT put $ETCD_KEY $ETCD_VALUE  
        if [ $? -eq 0 ]; then  
            echo "Record added successfully."  
        else  
            echo "Failed to add record."  
        fi  
    else  
        echo "Record for $DOMAIN ($IP) already exists in etcd."  
    fi  
else  
    echo "IP $IP is not alive."  
      
    # 检查etcd中是否有记录  
    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`
    if [ $itemcheck -ne 0 ]; then  
        echo "Record for $DOMAIN ($IP) exists in etcd. Deleting..."  
        /opt/etcd/etcdctl --endpoints=$ETCD_ENDPOINT --cert=$ETCD_CERT --key=$ETCD_KEY_FILE --cacert=$ETCD_CACERT del $ETCD_KEY  
        if [ $? -eq 0 ]; then  
            echo "Record deleted successfully."  
        else  
            echo "Failed to delete record."  
        fi  
    else  
        echo "Record for $DOMAIN ($IP) does not exist in etcd."  
    fi  
fi
[root@localhost etcd]# 

四、IP正常测试

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 "/" 
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 "/" 
[root@localhost etcd]# 

可以看到当前已无域名记录。

2、运行程序
[root@localhost etcd]# sh auto_main_domain.sh   
Gateway 192.168.80.135 is reachable.
IP 192.168.80.135 is alive.
Record for www.test.com (192.168.80.135) does not exist in etcd. Adding...
OK
Record added successfully.
[root@localhost etcd]# ./etcdctl --endpoints=https://etcd-1:2379  --cacert ssl/ca.pem --cert ssl/etcd.pem  --key ssl/etcd-key.pem get --prefix "/" 
/coredns/com/test/www
{"host":"192.168.80.135","ttl":10}
3、验证解析
[root@localhost etcd]# nslookup www.test.com 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   www.test.com
Address: 192.168.80.135
** server can't find www.test.com: NXDOMAIN

[root@localhost etcd]# 

可以看到域名解析正常

四、异常测试

1、测试准备

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

 2、实际测试
[root@localhost etcd]# sh auto_main_domain.sh 
Gateway 192.168.80.135 is reachable.
IP 192.168.80.136 is not alive.
Record for www.test.com (192.168.80.136) exists in etcd. Deleting...
1
Record deleted successfully.

[root@localhost etcd]# ./etcdctl --endpoints=https://etcd-1:2379  --cacert ssl/ca.pem --cert ssl/etcd.pem  --key ssl/etcd-key.pem get --prefix "/" 
[root@localhost etcd]#
[root@localhost etcd]# nslookup www.test.com 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

** server can't find www.test.com: NXDOMAIN

[root@localhost etcd]# 

可以看到,相关域名记录已自动删除,解析已无结果。

五、总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux C接口编程入门之ioctl操作

ioctl函数用于系统调用操作特殊文件的底层设备参数。例如终端的许多操作特性可以用ioctl()请求来控制。不能用于read()、write()、open()、close()函数表示的I/O操作通常都能用ioctl表示。 fd参数为某个设备或文件已打开的文件描述符; request参数指定了将在fd上执…

大数据测试:Charles修改响应数据

上一篇大数据测试:Fiddler修改响应数据-CSDN博客 ,有同学反馈有没有Charles的方式修改响应数据,本篇就是Charles修改数据操作步骤,相比较fiddler,Charles相对简单,便捷,我很喜欢 1、背景&…

web网页---新浪网页面

代码&#xff1a; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>新浪网</title> </head> <style>ul.menu > li{list-style: none; } …

DC系列靶机-DC6

一&#xff0c;环境的搭建 VM17 官网下载 kali 2023.4版 https://mirrors.tuna.tsinghua.edu.cn/kali-images/kali-2023.4/ 靶场文件 https://download.vulnhub.com/dc/DC-5.zip 二&#xff0c;攻略 首先进行主机发现&#xff1b; 接下来进行端口扫描&#xff1b; 开放了2…

手撕数据结构 —— 栈(C语言讲解)

目录 1.认识栈 什么是栈 栈的示意图 2.如何实现栈 3.栈的实现 Stack.h中接口总览 具体实现 结构的定义 初始化栈 销毁栈 入栈 出栈 取栈顶元素 获取有效元素的个数 判断栈是否为空 4.完整代码附录 Stack.h Stack.c 1.认识栈 什么是栈 栈是一种特殊的线性表…

CSS面试真题 part2

CSS面试真题 part2 11、css3新增了哪些新特性&#xff1f;12、css3动画有哪些&#xff1f;13、介绍一下grid网格布局14、说说flexbox&#xff08;弹性盒布局模型&#xff09;&#xff0c;以及使用场景&#xff1f;15、说说设备像素、css像素、设备独立像素、dpr、ppi之间的区别…

详解mac系统通过brew安装mongodb与使用

本文目录 一、通过brew安装MongoDB二、mongodb使用示例1、启动数据库2、创建/删除数据库3、创建/删除集合 三、MongoDB基本概念1&#xff09;数据库 (database)2&#xff09;集合 &#xff08;collection&#xff09;3) 文档&#xff08;document&#xff09;4&#xff09;mong…

WPFDeveloper正式版发布

WPFDeveloper WPFDeveloper一个基于WPF自定义高级控件的WPF开发人员UI库&#xff0c;它提供了众多的自定义控件。 该项目的创建者和主要维护者是现役微软MVP 闫驚鏵: https://github.com/yanjinhuagood 该项目还有众多的维护者&#xff0c;详情可以访问github上的README&…

快速创建一个vue项目并运行

前期准备工作: 1.安装node 2.安装npm 3.设置淘宝镜像 4.全局安装webpack 5.webpack 4.X 开始&#xff0c;需要安装 webpack-cli 依赖 6.全局安装vue-cli 正文开始: 1.创建项目 ,回车 vue init webpack vue-svg > Project name vue-demo 项目名称 回车 > Pro…

MySQL-事务Transaction详解

文章目录 事务概述事务基本概念事务四大特性(ACID)演示MySQL事务手动开启事务MySQL默认事务机制 事务的隔离级别隔离级别基本概述三种现象脏读不可重复读幻读 查看和设置隔离级别四种隔离级别及演示读未提交(read uncommitted)读提交(read committed)可重复读(repeatable read)…

【K8s】Kubernetes 词汇表

微思网络 厦门微思网络 K8S认证工程师&#xff08;CKA&#xff09;备考与学习指南https://mp.weixin.qq.com/s/XsEVpU7dKnJDBopynWW3GQ K8S-CKA课程试听:Container 概述 词汇表 此术语表旨在提供 Kubernetes 术语的完整、标准列表。其中包含特定于 Kubernetes 的技术术语以及…

为了避免下一次重大中断,我们需要持续测试

自去年 7 月CrowdStrike/Microsoft大规模中断以来的几个月里&#xff0c;我们了解到了很多问题所在。一家大型网络安全提供商为其广泛部署的企业端点保护产品推出了一个有缺陷的更新。尽管&#xff08;错误地&#xff09;批准发布&#xff0c;但该更新导致全球的 Windows 系统崩…

力扣 143.重排链表【详细手写】

一、题目 前置题目 力扣 206.反转链表 力扣 876. 链表的中间结点 二、思路 观察链表发现链表是部分有序&#xff0c;奇数位置的节点组成前半段的原链表&#xff0c;偶数位置的节点组成后半段的反转链表。因此&#xff0c;首先需要找到中间节点&#xff08;力扣 876. 链表的…

harmonyOS next之实现时间打卡定时器

需求&#xff1a;实现一个时间打卡签到按钮。 实现方法&#xff1a;每隔一秒钟获取一下当前时间。 实现代码如下&#xff1a; Column(){Text(this.curTime).fontColor(#FFFFFF).fontWeight(600).fontSize(32vp)Text(上班打卡).fontColor(#FFFFFF) } .width(170vp) .height(170…

使用ROS资源编排一键部署LNMP建站环境,手动整理教程

LNMP是目前主流的网站服务器架构之一&#xff0c;适合运行大型和高并发的网站应用&#xff0c;例如电子商务网站、社交网络、内容管理系统等。LNMP分别代表Linux、Nginx、MySQL和PHP。本文阿里云服务器网aliyunfuwuqi.com介绍如何使用阿里云资源编排服务&#xff08;ROS&#x…

桂林旅游一点通:SpringBoot平台应用

3系统分析 3.1可行性分析 通过对本桂林旅游景点导游平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本桂林旅游景点导游平台采用SSM框架&#xff0c;JAVA作…

smbms(2)

目录 一、修改密码功能实现 二、优化密码修改&#xff0c;加入旧密码确认环节【使用Ajax】 三、用户管理实现 获取用户数量 获取用户列表 获取角色列表 Servlet 一、修改密码功能实现 1、导入前端素材 2、UserDao接口 3、UserDaoImpl实现类 4、UserService接口 5、Us…

第10篇:防火墙与入侵检测系统

目录 引言 10.1 防火墙的基本概念 10.2 防火墙的分类 10.3 防火墙策略的配置与实现 10.4 入侵检测系统&#xff08;IDS&#xff09; 10.5 防火墙与IDS的结合 10.6 总结 第10篇&#xff1a;防火墙与入侵检测系统 引言 在当今的数字世界中&#xff0c;网络安全已经成为企…

【FreeRL】PPO的复刻和7个trick实现

文章目录 前言一、计算优势函数二、比较buffer的存储三、小批量更新网络的实现中四、细节GAE的实现五、对于PPO必须收敛的关键为V_target的定义六、参数敏感七、仿照《动手学强化学习中的代码》实现八、补充tricks的效果 前言 主要是对PPO论文里的PPO复刻&#xff0c;和实现时…

安卓流式布局实现记录

效果图&#xff1a; 1、导入第三方控件 implementation com.google.android:flexbox:1.1.0 2、布局中使用 <com.google.android.flexbox.FlexboxLayoutandroid:id"id/baggageFl"android:layout_width"match_parent"android:layout_height"wrap_co…