在 Kubernetes 集群中,有一个容易被忽视却至关重要的组件 ——CoreDNS。它不像 Prometheus 那样有直观的监控仪表盘,也不像 ArgoCD 那样负责应用部署,但没有它,集群内部的组件和 Pod 就会陷入 “找不到彼此” 的困境。本文将从实际场景出发,拆解 CoreDNS 在集群中的核心作用,帮你搞懂它为何是 Kubernetes 网络的 “灵魂”。

一、先搞懂:CoreDNS 解决了什么核心问题?

在没有 CoreDNS 的环境中,若想让集群内的 Pod 访问某个 Service,需要手动记录 Service 的 ClusterIP,一旦 Service 重建、IP 变更,所有依赖它的组件都得手动修改地址 —— 这在动态伸缩的 Kubernetes 集群中完全不可行。

CoreDNS 的核心价值,就是为 Kubernetes 提供 “动态域名解析服务”:它会自动监听集群内 Service、Pod 的创建 / 删除事件,实时更新域名与 IP 的映射关系,让组件和 Pod 能通过 “易记的域名” 而非 “多变的 IP” 通信,彻底解决了 “地址硬编码” 的痛点。

二、CoreDNS 的 3 大核心作用,从场景看更清晰

CoreDNS 的功能围绕 “集群内部通信” 展开,最关键的作用可归纳为三类,每类都对应实际运维中的高频场景。

1. 为 Service 自动注册 “集群内域名”,实现稳定访问

这是 CoreDNS 最常用的功能。当你在集群中创建一个 Service(无论 ClusterIP、NodePort 还是 Headless 类型),CoreDNS 会立即为它生成一个标准化的集群内域名,格式为:[Service 名称].[命名空间名称].svc.cluster.local

简化访问:Pod 访问 Service 时,无需记住 ClusterIP,直接用域名即可。例如,default 命名空间下名为 my-app 的 Service,Pod 可通过 my-app.default.svc(简化版,省略 .cluster.local)访问,CoreDNS 会自动解析到对应的 ClusterIP。

动态适配:若 Service 重建导致 ClusterIP 变更,CoreDNS 会实时更新解析记录,Pod 无需修改任何配置,通信不会中断。

典型场景:集群内的微服务调用(如订单服务访问支付服务)、组件访问中间件(如 Pod 访问 redis.default.svc 这个 Redis Service)。Argo CD 访问 API Server 进行应用同步(如通过 kubernetes.default.svc 域名执行资源部署操作)。

2. 支持 Pod 自定义域名,满足 “精准访问单个 Pod” 需求

除了 Service,CoreDNS 还能为 Pod 生成自定义域名,这在需要 “访问特定 Pod” 的场景中非常有用(比如分布式系统中的节点间通信)。实现方式需配合 Headless Service(ClusterIP 设为 None 的 Service):

  1. 在 Pod 定义中设置 hostname(Pod 主机名)和 subdomain(子域名,通常为 Headless Service 名称);
  2. CoreDNS 会为该 Pod 生成域名:[hostname].[subdomain].[命名空间].svc.cluster.local

示例:若 Pod 的 hostname 为 web-0subdomain 为 web-svc(Headless Service 名称),命名空间为 app-ns,则 Pod 的专属域名为 web-0.web-svc.app-ns.svc.cluster.local,其他组件可通过该域名直接访问这个特定 Pod。

3. 转发 “外部域名请求”,让 Pod 能访问公网服务

集群内的 Pod 不仅需要访问内部组件,有时还需调用公网服务(如访问阿里云 OSS、调用第三方 API)。CoreDNS 此时扮演 “网关” 角色,将 Pod 的外部域名请求(如 www.baidu.comoss-cn-beijing.aliyuncs.com)转发到集群外的 DNS 服务器(通常是节点配置的 DNS,如阿里云 DNS 223.5.5.5、Google DNS 8.8.8.8)。

  • 无需额外配置:默认情况下,CoreDNS 会继承节点的 DNS 转发规则,Pod 无需手动设置 DNS 服务器,直接解析公网域名即可。
  • 可自定义转发策略:若需指定特定外部 DNS(如企业内网 DNS),可修改 CoreDNS 的 ConfigMap,配置 forward 插件规则(例如 forward . 192.168.1.100,表示将所有外部请求转发到 192.168.1.100)。

三、CoreDNS 的 “隐藏优势”:高可用与可扩展性

除了核心功能,CoreDNS 还具备适合生产环境的特性,这也是它能成为 Kubernetes 默认 DNS 组件的原因:

高可用部署:CoreDNS 通常以 Deployment 形式部署,通过多副本(默认 2 个)和 NodeSelector 分散在不同节点,避免单点故障;同时,Kubernetes 会将 CoreDNS 的 Service(kube-dns 或 coredns)IP 写入所有 Pod 的 /etc/resolv.conf,确保 Pod 能稳定访问 DNS 服务。

插件化扩展:CoreDNS 支持通过插件扩展功能,例如 cache 插件缓存解析结果减少重复请求、rewrite 插件修改域名解析规则、health 插件提供健康检查接口,满足不同场景的定制需求。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