Prometheus+Grafana构建云原生分布式监控系统(十二)_基于DNS的服务发现

Prometheus+Grafana构建云原生分布式监控系统(十一)_基于consul的服务发现https://blog.csdn.net/xiaochenXIHUA/article/details/157464459

Prometheus+Grafana构建云原生分布式监控系统(十)_prometheus的服务发现机制https://blog.csdn.net/xiaochenXIHUA/article/details/157427758?spm=1001.2014.3001.5501

一、在Linux上搭建自己的DNS服务

域名系统https://blog.csdn.net/xiaochenXIHUA/article/details/121318900

1.1、使用Linux搭建自己的DNS服务器准备

|--------|---------------|-------------------------------------------------------------------------|
| 序号 | 准备内容 | 说明 |
| 1 | 服务器系统 | 【本文使用 Almalinux9.3】 红帽系Linux系统(如:Redhat、Rocky、Almalinux等) |
| 2 | 服务器IP | 【本文使用 192.168.1.38】 必须是静态IP,用以避免IP变化导致DNS失效。 |
| 3 | 域名 | 【本文使用 coffeemilk.com】 域名可以自定义(一般使用公司或组织名称) |
| **正向解析(是指从域名映射IP)**如:www.coffeemilk.com--->192.168.1.38。 反向解析 (是指从IP映射域名)如:192.168.1.38--->www.coffeemilk.com。 |||
| |||
| 序号 | 要求 | 说明 |
| 1 | 权限 | 必须拥有超级管理员root权限(root或sudo) |
| 2 | 防火墙端口 | 必须放开防火墙的(UDP/TCP 53)端口; 若是红帽系系统需要关闭SeLinux(避免权限拦截【测试环境可以关闭,生成环境建议配置规则】) |
| 3 | 禁用系统自带的 DNS缓存 | 如systemd-resolved |
[使用Linux搭建自己的DNS服务器准备]

1.2、Linux下主流的DNS服务器软件简介

|--------|------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | DNS服务器软件 | 说明 |
| 1 | Berkeley Internet Name Domain | 简称BIND;是使用时间最久、最广泛的完整且高度可移植的域名系统(DNS)协议实现工具, (可作为权威解析、递归解析器、DNS转发器,或三者同时使用) 【适合专业、企业场景(首选)】。 |
| 2 | Dnsmasq | 是轻量级的域名系统(DNS)工具,为小型网络提供网络基础设施:域名系统(DNS)、动态主机配置协议(DHCP)、路由器通告和网络引导。 【适合资源有限的路由器、防火墙、边缘设备。它也被广泛使用用于智能手机和便携热点的网络共享,以及支持虚拟化框架中的虚拟网络】 |
| 3 | Unbound | 是一个具有验证、递归与缓存功能的域名系统(DNS)解析器,注重安全。 【适合作为递归解析器】 |
| 4 | PowerDNS | 是一款用 C++ 编写并遵循 GPL 许可的 DNS 服务器。PowerDNS 拥有大量的不同后端,从简单的 BIND 风格的区域文件到关系数据库(如:PostgreSQL、MySQL 和 SQLite)和负载均衡/故障转移算法。 【适合适合大规模或动态 DNS 场景】 |
[Linux下主流的DNS服务器软件]

1.3、使用BIND搭建DNS主服务器

本文以BIND(Berkeley Internet Name Domain)为例进行安装操作(这是因为其不仅使用广泛、专业、更重要的是生态成熟且文档丰富)。

