问题症状
Nginx的错误日志里:no resolver defined to resolve example.com
就是提示你没有定义resolver指令,Nginx就这样,它不理会系统的DNS(/etc/resolv.conf)配置, 如果你在配置文件中使用了域名或主机名,一定要配置resolver指令。
1 临时修改
查看 pod 的 dns 配置
kubectl exec -it <pod name> -- cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local home
nameserver 10.96.0.10
options ndots:5
nginx 里 指定 nameserver IP
http {
server {
resolver 10.96.0.10 valid=10s;
2 永久,指定全限定域名(FQDN)
resolver kube-dns.kube-system.svc.cluster.local valid=5s;
location /app {
proxy_pass http://webapp.default.svc.cluster.local;
# proxy_pass http://svc-xman-baseline-fe-insight.xman.svc.cluster.local:8080 加端口的
}
# note default and kube-system explicit namespaces)
# webapp is Kuberentes service name
3 ship
pop名称 xcsc-xcommon-web-gateway-m7v8v-59fbbbbcd-bhk9q
负载均衡 域名 xcsc-xcommon-web-gateway.dev.test.za-tech.net 端口9006
服务地址 svc-xcsc-xcommon-web-gateway.dev:9006
location /app {
proxy_pass http://xcsc-xcommon-gateway.dev.test.za-tech.net;
}
## ship 中 基础镜像 nginx 版本下加入 resolver,才可以解析 域名
http{
resolver local=on valid=5s;
}
如果ship 没有域名解析,用svc 地址
http://xcsc-xcommon-gateway.dev.svc.cluster.local:8080