<>环境:
k8s+docker
<>问题描述:
由于pod生命周期问题,或程序问题引起,pod重启,或删除后重新被deployment拉起以后,pod本身ip发生改变,nginx代理到前端,或者后端的service名称无法正常解析到新的pod
ip。
<>dns解析原理
这是nginx本身域名解析存在问题,由于只有在通过nginx第一次向proxy_pass后端对应的域名做代理数据转发时,这里nginx会通过操作系统配置的DNS服务器解析域名,此时才会缓存域名对应的IP,且会缓存很长时间,甚至一个月,由此导致pod重启后,不会重新解析到新的ip而导致nginx返回504的原因
<>解析图如下:
<>变更nginx配置遇到的坑
官网文档给了一个nginx自定dns服务器的配置:
resolver kube-dns.kube-system.svc.cluster.local valid=5s;
resolver_timeout 3s;
第一行:即重新指定DNS服务器, valid控制dns缓存时间,覆盖ttl值
第二行:控制域名解析超时时间。
我将这两行配置写入配置文件后,根据解析原理来说,nginx会先找系统本身的dns服务器去做对应,解析,而