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

news2024/11/25 12:29:41

本文为系列测试文章,拟基于自签名证书认证的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智能化分发。

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

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

相关文章

pytorch训练和使用resnet

pytorch训练和使用resnet 使用 CIFAR-10数据集 训练 resnet resnet-train.py import torch import torchvision import torchvision.transforms as transforms import torch.nn as nn import torch.optim as optim# 在CIFAR-10数据集中 # 训练集:包含50000张图像…

城市极客,存内先锋-存内社区主理人招募令

在这个数据驱动的时代,存内计算正成为推动技术革新的核心力量。 我们,存内计算社区,正站在这场革命的前沿,现在,我们正式发出召集令,寻找那些渴望引领技术浪潮的城市站主理人! 地点&#xff1a…

使用LangChain进行LLM应用开发(1)——了解LangChain

【课程链接】https://www.ai360labs.com/playground/course/66813572135124992/detail 【适用人群】 入门学习Langchain的同学轻体验ChatOpenAI的同学,平台提供Api-key,应该是很小的token额度,仅供练习 LangChain是一个开源框架&#xff0c…

【机器学习基础】全连接层

1. 定义: 每一个节点都跟其后面所有的神经元相连两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部也就是跟传统的神经网络神经元的连接方式是一样的 2. 作用: 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、…

使用 NCC 和 PKG 打包 Node.js 项目为可执行文件(Linux ,macOS,Windows)

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 文章引言 步骤 1:…

linux:线程id及线程互斥

线程的tid不像进程&#xff0c;那不是他真正的id&#xff0c;也不是内核的lwp&#xff0c;而是由pthread库维护的一个唯一值 给用户提供的线程ID&#xff0c;不是内核中的lwp&#xff0c;而是pthread库维护的一个唯一值 库内部也要承担对线程的管理 #include<stdio.h>…

2024青龙面板京东教程

一、接上文《2024最新青龙面板安装教程》 腾讯云轻量服务器2核2G4M&#xff0c;只要79一年&#xff0c;可续费一次。 购买地址&#xff1a;https://curl.qcloud.com/LpLkvjq1 二、拉库 拉库前请打开青龙面板-配置文件 第18行 GithubProxyUrl“” 双引号中的内容清空 复制以…

代理 IP 对于鸿蒙开发者的意义与帮助

华为推出的鸿蒙操作系统以其独特的分布式架构和强大的性能&#xff0c;吸引了众多开发者的目光。而在鸿蒙开发的过程中&#xff0c;代理 IP 技术也发挥着重要的作用&#xff0c;为开发者带来了诸多意义与帮助。 一、提供更广泛的测试环境 对于鸿蒙开发者来说&#xff0c;确保应…

高效数据集成:聚水潭采购入库单与金蝶云星空

聚水潭采购入库单与金蝶云星空的高效数据集成案例分享 在企业日常运营中&#xff0c;采购入库单的数据处理和管理是至关重要的一环。为了实现聚水潭采购入库单到金蝶云星空的无缝对接&#xff0c;我们采用了轻易云数据集成平台&#xff0c;成功配置并运行了“聚水潭采购入库单…

钉钉录播抓取视频

爬取钉钉视频 免责声明 此脚本仅供学习参考&#xff0c;切勿违法使用下载他人资源进行售卖&#xff0c;本人不但任何责任! 仓库地址: GItee 源码仓库 执行顺序 poxyM3u8开启代理getM3u8url用于获取m3u8文件userAgent随机请求头downVideo|downVideoThreadTqdm单线程下载和…

荣耀MagicOS 9.0发布会及开发者大会丨一图读懂应用服务及商业合作分论坛

更多优质流量变现服务&#xff0c;可点击荣耀广告变现服务查看&#xff1b; 荣耀远航计划——应用市场【耀闪行动】全新上线&#xff0c;更多激励及资源扶持可点击荣耀应用市场耀闪行动查看。

Zookeeper实战 集群环境部署

1、概述 今天我们来学习一下Zookeeper集群相关的内容&#xff0c;本文主要的内容有集群环境的搭建&#xff0c;集群常见的问题和对应的解决方案。 2、集群环境搭建 2.1、准备工作 首先我们准备好安装包&#xff0c;创建好集群部署的路径。将解压后的安装文件复制三分。这里…

水轮发电机油压自动化控制系统解决方案介绍

在现代水电工程中&#xff0c;水轮机组油压自动化控制系统&#xff0c;不仅直接关系到水轮发电机组的安全稳定运行&#xff0c;还影响着整个水电站的生产效率和经济效益。 一、系统概述 国科JSF油压自动控制系统&#xff0c;适用于水轮发电机组调速器油压及主阀&#xff08;蝶…

【功能安全】 独立于环境的安全要素SEooC

目录 01 SEooC定义 02 SEooC开发步骤 03 SEooC开发示例 04 SEooC问答 01 SEooC定义 缩写: SEooC:Safety Element out of Context独立于环境的安全要素 SEooC出处:GB/T34590.10—2022,第9章节 SEooC与相关项什么关系? SEooC可以是系统、系统组合、子系统、软件组件、…

【Unity】游戏UI中添加粒子特效导致穿层问题的解决

这里介绍一下简易的ui系统中&#xff0c;添加粒子特效导致的穿层问题 首先是在ui界面中添加粒子特效预制体&#xff0c;这个时候&#xff0c;控制这个粒子显示层级的有两个方面 上图中&#xff0c;如果你的Sorting Layer ID的值&#xff08;Layer排序&#xff09;是大于当前C…

安康旅游指南:基于SpringBoot的网站开发实践

第一章 绪论 1.1 研究现状 时代的发展&#xff0c;我们迎来了数字化信息时代&#xff0c;它正在渐渐的改变着人们的工作、学习以及娱乐方式。计算机网络&#xff0c;Internet扮演着越来越重要的角色&#xff0c;人们已经离不开网络了&#xff0c;大量的图片、文字、视频冲击着我…

可视化大屏的C位放啥(04):园区鸟瞰图,方寸之间显示海量数据

在可视化大屏的 C 位放置园区鸟瞰图&#xff0c;可谓独具匠心。 鸟瞰图以宏观视角呈现整个园区风貌&#xff0c;让人一眼便对园区布局有清晰认知。同时&#xff0c;通过巧妙的设计&#xff0c;可在这方寸之间展示海量数据。 如园区内各企业的生产数据、能耗情况、人员流动等信…

【学习笔记】强化学习

李宏毅深度强化学习 笔记 课程主页&#xff1a;NTU-MLDS18 视频&#xff1a;youtube B站 参考资料&#xff1a; 作业代码参考 纯numpy实现非Deep的RL算法 OpenAI tutorial 文章目录 李宏毅深度强化学习 笔记1. Introduction2. Policy Gradient2.1 Origin Policy Gradient2.2…

Matlab 车牌识别技术

1.1设计内容及要求&#xff1a; 课题研究的主要内容是对数码相机拍摄的车牌&#xff0c;进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发&#xff0c;涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。 图1-1系统总…

【问题解决】Flink在linux上运行成功但是无法访问webUI界面

一&#xff0c;问题 在搭建Flink的时候&#xff0c;已经在linux服务器上运行了./start-cluster.sh&#xff0c; 而且日志显示已经成功了。 服务器上也没有开启防火墙 正常来说应该能通过ip:8081来访问(8081是Flink WebUI的默认端口)&#xff0c;但是访问的时候&#xff0c;显示…