基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS( 二 )


这是一个 Kubernetes 集群中的 CoreDNS corefile 默认配置,CoreDNS 会在 53 端口读取 cluster.local 后缀的 Kubernetes 集群 A 记录和 PTR 记录 。并将 CoreDNS 收集到的监控指标通过 9153 端口输出到集群内的 Prometheus 。而 Kubernetes 不同类型 Service 的 DNS 记录格式,CoreDNS 也有相应标准进行记录 。

基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
设置完 Kubernetes 后,可以设置其他业务需求的 DNS 配置,如:
  • 设置不同的存根域;
  • 设置存根域静态 DNS 条目;
  • 面对存量代码,设置域名重写;
  • 面对集群外服务,设置 DNS 转发;
  • 设置日志和监控集成;
  • 设置缓存、健康、就绪检查及链路追踪;
根据以上配置,就构建了一个基础的企业云原生 DNS 系统:
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
DNS 服务暴露对于集群外的服务而言,存量业务可能还是一些虚拟化和裸机的应用,若和集群网络无法互联,如何在业务迁移时访问新的 DNS 服务?
KubeSphere 提供了一个开源项目——OpenELB 来解决云原生环境下的服务暴露问题,这是一个 CNCF 的沙箱项目 。OpenELB 通过物理环境的交换机使用 BGP 协议将 LoadBalancer 类型服务的 ExternalIP 宣告出去,在 IP 可达的环境下集群外部业务即可通过 EIP 访问 Kubernetes 服务资源 。
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
【基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS】 
对于集群外需要设置 DNS 服务器的服务资源,可通过 OpenELB 使用 EIP 暴露 CoreDNS,即可访问 DNS 服务。
在 KubeSphere 3.3 版本,用户可在开启集群网关 / 项目网关时,在网关访问 LoadBalancer 模式下,选择“OpenELB”负载均衡提供商,之后创建的 LoadBalancer 服务都会从 OpenELB 建立的 EIP Pool 中分配 EIP,供集群外部访问 。
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 

基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
DNS 监控运维为保障 CoreDNS 稳定运行,运维人员还需在基础设施侧完善 DNS 系统的日志、监控、告警、通知功能,KubeSphere 提供了简单易用的监控面板、日志管理与落盘,多维度的告警策略和消息,以及对接多个企业应用(邮件,钉钉,企业微信)的通知系统,时刻关注业务运行状态 。
此处以一个系统管理员视角,展示了在 KubeSphere 日志系统搜寻 NXDOMAIN 类型 DNS 回复的结果 。
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
通过 KubeSphere 自定义监控面板,设置一个基于 CoreDNS 指标的监控面板,KubeSphere 内置了众多监控面板,用户可直接使用模板构建亦可使用 PromQL 创建面板:
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 

基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 

基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
通过 KubeSphere 告警和通知组件,用户可基于预置规则模板(CPU、内存、磁盘、网络、异常率)或使用 PromQL 语句自定义告警规则,此处定义当 CoreDNS CPU 用量大于等于 0.1Core 系统触发告警:
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
KubeSphere 针对租户设计了通知模板,包含多种通知系统集成,此处使用邮件将“重要告警”,“危险告警”条件的告警消息发送给邮件接收人 。
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
当告警触发后,即可在告警消息和通知历史处查看到相应的条目,此时用户也会收到一封告警邮件了:
基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 

基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 

基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

文章插图
 
在高并发 DNS 请求场景中,还需对 CoreDNS 进行自动伸缩设计,通常考虑到服务高可用性和性能考量,可参考以下计算规格和调度策略设计:


推荐阅读