1. 为什么K8S需要CoreDNS?
在Kubernetes集群中,服务发现是基础设施的核心能力之一。想象一下,当你的Pod需要访问另一个Service时,难道每次都要记住那串变化的ClusterIP吗?这就是CoreDNS的用武之地。
CoreDNS作为K8S默认的DNS服务,本质上是一个模块化、可扩展的DNS服务器。它取代了早期的kube-dns方案,通过插件机制实现了更灵活的DNS功能。在典型的K8S集群中,每当你创建一个Service,CoreDNS就会自动生成对应的DNS记录。
注意:从Kubernetes 1.13版本开始,CoreDNS正式成为默认DNS服务,替代了原来的kube-dns。如果你还在使用旧版本,升级集群时需要考虑迁移方案。
CoreDNS的配置文件以Corefile形式存在,通常包含如下关键插件:
- kubernetes:核心插件,用于发现K8S集群中的Service和Pod
- prometheus:提供监控指标暴露
- cache:DNS缓存加速
- loop:检测DNS查询循环
- reload:支持配置文件热加载
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署CoreDNS的完整流程
2.1 前置条件检查
在开始部署前,需要确认你的K8S环境已经满足:
- 正常运行的Kubernetes集群(v1.12+)
- 集群网络插件(如Calico、Flannel等)已正确配置
- kubectl命令行工具已配置好集群访问权限
可以通过以下命令验证网络插件状态:
bash复制kubectl get pods -n kube-system | grep -E 'flannel|calico|coredns'
2.2 官方部署方案
Kubernetes官方提供了CoreDNS的部署清单模板,我们可以基于此进行定制化部署:
- 获取官方部署文件:
bash复制wget https://github.com/coredns/deployment/blob/master/kubernetes/coredns.yaml.sed
- 根据集群配置修改关键参数:
bash复制sed -e 's/CLUSTER_DNS_IP/10.96.0.10/g' \
