? ? ? ? 目前我们学习云原生技术,就不得不去了解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具有以下特点:
????????在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配置。 |
hosts | hosts?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就是“不同的环境具有不同的配置”。
? ? ? ? 以后我们就从这个思路来学习云原生技术,一种技术是要解决一个问题的。