k8s-docker之nginx dns缓存问题排查

环境:

k8s+docker

问题描述:

由于pod生命周期问题,或程序问题引起,pod重启,或删除后重新被deployment拉起以后,pod本身ip发生改变,nginx代理到前端,或者后端的service名称无法正常解析到新的pod ip。

dns解析原理

这是nginx本身域名解析存在问题,由于只有在通过nginx第一次向proxy_pass后端对应的域名做代理数据转发时,这里nginx会通过操作系统配置的DNS服务器解析域名,此时才会缓存域名对应的IP,且会缓存很长时间,甚至一个月,由此导致pod重启后,不会重新解析到新的ip而导致nginx返回504的原因

解析图如下:

k8s-docker之nginx dns缓存问题排查_第1张图片

变更nginx配置遇到的坑

官网文档给了一个nginx自定dns服务器的配置:
resolver kube-dns.kube-system.svc.cluster.local valid=5s;
resolver_timeout 3s;
第一行:即重新指定DNS服务器, valid控制dns缓存时间,覆盖ttl值
第二行:控制域名解析超时时间。
我将这两行配置写入配置文件后,根据解析原理来说,nginx会先找系统本身的dns服务器去做对应,解析,而

你可能感兴趣的:(nginx,dns缓存问题,kubernetes,docker,nginx)