Kubernetes DNS

本文介绍了Kubernetes DNS的发展历程,重点讲解CoreDNS作为集群DNS服务的工作原理和配置。CoreDNS采用GO语言编写,支持插件系统,如loadbalance、cache等,提供DNS解析、健康检查和负载均衡等功能。文章还展示了如何创建和配置CoreDNS服务,以及如何利用Etcd和hosts插件自定义域名记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Github:

链接

使用文档:

链接

Kubernetes DNS

作为服务的发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,这就需要一个集群范围内的 DNS 服务来完成从服务名到 ClusterIP 的解析。

DNS 服务在 Kubernetes 的发展过程中历经了 3 个阶段:

  • SkyDNS
  • KubeDNS
  • CoreDNS

从 Kubernetes 1.11 版本开始,Kubernetes 集群的 DNS 服务由 CoreDNS 提供。CoreDNS 是 CNCF 基金会的一个项目,用 GO 语言实现的高性能、插件式、易扩展的 DNS 服务端。

创建 CoreDNS 服务

在部署 CoreDNS 应用之前,至少需要创建一个 ConfigMap、一个 Deployment 和一个 Service 共 3 个资源对象。在启用了 RBAC 的集群中,还可以设置 ServiceAccount、ClusterRole、ClusterRoleBinding 对 CoreDNS 容器进行权限设置。

最简单的启动方式:

$ git clone https://github.com/coredns/deployment.git && cd deployment/kubernetes

$ ./deploy.sh | kubectl apply -f -

上述是官方的启动方式,实际上它用它创建出来的启动文件如下:

CoreDNS.yml 展开源码

其中,CoreDNS 实例数量 relicas 副本的值通常应该根据集群的规模和服务数量确定,如果单个 CoreDNS 进程不足以支撑整个集群的 NDS 查询,则可以通过水平扩展提高查询能力。由于 DNS 服务是 Kubernetes 集群的核心服务,所以建议其 Deployment 设置自动扩缩容器控制器,自动管理器副本数量。

CoreDNS 的配置说明

CoreDNS 的主要功能是通过插件系统实现的。CoreDNS 实现了一种链式插件结构,将 DNS 的逻辑抽象成一个个插件,能够灵活组合使用。3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com

常用的插件如下:

  • loadbalance:提供基于 DNS的负载均衡功能。
  • loop:检测在 DNS 解析过程中出现的简单循环问题。
  • cache:提供前端缓存功能。
  • health:对 Endpoint 进行健康检查。
  • kubernetes:从 Kubernetes 中读取 zone 数据。
  • etcd:从 Etcd 读取 zone 数据,可以用于自定义域名记录。
  • file:从 RFC1035 格式文件中读取 zone 数据。
  • hosts:使用 /etc/hosts 文件或其他文件读取 zone 数据,可以用于自定义域名记录。
  • auto:从磁盘中自动加载区域文件。
  • reload:定时自动重新嘉爱 Corefile 配置文件的内容。
  • forward:转发特定的域名查询到多个其他 DNS 服务器,同时提供多个 DNS 服务器的负载均衡功能。
  • prometheus:为 Prometheus 系统提供采集性能指标数据的 URL。
  • pprof:在 URL 路径 /debug/pprof 下提供运行时的性能数据。
  • log:对 DNS 查询进行日志记录。
  • errors:对错误信息进行日志记录。

在下面的示例中为域名 "cluster.local" 设置了一系列插件,包括 errors、health、kubernetes、prometheus、forward、cache、loop、reload 和 loadbalance,在进行域名解析时,这些插件将从上到下的顺序依次执行:

cluster.local {

    errors

    health

    ready

    kubernetes cluster.local in-addr.arpa ip6.arpa {

      pods insecure

      fallthrough in-addr.arpa ip6.arpa

    }

    prometheus :9153

    forward . /etc/resolv.conf

    cache 30

    loop

    reload

    loadbalance

}

另外,Etcd 和 hosts 插件都可以用于用户自定义域名记录。

下面是使用 Etcd 插件的配置示例,将以 ".com" 结尾的域名记录配置为从 etcd 中获取,并将域名记录保存在 /skydns 路径下:

{

    etcd com {

        path /skydns

        endpoint http://192.168.18.3:2379

        upstream /etc/resolv.conf

        cache 160 com

        loadbalance

        proxy . /etc/resolv.conf

    }

}

如果用户在 Etcd 中插入一条 "10.1.1.1 my company.com" DNS 记录:

$ etcdctl put /skydns/com/my/company '{"host":"10.1.1.1","ttl":60}'

客户端应用就能访问域名了 "mycompany.com" 了。3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com

forward 和 proxy 插件都可以用于配置上游 DNS 服务器或其他 DNS 服务器,当在 CoreDNS 中查询不到域名时,会到其他 DNS 服务器上进行查询。在实际环境中,可以将 Kubernetes 集群外部的 DNS 纳入 CoreDNS ,进行统一 DNS 管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值