|--------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | BIND的核心组件 | 说明 |
| 1 | named | 是BIND的主服务进程,负责处理DNS查询请求。 |
| 2 | 配置文件 | 定义服务行为、区域规则与资源记录: 《1》【/etc/named.conf】主配置文件; 《2》【/etc/named.conf.options】全局选项(如监听地址、转发器、安全策略); 《3》【/etc/named.rfc1912.zones】区域配置(定义正向、反向解析区域); 《4》【/var/named/*.zone】区域数据文件(存储域名与IP映射关系)。 |
| 3 | 解析库 | libdns(DNS协议处理); libisc(基础网络通信);等底层库。 |
[BIND(Berkeley Internet Name Domain)的核心组件]

1.3.1、安装BIND相关软件并修改核心配置

bash 复制代码
#在红帽系Almalinux9.3上使用BIND(Berkeley Internet Name Domain)搭建DNS服务器

#1-安装BIND的相关软件包
dnf install -y bind bind-utils bind-libs

#2-放开防火墙的UDP/TCP 53端口
firewall-cmd --list-all
firewall-cmd --add-port=53/tcp --add-port=53/udp --permanent
firewall-cmd --reload
firewall-cmd --list-all

#3-关闭selinux
#临时关闭
setenforce 0
#永久关闭,重启后生效
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config


#4-修改BIND的核心配置文件【/etc/named.conf】
vim /etc/named.conf
#【/etc/named.conf】文件的修改内容如下:
#4.1-监听地址:改为any(允许所有IPV4网卡,生产环境建议限制为部署了该BIND软件的服务器固定IP【如:192.168.1.38】),默认127.0.0.1仅本地访问(若无需ipv6则直接注释)
listen-on port 53 { 192.168.1.38; };
//listen-on-v6 port 53 { ::1; };
#4.2-允许查询的客户端IP范围:改为any(允许所有客户端);若改为192.168.1.0/24(表示限制内网访问),默认localhost
allow-query     { any; };
#4.3-转发器(当本地没有解析记录时,转发到其他DNS服务器(如:114.114.114.114、8.8.8.8、223.5.5.5))
forwarders {223.5.5.5}
#4.4-是否允许递归查询(权威DNS通常禁用;缓存DNS会启用)
recursion yes

#5-修改BIND核心配置文件完成后需要验证(若无任何输出则表示配置正确,否则就需要根据提示修改)
named-checkconf

1.3.2、配置区域正向解析(域名--->IP)

正向解析将域名映射为 IP 地址(这里以域名:coffeemilk为例配置):

bash 复制代码
#正向区域解析(域名映射IP)

#1-打开区域解析文件【添加域名语句块】
vim /etc/named.rfc1912.zones 
#1.1在【/etc/named.rfc1912.zones】文件末尾添加需要解析的域名(如:coffeemilk.com)
//正向解析区域:coffeemilk.com
zone "coffeemilk.com" IN {
        type master;    //当前服务器为主DNS服务器
        file "coffeemilk.com.zone";  //域名解析记录文件,记录着根域名的解析,file文件默认存放在/var/named/
目录中
        allow-update { none; }; //禁止动态更新

};


#2-配置域名(如:coffeemilk)的正向解析记录文件
cd /var/named/
cp -p named.localhost coffeemilk.com.zone
vim ./coffeemilk.com.zone
#【/var/named/coffeemilk.com.zone】文件的完整内容及其参数说明
$TTL 1D ;生成时间(默认是1天)
@       IN SOA  coffeemilk.com. admin.coffeemilk.com. ( admin.coffeemilk.com. (;@表示当前域名【coffeemilk.com】 SOA表示起始授权记录,是区域核心标识 admin.coffeemilk.com.表示管理员邮箱admin@coffeemilk.com,用来接收DNS相关邮件通
                                        2026012901      ; serial        配置文件修改的版本,每次修改后+1
                                        1D              ; refresh       刷新时间(默认是1天)
                                        1H              ; retry         更新失败后的重试时间周期(默认是1小时)
                                        1W              ; expire        无法更新时的失效周期
                                        3H )            ; minimum       缓存服务器无法更新时的失效时间
        NS      dns.coffeemilk.com.     ;本域的DNS服务器名称
dns     A       192.168.1.38            ;dns.coffeemilk.com映射的IP是192.168.1.38
www     A       192.168.1.2             ;www.coffeemilk.com映射的IP是192.168.1.2
grafana A       192.168.1.39            ;grafana.coffeemilk.com映射的IP是192.168.1.39


#3-配置的域名正向解析记录文件的检查(语法:named-checkzone 域名 /var/named/域名.zone )
named-checkconf -z /etc/named.conf
named-checkzone coffeemilk.com /var/named/coffeemilk.com.zone 

#4-检查无误后则可重启named服务(可查看named服务状态、设置开启自启、进程信息)
systemctl restart named
systemctl status named
systemctl enable named.service
ps -ef | grep named

1.3.3、配置区域反向解析(IP--->域名)

反向解析是将IP地址映射为域名(常用于邮件服务器反垃圾邮件验证、安全审计、网路管理及其验证IP地址归属等方面);这里以:192.168.1.0/24网段为例:

bash 复制代码
#反向区域解析(IP映射域名)

#1-打开区域解析文件【添加IP段语句块】
vim /etc/named.rfc1912.zones 
#1.1在【/etc/named.rfc1912.zones】文件末尾添加需要反向解析的IP段(如:192.168.1.0/24)
//反向解析区域:IP段是192.168.1.0/24(格式:反向写IP段,去掉最后一位,加上in-addr.arpa)
zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.1.zone";
        allow-update { none; };

};

#2-配置域名(如:coffeemilk)的正向解析记录文件
cd /var/named/
cp -p named.localhost 192.168.1.zone
vim ./192.168.1.zone
#【/var/named/192.168.1.zone】文件的完整内容及其参数说明
$TTL 1D
@       IN SOA  coffeemilk.com. admin.coffeemilk.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry 
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.coffeemilk.com.
38      PTR     dns.coffeemilk.com.     ;192.168.1.38--->dns.coffeemilk.com
2       PTR     www.coffeemilk.com.     ;192.168.1.2--->www.coffeemilk.com
39      PTR     grafana.coffeemilk.com. ;192.168.1.39--->grafana.coffeemilk.com


#3-配置的域名反向解析记录文件的检查(语法:named-checkzone 反向IP段 /var/named/ip段.zone )
named-checkconf -z /etc/named.conf
named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.zone

#4-检查无误后则可重启named服务(可查看named服务状态、设置开启自启、进程信息)
systemctl restart named
systemctl status named
systemctl enable named.service
ps -ef | grep named

1.3.4、DNS服务器测试

测试DNS服务器必须在客户端机器(即:同一局域网,非 DNS 服务器本身)进行,步骤是:

《1》将客户端的 DNS 服务器指向搭建的 DNS IP(192.168.1.38);

《2》使用nslookup/dig测试解析。

bash 复制代码
#DNS服务器测试

#1-将客户端的 DNS 服务器指向搭建的 DNS IP(192.168.1.38)
#1.1-windows系统则是打开【控制面板\网络和 Internet\网络和共享中心\更改适配器设置\选中网卡(如:以太网)后点击鼠标右键-->属性-->Internet协议版本4(TCP/IPv4)-->属性-->使用下面的DNS服务器地址-->输入DNSIP(192.168.1.38)】
#1.2-linux系统是执行如下命令修改:
nmcli c show
nmcli c modify ens33 ipv4.dns "192.168.1.38"
nmcli c modify ens33 ipv4.ignore-auto-dns yes
nmcli c down ens33 && nmcli c up ens33
cat /etc/resolv.conf


#2-正向解析DNS服务器测试(即:域名→IP 是否为我们设置的域名与IP对应上,一致则表示成功,否则失败;若要排查错误则可以使用【dig】命令替换【nslookup】即可)
nslookup dns.coffeemilk.com
nslookup www.coffeemilk.com
nslookup grafana.coffeemilk.com


#3-测试反向解析DNS服务器测试(即:IP→域名 是否为我们设置的域名与IP对应上,一致则表示成功,否则失败;若要排查错误则可以使用【dig -x】命令替换【nslookup】即可)
nslookup 192.168.1.38
nslookup 192.168.1.39
nslookup 192.168.1.2

到这里,恭喜你,搭建并测试DNS主服务器成功!

1.4、使用BIND搭建DNS从服务器(主从同步)【可选】

这里使用BIND搭建DNS从服务器,主要是为了应对主 DNS 服务器故障时,从 DNS 可提供解析,提高可用性。搭建DNS从服务器的方法如下:

《1》从服务器安装 BIND,修改named.conf允许主服务器区域传输;

《2》主服务器named.conf的区域声明中添加allow-transfer { 从服务器IP; };

《3》从服务器named.conf的区域声明中,type改为slave,添加masters { 主服务器IP; };file为同步后的解析文件路径。

1.5、使用BIND搭建DNS缓存服务器【可选】

DNS缓存服务器仅做缓存,不做本地解析,适合局域网加速 DNS 查询。搭建DNS缓存服务器的方法如下:

《1》修改named.conf,关闭区域声明,开启forwarders(转发器,指向公网 DNS 如 223.5.5.5);

《2》配置allow-query { any; };,其余保持默认。

1.6、配置 MX 记录(邮件服务器解析)【可选】

配置MX记录,只需要在正向解析文件中添加 MX 记录,指定邮件服务器。操作方法如下:

bash 复制代码
test.com.  IN  MX 10 mail.test.com.  ; 主邮件服务器,MX记录,优先级10(数字越小优先级越高)
mail       IN  A   192.168.1.202     ; 主邮件服务器IP

test.com.  IN  MX 20  mail2.test.com.; 备用邮件服务器,优先级20
mail2       IN  A   192.168.1.203    ; 备邮件服务器IP

MX 记录(Mail Exchanger Record,邮件交换记录)是 DNS 域名解析中的核心记录类型之一,专门用于指定负责接收某个域名邮件的邮件服务器,简单说就是告诉全网的邮件系统:发给xxx@你的域名的邮件,该送到哪台服务器上

如果没有配置 MX 记录,外部邮件服务器(比如 QQ 邮箱、163 邮箱)向你的域名邮箱发信时,会因找不到投递目标 而直接拒收,最终导致你的域名邮箱无法收到任何外部邮件,这也是搭建自建邮件服务器 / 使用企业域名邮箱的必备 DNS 配置

二、在DNS系统配置基于DNS发现的内容

2.1、服务记录(SRV)介绍

服务记录(Service Record 简称:SRV),是DNS系统中的一种资源记录类型。它的作用是:将网络服务于对应的服务器地址、端口和优先级关联起来,让客户端可以自动发现并连接到提供特定服务的服务器。

也就是说,普通的A记录只记录域名对应的IP地址,而SRV记录可以进一步告诉客户端:这个域名提供的某类服务(如:FTP、sync等服务)运行在哪个IP、哪个端口,以及多个服务器之间的优先级和权重。

|--------|----------------|-------------------------------------------------------------|
| bash #SRV记录的完整格式如下: _service._protocol.name. TTL class SRV priority weight port target. #SRV记录示例: _prometheus._tcp.coffeemilk.com. 1H IN SRV 10 10 9100 node.coffeemilk.com. _prometheus._tcp.coffeemilk.com. 1H IN SRV 20 10 9100 node1.coffeemilk.com. _grafana._tcp.coffeemilk.com. 1H IN SRV 10 10 3000 grafana.coffeemilk.com. |||
| 序号 | SRV记录中各个字段 | 说明 |
| 1 | _service | 必须以下划线开头,代表服务类型 (如:_grafana、_prometheus、_db等) |
| 2 | _protocol | 必须以下划线开头,代表传输协议 (通常是:_tcp、_udp) |
| 3 | name | 需绑定该服务的域名 (如:coffeemilk.com) |
| 4 | TTL | 生存时间,DNS缓存的有效期 (如:3600就是1个小时) |
| 5 | class | 记录类别,几乎都是IN(Internet) |
| 6 | priority | 优先级(0-65535),数值越小优先级越高,客户端会优先连接优先级高的服务器 |
| 7 | weight | 权重(0-65535),当多个服务器优先级相同时,按权重比例分配流量,权重越高被选中的概率越大。 |
| 8 | port | 服务运行的端口号 (如:node-exporter的是9100、grafana的是3000) |
| 9 | target | 提供服务的服务器域名(必须以点【.】结尾),且域名需要有对应的A/AAAA记录 (如:coffeemilk.com.) |
[SRV记录的格式解析]

2.2、在自建的DNS系统正向区域解析文件中配置基于DNS发现的内容

在自建的DNS系统中的正向区域解析文件中配置基于DNS发现的prometheus内容(即:A记录与SRV)。

bash 复制代码
#在正向区域解析文件中配置基于DNS发现的内容

#1-进入DNS系统的区域配置文件路径
cd /var/named/
vim coffeemilk.com.zone
#【/var/named/coffeemilk.com.zone】文件的完整内容如下(添加了基于DNS发现的A记录与SRV内容)
@       IN SOA  coffeemilk.com. admin.coffeemilk.com. (;@表示当前域名【coffeemilk.com】 SOA表示起始授权记录,是区域核心标识 admin.coffeemilk.com.表示管理员邮箱admin@coffeemilk.com,用来接收DNS相关邮件>通知
                                        2026012902      ; serial        配置文件修改的版本,每次修改后+1
                                        1D              ; refresh       刷新时间(默认是1天)
                                        1H              ; retry         更新失败后的重试时间周期(默认是1小时)
                                        1W              ; expire        无法更新时的失效周期
                                        3H )            ; minimum       缓存服务器无法更新时的失效时间
        NS      dns.coffeemilk.com.     ;本域的DNS服务器名称
dns     A       192.168.1.38            ;dns.coffeemilk.com映射的IP是192.168.38
www     A       192.168.1.2             ;www.coffeemilk.com映射的IP是192.168.1.2
grafana A       192.168.1.39            ;grafana.coffeemilk.com映射的IP是192.168.1.39
node    A       192.168.1.39            ;node.coffeemilk.com--->192.168.1.39
node1   A       192.168.1.36            ;node1.coffeemilk.com--->192.168.1.36

_prometheus._tcp.coffeemilk.com. 1H IN SRV 10 10 9100 node.coffeemilk.com.
_prometheus._tcp.coffeemilk.com. 1H IN SRV 20 10 9100 node1.coffeemilk.com.
_grafana._tcp.coffeemilk.com. 1H IN SRV 10 10 3000 grafana.coffeemilk.com.


#2-验证该正向的区域解析文件配置的内容是否语法正确(显示OK则表示正确,否则根据提示检查修改)
named-checkzone coffeemilk.com /var/named/coffeemilk.com.zone


#3-在客户端(非DNS系统服务器上进行测试验证)
nslookup
server DNS系统所在服务器IP(如:192.168.1.38)
#3.1-直接输入对应的域名后按下Enter键查看域名对应的IP是否与我们在DNS系统中配置的一致,一致则表示正确
node.coffeemilk.com
node1.coffeemilk.com
grafana.coffeemilk.com

#3.2-查看DNS系统中对应的SRV记录(显示结果与我们在DNS系统中配置的一致则表示正确)
set type=srv
_prometheus._tcp.coffeemilk.com.
_grafana._tcp.coffeemilk.com

2.3、也可在服务商提供的域名服务配置DNS发现的内容

注意:若要在国内服务商(如:阿里云、华为云)提供的域名服务里面配置DNS发现的内容,则使用的域名必须在工信部网站备案通过。如下是使用阿里云的域名解析服务进行SRV配置DNS发现的内容:进入域名解析控制台-->【解析配置】-->【添加记录】-->选择记录类型为【SRV-记录提供特定的服务的服务器】-->【主机记录里面(配置上对应的SRV的_service._protocol)】-->【记录值里面配置上SRV的priority weight port target.】最后点击底部的【确定】按钮后等待10分钟就可以使用了。

三、在prometheus上配置基于DNS的服务发现

3.1、prometheus所在服务器的DNS修改为DNS系统的IP

需要在prometheus server所在的服务器修改DNS为我们配置了需检测服务的DNS系统的IP(如:192.168.1.38)。

bash 复制代码
#1-将客户端的 DNS 服务器指向搭建的 DNS IP(192.168.1.38)
#1.1-windows系统则是打开【控制面板\网络和 Internet\网络和共享中心\更改适配器设置\选中网卡(如:以太网)后点击鼠标右键-->属性-->Internet协议版本4(TCP/IPv4)-->属性-->使用下面的DNS服务器地址-->输入DNSIP(192.168.1.38)】
#1.2-linux系统是执行如下命令修改:
nmcli c show
nmcli c modify ens33 ipv4.dns "192.168.1.38"
nmcli c modify ens33 ipv4.ignore-auto-dns yes
nmcli c down ens33 && nmcli c up ens33
cat /etc/resolv.conf

3.2、修改prometheus的配置文件---实现基于DNS自动发现

bash 复制代码
#修改prometheus的配置文件---实现基于DNS自动发现

#1-打开prometheus的配置文件
cd /usr/local/prometheus-3.5.0/
vim prometheus.yml

#2-【prometheus.yml】文件末尾的【scrape_configs:】下新增基于DNS发现的配置
  - job_name: "dns-server-monitor"
    dns_sd_configs:
      - names: ["_prometheus._tcp.coffeemilk.com"]

#3-#验证修改后的prometheus.yml文件的语法是否正确(结果显示SUCCESS则表示正确)
./promtool check config prometheus.yml
 
#4-验证prometheus.yml文件中的语法正确后热重载让配置生效
curl -XPOST localhost:9090/-/reload

#5-打开浏览器进入Prometheus Server的Web界面【IP:9090】查看【Status-->Target health】即可看到添加的【dns-server-monitor】节点下的对应地址及其状态【up】表示在线【down】表示离线。

到这里,恭喜你,在prometheus中基于DNS服务自动发现配置成功了。

相关推荐
七夜zippoe6 小时前
Docker容器化Python应用最佳实践:从镜像优化到安全防护
python·docker·云原生·eureka·容器化
灰子学技术7 小时前
istio从0到1:产品落地过程的问题集锦
云原生·istio
-dcr9 小时前
56.kubernetes弹性伸缩
云原生·容器·kubernetes
老百姓懂点AI9 小时前
[云原生] Serverless冷启动优化:智能体来了(西南总部)AI调度官的Pod预热策略与AI agent指挥官的模型加载加速
人工智能·云原生·serverless
Cyber4K9 小时前
【Kubernetes专项】K8s 常见持久化存储方案及存储类动态 PV
云原生·容器·kubernetes
噎住佩奇21 小时前
k8s-配置管理
云原生·容器·kubernetes
程序媛Dev1 天前
K8s 太重、虚拟机太旧,Sealos 找到了基础架构的最优解
云原生·容器·kubernetes
江畔何人初1 天前
docker概念-容器运行时、容器、容器镜像及结构
linux·运维·云原生
2501_944175781 天前
我用 Sealos 把 Dify + DeepSeek 部署时间从 2 天压到 15 分钟
云原生