基于coredns和k8s构建云原生场景下的企业级dns

author author     2022-12-03     618

关键词:

容器作为近些年最火热的后端技术,加快了很多企业的数字化转型进程。目前的企业,不是在使用云原生技术,就是在转向云原生技术的过程中。在容器化进程中,如何保持业务的平稳迁移,如何将现有的一些服务设施一并进行容器化迁移,也是众多企业较为关注的点。

以 DNS 为例,如何构建一个云原生的企业 DNS 系统?

CoreDNS 简介

CoreDNS 是一个 Go 语言编写的灵活可扩展的 DNS 服务器,在 Kubernetes 中,作为一个服务发现的配置中心,在 Kubernetes 中创建的 Service 和 Pod 都会在其中自动生成相应的 DNS 记录。Kubernetes 服务发现的特性,使 CoreDNS 很适合作为企业云原生环境的 DNS 服务器,保障企业容器化和非容器化业务服务的稳定运行。

构建企业 DNS 服务器时,一般会有以下需求:

  • 用户外网域名访问服务;
  • 混合云业务迁移、数据共享、容灾;
  • 开发代码 IP 写死导致架构可用性、弹性无法实现;
  • 统一 DNS 管理需求,含上下级平台对接;
  • DNS 劫持等网络安全风险;
  • 存量代码固定域名访问;
  • 集群外域名访问;

相比于 Bind 开源方案或 Windows Server DNS 商业 DNS 服务器,CoreDNS 有以下优势:

  • 无商业许可要求,降低投资成本;
  • 轻量化,通过插件实现功能添加;
  • 支持 DNS,DNS over TLS,DNS over HTTP/2,DNS over gRPC 协议;
  • 提供 kubernetes 服务发现;
  • 支持对接 Route53/Google Cloud DNS/AzureDNS;
  • 支持集成 Prometheus, OpenTracing,OPA,带来更全面的运维体验;
  • 支持整合容器管理平台,提供统一 DNS 系统运维。

构建企业云原生 DNS 前,对 CoreDNS 做一个更深入的了解。

CoreDNS 运行原理与插件介绍

CoreDNS 基于 Caddy 框架实现模块化设计,每个插件承载相应的具体功能,对于 DNS 系统而言,CoreDNS 使用 File,ETCD 插件等加载 DNS 记录,使用 Kubernetes 插件实现集群服务发现,外部 DNS 请求到达 CoreDNS 后,根据插件调用链依次处理 DNS 请求。

基于

CoreDNS 社区官方提供了 50 多种插件,开发者亦可根据需求开发个性化的外部插件。CoreDNS 常用插件如下图,根据使用场景,可分为运维、DNS 处理、后端数据存储等三个类别。

CoreDNS 定义 Corefile 配置文件,服务器在加载 Corefile 后处理 DNS 请求,对于以下插件,只需在 Corefile 中引用即可,之后 CoreDNS 会使用插件链进行调用,插件链可参考以下链接: ​​https://github.com/coredns/coredns/blob/master/plugin.cfg​

基于

设计一个基于 CoreDNS 的分层 DNS 架构

在熟悉 CoreDNS 特性后,可设计企业的 DNS 架构:

基于

DNS 架构以外网 DNS、内网 DNS、分区 DNS 组成:

外网 DNS:

  • 使用 DNSSEC、DOT、DOH 等保障 DNS 安全;
  • 缓存 DNS 记录;
  • 构建 DNS 实例自动伸缩,应对高 QPS 需求;

内网 DNS:

  • Kubernetes 服务发现;
  • 构建上游 DNS 区域;

分区 DNS:

  • 建立开发、测试、UAT、生产等区域 DNS;
  • NodeLocalDNS 提高性能;
  • 设置转发器处理递归 DNS 请求;

KubeSphere 部署 CoreDNS

由于 CoreDNS 是一个 CNCF 毕业的云原生项目,是目前支持云原生最好的一个 DNS 服务器,用户可直接在 KubeSphere 应用商店一键安装。KubeSphere 提供了基于 Helm 模板的应用商店,支持云原生应用的生命周期管理,提供开发人员应用上传、测试,版本提交,应用管理人员进行审核、发布等流程管理。用户在应用商店选择 CoreDNS 应用后,可按需部署于不同集群的不同项目中,并自定义应用模板配置:

基于

基于

服务发现与 DNS 配置

部署 CoreDNS 后,对于运维人员来说,CoreDNS 的配置大体分为两类:一类为 Kubernetes 配置,一类为 DNS 配置。CoreDNS 提供了 Kubernetes 插件,支持在 kubernetes 集群中读取区域数据,并根据 Pod 和 Service 的域名记载相应的 A 记录和 PTR 记录。

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

基于

设置完 Kubernetes 后,可以设置其他业务需求的 DNS 配置,如:

  • 设置不同的存根域;
  • 设置存根域静态 DNS 条目;
  • 面对存量代码,设置域名重写;
  • 面对集群外服务,设置 DNS 转发;
  • 设置日志和监控集成;
  • 设置缓存、健康、就绪检查及链路追踪;

