CoreDNS实战(六)-编译安装unbound插件

本文主要介绍coredns的unbound插件进行编译安装的过程及常用的配置方法。

coredns官方的unbound文档:unbound

unbound插件的github地址:https://github.com/coredns/unbound

注:unbound插件虽然是coredns中的External Plugins,但是从详情页面中我们可以看到Maintained by CoreDNS: CoreDNS maintainers take care of this plugin.,说明这个插件是官方维护的,在稳定性可靠性以及后续更新维护上都有不错的保证,应该是可以放心使用的。

1 配置环境

要使用CGO特性,需要安装C/C++构建工具链,在macOS和Linux下是要安装GCC,在windows下是需要安装MinGW工具。同时需要保证环境变量CGO_ENABLED被设置为1,这表示CGO是被启用的状态。在本地构建时CGO_ENABLED默认是启用的,当交叉构建时CGO默认是禁止的。比如要交叉构建ARM环境运行的Go程序,需要手工设置好C/C++交叉构建的工具链,同时开启CGO_ENABLED环境变量。

以CentOS8为例,最好提前安装好gccunbound-develunbound-libs

 [/home/coredns]# cat /etc/redhat-release
 CentOS Linux release 8.2.2004 (Core)
 ​
 [/home/coredns]# go env | grep "CGO_ENABLED"
 CGO_ENABLED="1"
 ​
 [/home/coredns]# rpm -qa | grep gcc
 libgcc-8.4.1-1.el8.x86_64
 gcc-8.4.1-1.el8.x86_64
 gcc-c++-8.4.1-1.el8.x86_64
 gcc-gdb-plugin-8.4.1-1.el8.x86_64
 ​
 [/home/coredns]# rpm -qa | grep unbound
 unbound-devel-1.7.3-15.el8.x86_64
 unbound-libs-1.7.3-15.el8.x86_64

如果在使用go get命令获取unbound插件的时候遇到下面的这个问题,可以参考这个issue的解决方案:How to fix the issue: unbound.h: No such file or directory · Issue #3 · miekg/unbound · GitHub

 [/home/coredns]# go get github.com/coredns/unbound
 # github.com/miekg/unbound
 ../gopath/pkg/mod/github.com/miekg/unbound@v0.0.0-20210309082708-dbeefb4cdb29/unbound.go:36:10: fatal error: unbound.h: No such file or directory
    36 | #include <unbound.h>
       |          ^~~~~~~~~~~
 compilation terminated.

对于红帽系的Linux可以直接安装unbound-devel,debian系的解决方案类似,只是软件包名可能略有不同。

 yum install -y unbound-devel

随后测试发现正常

 [/home/coredns]# go get github.com/coredns/unbound
 go get: added github.com/coredns/unbound v0.0.7
 go get: added github.com/miekg/unbound v0.0.0-20210309082708-dbeefb4cdb29

2 编译安装

虽然我们go的环境变量设置启用了CGO,但是coredns的Makefile文件默认是禁用的,因此需要将里面的CGO_ENABLED参数从默认的0改为1,从而才能启用CGO。

 [/home/coredns]# grep "CGO_ENABLED" Makefile
 CGO_ENABLED:=1

随后进行编译安装,安装完成后查看当前目录下的coredns二进制文件是否包含unbound插件来确定是否顺利编译安装完成。

 [/home/coredns]# go generate
 [/home/coredns]# go build
 [/home/coredns]# make
 CGO_ENABLED=1  go build -v -ldflags="-s -w -X github.com/coredns/coredns/coremain.GitCommit=7b43d042-dirty" -o coredns
 [/home/coredns]# ./coredns -plugins | grep unbound
   dns.unbound

对比是否编译安装了unbound插件的coredns,可以发现从原来的静态二进制文件,变成了需要动态加载依赖库。因此如果需要提前编译然后大范围使用,最好保证编译环境的系统和最终的使用环境系统一致或全兼容(本文的编译环境为CentOS8.2,使用环境为RockyLinux8.4)。

 [root@tiny-rockylinux coredns]# file coredns.static
 coredns.static: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
 [root@tiny-rockylinux coredns]# file coredns
 coredns: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
 ​
 [root@tiny-rockylinux coredns]# file /lib64/ld-linux-x86-64.so.2
 /lib64/ld-linux-x86-64.so.2: symbolic link to ld-2.28.so
 [root@tiny-rockylinux coredns]# file /lib64/ld-2.28.so
 /lib64/ld-2.28.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=04c0b62c6350fa6ec9158369de8b5b489e3d084b, not stripped

