基于K3s搭建GitOps环境3-配置内网域名
一、核心定位
本文作为GitOps环境搭建系列的第三篇,聚焦CoreDNS内网域名解析的配置与优化。CoreDNS是K3s集群默认集成的DNS服务器,负责处理集群内部的域名解析(如Service域名、Pod域名等)。
在GitOps环境中,CoreDNS扮演”域名解析中枢”角色,为所有组件(Traefik、Gitea、ArgoCD、Tekton、Harbor等)提供统一的内网域名解析服务。通过配置自定义域名映射,可以实现通过易记的域名访问各组件,替代复杂的IP地址访问方式,提升运维效率和可维护性。
二、部署前置检查
部署前需验证K3s集群状态及CoreDNS基础运行情况:
1 | # 1. 验证K3s集群状态 |
前置条件检查清单:
- K3s集群运行正常
- CoreDNS Pod处于Running状态
- 内网IP地址可达且稳定
- 已规划好内网域名体系(统一使用example.io)
- 具备kube-system命名空间操作权限
三、持久化配置CoreDNS
K3s启动时会自动部署CoreDNS组件,但直接修改CoreDNS配置文件(如编辑ConfigMap或修改/var/lib/rancher/k3s/server/manifests/coredns.yaml)存在明显缺陷——K3s重启、升级时会自动初始化CoreDNS配置,所有手动修改的内容会被覆盖。因此,需采用K3s官方推荐的coredns-custom ConfigMap持久化配置方案。
3.1 创建coredns-custom ConfigMap
创建coredns-custom.yaml配置文件,定义内网域名解析规则:
1 | # coredns-custom.yaml |
关键配置详解:
gitops.server:CoreDNS约定,后缀为.server的配置片段会被自动加载example.io:内网根域名,所有GitOps组件域名基于此配置hosts段:核心的域名-IP映射区域,按实际网络环境配置fallthrough:当hosts中无匹配域名时,转发至forward指定的解析器forward . /etc/resolv.conf:非内网域名转发至宿主机DNS
3.2 应用ConfigMap配置
1 | # 应用CoreDNS自定义配置 |
3.3 重启CoreDNS使配置生效
1 | # 重启CoreDNS Pod加载新配置 |
四、验证内网DNS解析
4.1 创建测试环境
1 | # 创建测试Pod |
4.2 执行解析测试
1 | # 进入测试Pod |
4.3 验证解析结果
解析结果应显示对应的IP地址:
traefik.example.io→192.168.1.100harbor.example.io→192.168.1.101gitea.example.io→192.168.1.102- 外网域名应正常解析
4.4 清理测试资源
1 | # 清理测试Pod |
五、进阶配置:暴露CoreDNS供集群外访问
若需让K3s集群外的设备(如开发机、其他服务器)使用CoreDNS解析内网域名,可通过Traefik暴露CoreDNS的UDP 53端口。
5.1 配置Traefik UDP入口点
首先确保Traefik已启用UDP支持,编辑Traefik配置:
1 | # 在Traefik HelmChartConfig中添加UDP入口点 |
5.2 创建IngressRouteUDP规则
1 | # coredns-external.yaml |
应用配置:
1 | kubectl apply -f coredns-external.yaml |
5.3 集群外设备配置
在集群外设备上配置DNS服务器:
1 | # Linux系统 |
六、生产环境配置建议
6.1 高可用配置
1 | # 配置多个DNS服务器 |
6.2 性能优化
1 | # 调整缓存和性能参数 |
6.3 安全配置
1 | # 限制访问范围 |
七、常见问题修复
| 问题现象 | 排查方向 | 修复方案 |
|---|---|---|
| 域名解析失败 | CoreDNS配置/网络 | 检查coredns-custom ConfigMap,验证网络连通性 |
| 解析结果不正确 | hosts映射错误 | 检查IP地址是否正确,确认网络可达 |
| CoreDNS Pod重启失败 | 配置语法错误 | 检查CoreDNS日志:kubectl logs -n kube-system <coredns-pod> |
| 外网域名无法解析 | forward配置 | 检查/etc/resolv.conf内容,测试外网连通性 |
| 配置修改不生效 | 未重启CoreDNS | 重启CoreDNS Pod:kubectl delete pods -n kube-system -l k8s-app=kube-dns |
八、配置参考
所有CoreDNS配置文件和部署脚本请参考:
https://gitee.com/Chemmy/kube-template/tree/master/devops/coredns
该目录包含:
- CoreDNS自定义配置模板
- 生产环境优化配置
- 外部访问配置示例
- 监控和日志配置
总结
本文完成了CoreDNS在K3s集群中的持久化配置,实现了GitOps组件内网域名解析功能。通过coredns-custom ConfigMap方案,确保配置在K3s重启、升级后不丢失,保障域名解析服务的稳定性。
配置完成后,所有GitOps组件(Traefik、Gitea、ArgoCD、Tekton、Harbor)均可通过统一的example.io域名访问,极大简化了运维操作。下一篇文章将部署cert-manager证书管理,为所有组件配置HTTPS安全访问。