当前位置: 首页 > news >正文

CNCF之CoreDNS

        目前我们学习云原生技术,就不得不去了解CNCF,即Cloud Native Computing Foundation,云原生计算基金会,它的宣言或理念是:

        The Cloud Native Computing Foundation (CNCF) hosts critical components of the global technology infrastructure。

        CNCF上最重要就是这些开源的项目系统了,分三大类:毕业项目Graduated Projects、孵化项目Incubating Projects和沙盒项目Sandbox Projects。

        毕业项目是合格稳定的项目系统,孵化项目正在往毕业项目努力中,沙盒项目就是一个玩具,可能系统很不稳定,不要引入到正式平台里。

        今天要介绍的是二十四个毕业项目之一的CoreDNS, 它是一个DNS服务器,用Go语言写成的,被设计成可以与容器(如Linux和Docker容器)化环境良好地结合,尤其是在非常流行的容器编排系统Kubernetes管理的环境中。       

        CoreDNS具有以下特点:

  1. 插件架构:采用插件架构,允许用户根据需要选择和组合不同的插件,从而实现功能的定制和扩展。
  2. 高性能:采用了许多优化措施,确保其高性能和低延迟。
  3. 易于配置:配置文件采用类似于Go语言的语法,易于理解和编写。
  4. 兼容性强:兼容多种DNS协议,如DNS-over-TLS、DNS-over-HTTPS等,可以与现有的DNS基础设施无缝集成。
  5. 可扩展性:由于CoreDNS采用插件架构,因此可以轻松添加新功能和扩展现有功能,以满足不断变化的需求。

        在Kubernetes环境中,CoreDNS可以作为默认的DNS服务器,为容器提供DNS解析服务。它支持将服务发现和DNS查询委托给其他DNS服务器,并提供了灵活的配置选项,以适应不同的使用场景。

        CoreDNS的官网是:CoreDNS: DNS and Service Discovery,文档地址是:CoreDNS手册

提供3种形式的安装:1)二进制;2)Docker;3)源码。我用的是源码方式,下载地址是:Release v1.11.1 · coredns/coredns · GitHub

        可执行文件是:coredns,我的目录是:

coredns  Corefile  hosts 

         Corefile文件内容是:

.:53 {
    reload 30s
    loadbalance round_robin
    hosts hosts {
        fallthrough
    }
    forward . 8.8.8.8
    log
}

        hosts文件内容是:

# database
192.168.1.10    mysql
192.168.1.11    mongodb

# kafka

192.168.1.20    kafka
192.168.1.21    kafka

        以上最简单的DNS服务使用,基本上不用做什么复杂配置就可以立即使用。

        还有docker部署方式,以及和著名的k8s配合使用,这里不详述了,需要另起一篇文章。

        从上面配置文件Corefile, 可以看到CoreDNS插件机制,使用了很多插件,如下:

errors错误信息到标准输出
reload允许自动重新加载已更改的Corefile。编辑ConfigMap配置后,请等待两分钟以使更改生效。
loadbalance循环DNS负载均衡器,可以在答案中随机A、AAAA、MX记录的顺序。
forward将域名查询请求转到预定义的DNS服务器。默认配置中,当域名不在kubernetes域时,将请求转发到预定义的解析器(/etc/resolv.conf)中。默认使用宿主机的/etc/resolv.conf配置。
hostshosts enables serving zone data from a /etc/hosts style file
log日志

         最后,为什么CoreDNS这么重要,就是我们在业务系统写服务地址时,不要写死IP地址,而是写对于的系统域名,那么在不同的客户现场环境里,我们通过hosts文件配置来实际映射到具体的IP地址,就可以实现云原生15要素:

        要素1:  One Codebase, One Application

        Heroku版本:一份基准代码,多份部署。

        要素5 Configuration, Credentials and Code

        Heroku版本:在环境中配置存储。

        在环境中存储配置,不同的环境具有不同的配置,这和要素1是配套的,代码只有一份,但配置是多份,一个客户环境一份专门的配置。

        这里hosts就是“不同的环境具有不同的配置”。

        以后我们就从这个思路来学习云原生技术,一种技术是要解决一个问题的。

相关文章:

  • 人工智能在库存管理中的应用
  • 计算机毕业设计----JSP+servlet鲜花销售商城管理系统
  • 开源C语言库Melon:用户态动态追踪与控制反馈
  • 简单易懂的PyTorch 损失函数:优化机器学习模型的关键
  • C++ 模板
  • pythroch abaconda 安装 cuda、版本确定、pytorch 安装
  • Java多线程并发篇----第七篇
  • 【期末不挂科-考前速过系列P4】单片机[接口与总线]——经典例题盘点(带图解析)(第四章:32题搞定基本指令例题))
  • 具备闭环思维的测试才更充分
  • 深入了解网络流量清洗--使用免费的雷池社区版进行防护
  • TortoiseSVN·文件锁定与清理
  • 20240110-Python实现读取当前文件夹下所有视频名称和时长并生成一张表
  • 达梦数据库 模式 研究
  • 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图
  • 【WinForms 窗体】常见的“陷阱”
  • Apache Pulsar 2.1 重磅发布
  • Codepen 每日精选(2018-3-25)
  • css选择器
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • EOS是什么
  • ES2017异步函数现已正式可用
  • express + mock 让前后台并行开发
  • GraphQL学习过程应该是这样的
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA SE 6 GC调优笔记
  • js如何打印object对象
  • Redux系列x:源码分析
  • 力扣(LeetCode)21
  • 那些被忽略的 JavaScript 数组方法细节
  • 学习使用ExpressJS 4.0中的新Router
  • 用Visual Studio开发以太坊智能合约
  • Semaphore
  • 仓管云——企业云erp功能有哪些?
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (ZT)薛涌:谈贫说富
  • (汇总)os模块以及shutil模块对文件的操作
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)ABI是什么
  • (转)Sublime Text3配置Lua运行环境
  • ..回顾17,展望18
  • .NET CORE Aws S3 使用
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core 中插件式开发实现
  • .net6+aspose.words导出word并转pdf
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net流程开发平台的一些难点(1)
  • .NET是什么
  • .NET文档生成工具ADB使用图文教程
  • @SentinelResource详解
  • [100天算法】-实现 strStr()(day 52)
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Android] 修改设备访问权限