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