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 }
errors记录错误到标准输出
health访问http://localhost:8080/health可以查看其健康状态,lameduck 5s在进程关闭之前会等待5s使进程进入非健康状态
ready当所有的插件都发送了准备就绪的信号时,8181端口会返回200
kubernetes CoreDNS将根据Kubernetes的服务和Pod的IP回复DNS查询。换句话说,该插件实现了基于Kubernetes DNS的服务发现规范。ttl允许您为响应设置自定义ttl。缺省值是5秒。最小TTL为0秒,最大TTL为3600秒。将TTL设置为0将阻止记录被缓存。提供pods insecure选项是为了向后兼容kube-dns。您可以使用pods verified选项,只有在相同的名称空间中存在具有匹配IP的pod时,该选项才返回A记录。如果不使用pod记录,可以使用pods disabled选项。
prometheus:CoreDNS的度量标准可以在http://localhost:9153/Prometheus格式的指标中找到;可以通过http://localhost:9153/metrics获取prometheus格式的监控数据cache 30,表示 pttl 为30s,也就是说,一条域名解析记录在DNS缓存中的存留时间最长为30s
loop:检测简单的转发循环,如果找到循环则停止CoreDNS进程
reload:允许自动重新加载已更改的Corefile。编辑ConfigMap配置后,请等待两分钟以使更改生效loadbalance:这是一个循环DNS负载均衡器,可以在答案中随机化A,AAAA和MX记录的顺序
标签:arpa,resolv,域名,sequential,集群,DNS,coredns,k8s From: https://www.cnblogs.com/xiaoxiaomuyuyu/p/18348557