k8s集群访问外部域名不稳定
pod网络模式为default时,可以访问外部域名,网络模式为cluster first时可以访问集群中域名,但是访问公司内网域名时时通时不通,有时不能完全解析。
处理方法:
在coredns的cm中,需要添加
forward . /etc/resolv.conf { max_concurrent 1000 policy sequential }
其中 forward . /etc/resolv.conf 配置表示使用当coredns内部不能解析的时候,向宿主机上的resolv.conf文件中配置的nameserver转发dns解析请求,。
当宿主机上namserver有多个时,默认采用的时random的方式随机转发,失败后就返回错误。而sequential为从第一个
编辑coredns的cm
kubectl edit cm coredns -o yaml -n kube-system
添加:policy sequential
data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 policy sequential } cache 30 loop reload loadbalance }
1.errors记录错误到标准输出
2.health访问http://localhost:8080/health可以查看其健康状态,lameduck 5s在进程关闭之前会等待5s使进程进入非健康状态
3.ready当所有的插件都发送了准备就绪的信号时,8181端口会返回200
4.kubernetes CoreDNS将根据Kubernetes的服务和Pod的IP回复DNS查询。运行 kubernetes 插件的 CoreDNS 可用作 kubernetes 集群中 kube-dns 的替代品。换句话说,该插件实现了基于Kubernetes DNS的服务发现规范。ttl允许您为响应设置自定义ttl。缺省值是5秒。最小TTL为0秒,最大TTL为3600秒。将TTL设置为0将阻止记录被缓存。提供pods insecure选项是为了向后兼容kube-dns。您可以使用pods verified选项,只有在相同的名称空间中存在具有匹配IP的pod时,该选项才返回A记录。如果不使用pod记录,可以使用pods disabled选项。
cache 30,表示 pttl 为30s,也就是说,一条域名解析记录在DNS缓存中的存留时间最长为30s
loop:检测简单的转发循环,如果找到循环则停止CoreDNS进程
reload:允许自动重新加载已更改的Corefile。编辑ConfigMap配置后,请等待两分钟以使更改生效loadbalance:这是一个循环DNS负载均衡器,可以在答案中随机化A,AAAA和MX记录的顺序
coredns是插件化(Plugins) 基于 Caddy 服务器框架,CoreDNS 实现了一个插件链的架构,将大量应用端的逻辑抽象成 plugin 的形式(如 Kubernetes 的 DNS 服务发现,Prometheus 监控等)暴露给使用者。CoreDNS 以预配置的方式将不同的 plugin 串成一条链,按序执行 plugin 的逻辑。
参考文档:
https://www.cnblogs.com/keithtt/p/13204497.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?