• 欢迎来到本博客,希望可以y一起学习与分享

k8s部署coreDNS

笔记 benz 5个月前 (05-01) 27次浏览 0个评论 扫描二维码
文章目录[隐藏]

一、CoreDNS简介

Kubernetes包括用于服务发现的DNS服务器Kube-DNS。 该DNS服务器利用SkyDNS的库来为Kubernetes pod和服务提供DNS请求。SkyDNS2的作者,Miek Gieben,创建了一个新的DNS服务器,CoreDNS,它采用更模块化,可扩展的框架构建。 Infoblox已经与Miek合作,将此DNS服务器作为Kube-DNS的替代品。

CoreDNS利用作为Web服务器Caddy的一部分而开发的服务器框架。该框架具有非常灵活,可扩展的模型,用于通过各种中间件组件传递请求。这些中间件组件根据请求提供不同的操作,例如记录,重定向,修改或维护。虽然它一开始作为Web服务器,但是Caddy并不是专门针对HTTP协议的,而是构建了一个基于CoreDNS的理想框架。

在这种灵活的模型中添加对Kubernetes的支持,相当于创建了一个Kubernetes中间件。该中间件使用Kubernetes API来满足针对特定Kubernetes pod或服务的DNS请求。而且由于Kube-DNS作为Kubernetes的另一项服务,kubelet和Kube-DNS之间没有紧密的绑定。您只需要将DNS服务的IP地址和域名传递给kubelet,而Kubernetes并不关心谁在实际处理该IP请求。

二、CoreDNS支持行为

1.0.0版本主要遵循Kube-DNS的当前行为。 CoreDNS的005及更高版本实现了完整的规范和更多功能。

  • A记录(正常的Service分配了一个名为my-svc.my-namespace.svc.cluster.local的DNS A记录。 这解决了服务的集群IP)
  • “headless”(没有集群IP)的Service也分配了一个名为my-svc.my-namespace.svc.cluster.local的DNS A记录。 与普通服务不同,这解决了Service选择了pods的一组IP。 客户预计将从这ip集合中消耗集合或使用标准循环选择。
  • 针对名为正常或无头服务的端口创建的SRV记录,对于每个命名的端口,SRV记录的格式为_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local。对于常规服务,这将解析为端口号和CNAME:my-svc.my-namespace.svc.cluster.local;对于无头服务,这解决了多个答案,一个用于支持服务的每个pod,并包含端口号还有格式为auto-generated-name.my-svc.my-namespace.svc.cluster.local 的pod的CNAME 。SRV记录包含它们中的“svc”段,对于省略“svc”段的旧式CNAME不支持。
  • 作为Service一部分的endpoints的A记录(比如“pets”的记录)
  • pod的Spec中描述的A记录
  • 还有就是用来发现正在使用的DNS模式版本的TXT记录

所有群集中不需要pod A记录支持,默认情况下禁用。 此外,CoreDNS对此用例的支持超出了在Kube-DNS中找到的标准行为。

在Kube-DNS中,这些记录不反映集群的状态,例如,对w-x-y-z.namespace.pod.cluster.local的任何查询将返回带有w.x.y.z(ip)的A记录,即使该IP不属于指定的命名空间,甚至不属于集群地址空间。最初的想法是启用对* .namespace.pod.cluster.local这样的域使用通配符SSL证书。

CoreDNS集成了提供pod验证的选项,验证返回的IP地址w.x.y.z实际上是指定命名空间中的pod的IP。他防止在命名空间中欺骗DNS名称。 然而,它确实会大大增加CoreDNS实例的内存占用,因为现在它需要观察所有的pod,而不仅仅是服务端点。

需要的参数

集群信息介绍
Kubernetes:v1.18.18
需要两个信息:
CLUSTER_CIDR

所在文件:kube-controller-manager.conf 或者 kube-proxy-config.yml (这两个文件的值都一样的)

 

CLUSTER_DNS
所在文件:kubelet-config.yml

Coredns 安装

仅在Master节点上安装

下载

官方地址:https://github.com/coredns/deployment/tree/master/kubernetes
请先安装Git

下载:

进入kubernetes

文件目录:

 

deploy.sh:是一个便捷的脚本,用于生成用于在当前运行标准kube-dns的集群上运行CoreDNS的清单。使用coredns.yaml.sed文件作为模板,它创建一个ConfigMap和一个CoreDNS deployment,然后更新 Kube-DNS service selector以使用CoreDNS deployment。 通过重新使用现有服务,服务请求不会中断。

脚本不会删除kube-dns的deployment或replication controller ,您必须手动执行:

确认是否存在已运行dns服务

deploy 脚本使用方法

生成安装配置文件

是在deployment/kubernetes/

-r:CLUSTER_CIDR
-i :CLUSTER_DNS
会生成coredns.yaml文件

验证配置文件核心配置

执行安装

验证服务

查看 coredns 详细信息

修改 kubelet 启动配置文件

每个Worker Node 都操作

重启kubelet

每个Worker Node 都操作

测试

启动 nginx 测试服务

输入以下内容:

部署:

如果,测试完毕,可以删除:

 

使用以下命令查看部署状态:

通过浏览输入地址:http://nodeIP:31561,即可访问。

启动一个工具镜像

创建test-coredns-busybox.yaml

部署

如果,测试完毕,可以删除:

 

查看部署状态

 

登陆curl镜像 (master节点执行)

验证外网解析

验证内部解析:

测试群内域名解析(重要,这个通过了,coredns才算正常运行

参考

Coredns 1.2.6 安装部署


文章 k8s部署coreDNS 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!