根据以上配置,就构建了一个基础的企业云原生 DNS 系统:

基于

DNS 服务暴露

对于集群外的服务而言,存量业务可能还是一些虚拟化和裸机的应用,若和集群网络无法互联,如何在业务迁移时访问新的 DNS 服务?

KubeSphere 提供了一个开源项目——OpenELB 来解决云原生环境下的服务暴露问题,这是一个 CNCF 的沙箱项目。OpenELB 通过物理环境的交换机使用 BGP 协议将 LoadBalancer 类型服务的 ExternalIP 宣告出去,在 IP 可达的环境下集群外部业务即可通过 EIP 访问 Kubernetes 服务资源。

基于

对于集群外需要设置 DNS 服务器的服务资源,可通过 OpenELB 使用 EIP 暴露 CoreDNS ,即可访问 DNS 服务 。

在 KubeSphere 3.3 版本,用户可在开启集群网关 / 项目网关时,在网关访问 LoadBalancer 模式下,选择“OpenELB”负载均衡提供商,之后创建的 LoadBalancer 服务都会从 OpenELB 建立的 EIP Pool 中分配 EIP,供集群外部访问。

基于

基于

DNS 监控运维

为保障 CoreDNS 稳定运行,运维人员还需在基础设施侧完善 DNS 系统的日志、监控、告警、通知功能,KubeSphere 提供了简单易用的监控面板、日志管理与落盘,多维度的告警策略和消息,以及对接多个企业应用(邮件,钉钉, 企业微信)的通知系统,时刻关注业务运行状态。

此处以一个系统管理员视角,展示了在 KubeSphere 日志系统搜寻 NXDOMAIN 类型 DNS 回复的结果。

基于

通过 KubeSphere 自定义监控面板,设置一个基于 CoreDNS 指标的监控面板,KubeSphere 内置了众多监控面板,用户可直接使用模板构建亦可使用 PromQL 创建面板:

基于

基于

基于

通过 KubeSphere 告警和通知组件,用户可基于预置规则模板(CPU、内存、磁盘、网络、异常率)或使用 PromQL 语句自定义告警规则,此处定义当 CoreDNS CPU 用量大于等于 0.1Core 系统触发告警:

基于

KubeSphere 针对租户设计了通知模板,包含多种通知系统集成,此处使用邮件将“重要告警”,“危险告警”条件的告警消息发送给邮件接收人。

基于

当告警触发后,即可在告警消息和通知历史处查看到相应的条目,此时用户也会收到一封告警邮件了:

基于

基于

基于

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

  • 副本打散,跨可用区 / 节点。
  • 避免所在节点 CPU、内存过高。
  • 通常设计副本数为 2。QPS 与 CPU 消耗正相关,单 CPU——1w+QPS
  • Kubernetes 集群下,CoreDNS 副本数与集群节点配置 1:8。
  • 业务峰值 CPU 占用 >1Core,水平扩容。

通过 KubeSphere 自动伸缩机制,可设置基于 CPU 用量的自动伸缩策略,保障 CoreDNS 在瞬时高并发场景稳定运行。

基于

基于

总结

以上就是建设一个云原生的 DNS 系统的全部内容了,可以看出,在云原生时代,新的技术层出不穷,IT 系统的部门和人员也越发趋于协同作战,以往构建一个 DNS 系统可能只需要安装一套稳定能进行 DNS 解析的系统,并实现主备切换即可。在应用驱动基础架构转型的云原生时代,基础服务应用还更需要考虑异构系统的连接,灵活简便的安装升级管理,更强大的可靠性和自愈能力,日志监控通知系统的完善,还有更适合实际业务需求的弹性设计,来加速应用现代化,推动业务应用持续转型。

openyurt在龙源cnstack云边协同项目的应用

...美适配和解耦于原生K8s组件,例如Kubelet、Kube-Proxy、CoreDNS等。其核心能力为边缘节点的边云网络代理,由Yurthub组件提供,旨在保证跨云场景下的K8s节点正常纳管和运行,从而为边缘IOT设备赋予云原生能力。OpenYurt... 查看详情

借力googlecloud基础设施和着陆区,构建企业级云原生卓越运营能力

大多数企业在上云过程中,需要经历一个旅程,不论从云原生战略转型,还是应用架构云化,或者是基础设施运维基于云运维进行改造,都少不了对总体基础设施的转型、优化和设计。GoogleCloud利用先进的基础... 查看详情

云原生之kubernetes实战k8s集群下的daemonset高级资源对象

【云原生之kubernetes实战】k8s集群下的DaemonSet高级资源对象一、DaemonSet资源对象介绍1.DaemonSet简介2.DaemonSet使用场景二、检查本地k8s集群状态1.检查系统pod状态2.查看工作节点状态三、创建一个DaemonSet1.编写daemonset.yaml2.应用daemonset.ya... 查看详情

