多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

K8s集群互联网外部域名外部DNS运维

K8s集群互联网外部域名外部DNS运维 K8s集群互联网外部域名外部DNS运维实操技术栈CoreDNS Kubernetes v1.32.13 Rocky Linux 8.6 公网DNS Containerd 1.7.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8s集群互联网外部域名外部DNS运维实操操作环境CoreDNS v1.11.xforward 插件配置公网DNSK8s 集群 v1.32.13Rocky Linux 8.6上游公网DNS8.8.8.8 / 1.1.1.1 / 114.114.114.114Pod 可访问互联网NAT/防火墙已放行CoreDNS cache 插件缓存外部域名响应部分外部服务通过 ExternalName Service 接入kubectl v1.32.13cluster-admin 权限对接原理外部域名解析是 K8s 集群访问互联网服务的基础CoreDNS 通过 forward 插件将非集群域名转发到上游公网 DNS。查询流程Pod 查询外部域名 - CoreDNS 接收 - 非 cluster.local 域 - forward 插件转发到上游 DNS - 上游递归/迭代查询 - 返回结果 - CoreDNS cache 缓存 - 返回 Pod。上游 DNS 选择公共 DNS8.8.8.8 Google、1.1.1.1 Cloudflare、114.114.114.114 国内、运营商 DNS、企业 DNS。forward 策略sequential顺序第一个失败用第二个、random随机、round_robin轮询health_check 自动剔除故障上游。外部域名接入 K8s1) ExternalName ServiceCNAME 别名到外部域名2) Endpoints 手动指定外部 IP3) 应用直接使用域名。注意外部域名解析依赖集群出网能力NAT/代理/防火墙需放行 DNS53端口UDP/TCP和 HTTP/HTTPS。DNS 安全防止 DNS 劫持/污染使用可信上游 DNSDNS over HTTPS/TLSCoreDNS 支持 forward tls://缓存减少外部查询。详细步骤1. 外部域名基础操作# 测试外部域名 kubectl run dns-test --imagebusybox:1.28 --rm -it -- nslookup www.baidu.com kubectl run dns-test --imagebusybox:1.28 --rm -it -- nslookup www.google.com # 查看上游DNS kubectl get configmap coredns -n kube-system -o jsonpath{.data.Corefile} | grep forward # 查看缓存命中 curl http://coredns:9153/metrics | grep coredns_cache # 测试外部服务访问 kubectl exec app-pod -- curl -I https://www.baidu.com # 查看解析路径 kubectl exec dns-test -- nslookup -debug www.baidu.com # 修改上游DNS kubectl edit configmap coredns -n kube-system kubectl rollout restart deployment coredns -n kube-system2. 排错命令# 测试上游DNS kubectl run dns-test --imagebusybox --rm -it -- nslookup www.baidu.com 8.8.8.8 # 测试集群出网 kubectl exec app-pod -- ping -c 2 8.8.8.8 # 查看CoreDNS转发日志 kubectl logs -n kube-system deploy/coredns | grep forward # 查看上游健康状态 curl http://coredns:9153/metrics | grep forward_health # 常见错误上游DNS不可达、网络不通、DNS被墙、缓存污染、转发策略不当验证流程# 1. 验证外部域名解析 kubectl run dns-test --imagebusybox:1.28 --rm -it -- nslookup www.baidu.com # 返回IP # 2. 验证上游DNS kubectl run dns-test --imagebusybox --rm -it -- nslookup www.baidu.com 8.8.8.8 # 3. 验证缓存 # 连续查询两次第二次更快 # 4. 验证ExternalName kubectl run dns-test --imagebusybox --rm -it -- nslookup external-db.default.svc.cluster.local # 5. 验证外部访问 kubectl exec app-pod -- curl -I https://www.baidu.com # 6. 验证DNS安全 # 检查是否使用TLS加密 # 7. 验证CDN # 返回CDN节点IP排错方案外部域名解析失败检查上游DNS是否可达网络/NAT/防火墙forward配置是否正确CoreDNS是否有出网权限53端口UDP/TCP是否放行上游DNS是否故障解析慢检查上游DNS延迟nslookup 上游缓存命中率网络出口带宽DNS服务器地理位置国内用114/223.5.5.5增加CoreDNS副本解析到错误IPDNS劫持/污染使用加密DNSDoT/DoHhosts强制覆盖更换可信上游DNS清除缓存检查是否被运营商劫持ExternalName不工作检查externalName格式标准域名不带http://Service类型是否ExternalNamePod内使用全限定名CNAME目标是否可解析缓存不更新域名IP变更后缓存未过期调整TTL重启CoreDNS清缓存使用低TTL域名检查上游DNS TTL客户端缓存部分域名解析失败上游DNS对特定域名支持差分域转发国内域名用国内DNS使用多个上游检查是否被GFW干扰使用代理DNS查询超时max_concurrent限制CoreDNS负载高上游DNS超时网络丢包增加CoreDNS副本调整forward超时使用NodeLocal DNSCache外部服务访问失败DNS解析成功但连接失败检查NAT/防火墙/代理HTTPS证书服务是否可用是否需要配置HTTP_PROXY网络策略出站规则
返回列表