3 配置使用

语法配置:

 unbound [FROM] {
     except IGNORED_NAMES...
     option NAME VALUE
 }
  • FROM 指的是客户端请求需要解析的域名,例如blog.tinychen.comtinychen.com这两个的FROM都是tinychen.com
  • IGNORED_NAMES 和except搭配使用,指定不使用unbound的zone
  • option 可以添加unbound本身支持的一些参数,具体可以查看unbound.confman文档或者直接查看官网的文档

prometheus监控

unbound插件提供了两个监控指标,只要对应的zone中启用了Prometheus插件,那么就可以同时启用这两个指标(其他插件的监控指标也一样),它们分别是:

  • coredns_unbound_request_duration_seconds{server} - duration per query.
  • coredns_unbound_response_rcode_count_total{server, rcode} - count of RCODEs.

这两个监控指标的数据格式和内容与coredns原生的coredns_dns_request_duration_secondscoredns_dns_response_rcode_count_total一致,因此相关的监控图表只需要套用原有的进行简单修改后就能直接使用。

5 范例

除了tinychen.com这个域名其他的都使用unbound,并开启DNS最小化查询功能(DNS Query Name Minimisation

 . {
     unbound {
         except tinychen.com
         option qname-minimisation yes
     }
     log
     errors
     prometheus 0.0.0.0:9253
     bind 0.0.0.0
     cache {
         success 10240 600 60
         denial 5120 60 5
     }
 }

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

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

相关文章

如何使用llm 制作多模态

首先将任何非字符的序列信息使用特殊n个token 编码。 具体编码方法以图像为例子说明&#xff1a; 将固定尺寸图像如256256 的图像分割为1616 的子图像块。 将已知的所有图像数据都分割后进行str将其看做是一个长的字符&#xff0c;而后去重后方式一个词表。 使用特殊1024 个tok…

GNN Maximum Flow Problem (From Shusen Wang)

Maximum Flow Problem ShusenWang 图数据结构和算法课程笔记 Slides Maximum Flow Problem Description Naive Algorithm Residual Capacity - FlowLeft: Original GraphRight: Residual Graph - Bottleneck capacity 2- Iteration 2:- Find an augmenting path: s -&g…

IntelRealSense深度相机D455在ROS1运行中的消息内容

IntelRealSense深度相机D455在ROS1运行中的消息内容 通过下面命令所有相关信息通过ros topic的方式发布出去rosnode查看rqt_graph查看rostopic查看通过下面命令直接查看RVIZ中点云信息rosnode查看rqt_graph查看rostopic查看 Physical Port:&#xff1a; /sys/devices/pci0000:0…

线性回归既是一种数据挖掘与建模算法,也是统计学领域、计量经济学领域的常用学术建模方法,有何不同?

一.线性回归的基本形式 线性回归既是一种数据挖掘与建模算法&#xff0c;也是统计学领域、计量经济学领域的常用学术建模方法。在数据挖掘与建模领域&#xff0c;线性回归算法是一种较为基础的机器学习算法&#xff0c;其基本思想是将响应变量&#xff08;因变量、被解释变量&…

协议栈的内部结构

上层会向下层逐层委派工作。 最上面的部分是网络应用程序&#xff0c;它们会将收发数据等工作委派给下层的部分来完成。尽管不同的应用程序收发的数据内容不同&#xff0c;但收发数据的操作是共通的。 应用程序的下面是Socket库&#xff0c;其中包括解析器&#xff0c;解析器…

Java+Swing+Mysql实现超市管理系统

一、系统介绍 1.开发环境 操作系统&#xff1a;Win10 开发工具 &#xff1a;IDEA2018 JDK版本&#xff1a;jdk1.8 数据库&#xff1a;Mysql8.0 2.技术选型 JavaSwingMysql 3.功能模块 4.系统功能 1.系统登录登出 管理员可以登录、退出系统 2.商品信息管理 管理员可以对商品信息…

Windows下安装Git和Git小乌龟

目录 Git简介 Git安装 Git小乌龟简介 Git小乌龟安装 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地进行从很小到非常大的项目的版本管理。Git支持将本地仓库与远程仓库进行关联&#xff0c;实现多人协作开发。由于具有分布式版本控制、高效性、灵…

掌握Python Pingouin:数据统计新利器解析!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Pingouin库基于pandas、scipy和statsmodels&#xff0c;为用户提供了执行常见统计分析的功能。它支持各种统计方法和假设检验&#xff0c;例如 t-tests、ANOVA、correlation analysis 等。让我们看一些示例代码&…

打表技巧—连续正数和

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 连续正数和1 题目描述2 解决思路3 代码实现 &#x1f48e;总结 连续正数和 1 题目描述 定义一种数:可以表示成若干 (数量>1) 连续正数和的数比如: 5 23&#xff0c;5就是这样的数 12345&#xff0c;12就是这样…

全球与中国胃肠道治疗市场:增长趋势、竞争格局与前景展望

胃肠道治疗学是指医学和医疗保健的一个领域&#xff0c;专注于影响胃肠道 (GI) 的疾病和病症的诊断、治疗和管理。胃肠道治疗包括药物治疗和手术干预&#xff0c;旨在解决各种胃肠道疾病&#xff0c;如食道(GERD)、发炎性肠道疾病疾病(IBD)、消化性溃疡和腹泻。它包括多种医学方…

详解十大经典排序算法(五):归并排序(Merge Sort)

算法原理 归并排序的核心思想是将一个大的数组分割成多个小的子数组&#xff0c;然后分别对这些子数组进行排序&#xff0c;最后将排序后的子数组合并起来&#xff0c;得到一个有序的大数组。 算法描述 归并排序&#xff08;Merge Sort&#xff09;是一种经典的排序算法&#x…

Azure Machine Learning - 在 Azure 门户中创建演示应用

目录 准备环境启动向导配置搜索结果添加自动提示功能添加建议创建、下载和执行清理资源 使用 Azure 门户的“创建演示应用”向导来生成可下载的“localhost”样式的 Web 应用&#xff0c;该应用在浏览器中运行。 根据其配置&#xff0c;生成的应用在首次使用时就能正常运行&…

第2章 知识抽取:概述、方法

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

信号可靠性剖析

问题 基于信号发送的进程间通信方式可靠吗&#xff1f;&#xff1f;&#xff1f; 信号查看(kill -l) 信号的分类 不可靠信号 (传统信号) 信号值在 [1, 31] 之间的所有信号 可靠信号 (实时信号) 信号值在 [SIGRTMIN&#xff0c;SIGRTMAX]&#xff0c;即&#xff1a;[34&…

odoo自定义提示性校验

背景: 在odoo16的原生的代码里&#xff0c;可以给按钮添加一个 confirm属性&#xff0c;从而达到 提示性校验的效果。 问题&#xff1a; 这个属性加了之后一定会弹出提示性校验的对话框&#xff0c;于是如何根据我们的实际业务&#xff0c;从后端返回提示性信息&#xff0c;…

2023-12-05 Qt学习总结 (AI辅助) 未完待续

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言一 Qt是什么二 Qt开发工具链三 Qt编程涉及的术语和名词四 Qt Creator使用五 hello Qt!六 Qt控件和事件七 Qt信号和槽八 Qt自定义信号和槽九 Qt QObject基类十 QWidget基类十一 QMainWindow基类十二 QLabel文本框…

SL6015B降压恒流60V耐压1.5A高辉调光LED芯片 电路简单 元器件少

SL6015B是一款专为LED照明应用设计的降压恒流芯片&#xff0c;具有60V的耐压能力&#xff0c;最大输出电流可达1.5A。它采用高辉调光方式&#xff0c;通过改变输入电压或电流来调节LED的亮度。此外&#xff0c;SL6015B还具有电路简单和元器件数量少的特点&#xff0c;使其成为一…

Dinky之安装部署与基本使用

Dinky之安装部署与基本使用 Dinky概览Linux安装部署解压到指定目录初始化MySQL数据库修改配置文件加载依赖启动Dinky Docker部署启动dinky-mysql-server镜像启动dinky-standalone-server镜像 Dinky的基本使用上传jar包Flink配置集群管理集群实例管理集群配置管理 创建作业语句编…

clickhouse的向量化执行

背景 clickhouse快的很大一部分原因来源于数据的向量化执行&#xff0c;本文就来看一下向量化执行和正常标量执行的区别 SIMD的向量化执行 从上图可知&#xff0c;clickhouse通过SIMD指令可以做到一个cpu周期操作两个向量的运算操作&#xff0c;比起普通的cpu指令效率提高了N…

第17章 匿名函数

第17.1节 匿名函数的基本语法 [捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 { // 函数体 }语法规则&#xff1a;lambda表达式可以看成是一般函数的函数名被略去&#xff0c;返回值使用了一个 -> 的形式表示。唯一与普通函数不同的是增加了“捕获列表”。 …