基于k8s构建企业jenkinscicd

Jenkins配置安装插件:kubernetes、git、pipeline、kubernetescontinuousdeploy配置Jenkins挂钩k8s环境点击“系统管理”=》“系统设置”。一直往下滑动,点击“新增一个云”,选择k8s。如果这边没有出现k8s,则代表你的插件没有安装成功,请... 查看详情

基于k8s构建企业jenkinscicd

1.Jenkins配置安装插件:kubernetes、git、pipeline、kubernetescontinuousdeploy配置Jenkins挂钩k8s环境点击“系统管理”=》“系统设置”。一直往下滑动,点击“新增一个云”,选择k8s。如果这边没有出现k8s,则代表你的插件没有安装成功,... 查看详情

如何基于k8s多租能力构建serverlesscontainer

当前Kubernetes已经成为名副其实的企业级容器编排规范,很多云平台都开始提供兼容Kubernetes接口的容器服务。而在多用户支持方面,多数平台选择直接提供专属虚机集群,用户需要花费大量精力处理集群规模、资源利用率、费用... 查看详情

基于rocketmq构建阿里云事件驱动引擎eventbridge

简介:阿里云事件总线EventBridge作为云上的事件枢纽,最核心的能力是连接。无论是在线业务场景、IoT场景、还是大数据场景,无论是阿里云、其他云厂商,还是私有IDC机房,我们都将提供安全可靠的集成方式... 查看详情

jenkins和k8s构建企业级devops容器云平台(代码片段)

什么是DevOps?DevOps中的Dev是Devlopment(开发),Ops是Operation(运维),用一句话来说DevOps 就是打通开发运维的壁垒,实现开发运维一体化。DevOps整个流程包括敏捷开发->持续集成->持续交付->... 查看详情

巧用api网关构建大型应用体系架构

...化业务建模工具,极大提升设计效率;同时,基于这套建模产出,形成代 查看详情

云原生时代,如何构建数字化转型架构?

企业架构可以助力企业数字化转型的规划和建设,其中企业IT架构是承接企业IT战略、对齐业务架构,以及具体IT项目落地的核心枢纽。笔者经常遇到有朋友和客户问什么是云原生?对企业有什么好处?怎样结合云... 查看详情

云原生选题

...container部分Dockerfile制作镜像完整介绍,包含镜像分层构建,大小裁剪等介绍k8s上部署后端服务的实战k8s上部署nodejs项目k8s上部署springboot项目k8s上部署python项目 查看详情

偶数科技:基于oushudb的新一代云原生湖仓一体为企业助力

...。在国外有两种流行的实现数据湖仓的技术,他们分别是基于数据仓库和基于数据湖的解决方案,他们的代表分别是Snowflake和Databricks。去年11月,双方曾就两者性能差异吵得不可开交,作为大数据分析赛道的代表性厂商,不论是... 查看详情

用友云平台,真正的云原生架构,加速云应用落地

...为重要且能够更快实现的技术手段。真正的云应用必须是基于云原生架构的,PaaS是一个重要的步骤,因为这是云原生的第一接触点。基于云原生架构的PaaS平台于企业客户、于生态伙伴而言,都是真正上云的必要支撑!用友公司... 查看详情

k8s应用案例介绍——阿里云

...里能成功?|问底中国IT技术演进 着重描述了阿里巴巴基于K8s的云原生改造实践过程的三大能力升级,在对应能力升级过程中沉淀的技术解决方案,以及通过这些能力升级所取得的业务价值。云原生技术也从原来的应用容器化... 查看详情

bizworks助力企业应用的高效开发与复用

...,致力于成为企业数字化转型的新基座。BizWorks作为企业级云原生应用数字工作台,能很好地支撑企业数字中台建设、云原生应用开发、企业资产运营管理等场景。本文不会全面介绍BizWorks平台的能力,而是着重介绍Bi... 查看详情

云原生kubernetes基于minikube搭建第一个k8s集群

一、前言对于k8s来说,搭建方式有多种,如果是生产环境,一般来说,至少需要3台节点确保服务的高可用性,常用的搭建方式列举如下(提供参考):kubeadm搭建(推荐)一个K8s部署工具,提供kubeadminit和kubeadmjoin ;用于快速... 查看详情

基于云原生架构构建亿级多语言电商平台设计到落地实现第一阶段

...f1a;采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。要转向云... 查看详情

前沿分享|阿里云数据库高级技术专家宋利兵:阿里云企业级自治数据库rds详解

简介:本篇内容为2021云栖大会-企业级云原生数据库最佳实践论坛中,阿里云数据库高级技术专家宋利兵关于“阿里云企业级自治数据库RDS详解”的分享。本文将从2方面为大家介绍企业级的自治的数据库系统。RDSMySQL 产... 查看详情