#常规的Nginx 代理配置
http {
#这里省略若干配置
server {
#port
listen 80;
#domain
server_name xxx.xxx.xxx;
#proxy server
location / {
#
proxy_pass http://${服务名}.${命名空间}.svc.cluster.local:${端口};
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
break;
}
}
}
proxy_pass http://${serviceName}.${namespace}.svc.cluster.local:${port}
#这样写有什么问题?
- 1.在服务不重启的情况下无法获取域名变更后的IP
- 2.如果域名不存在,Nginx则无法启动,在kubernetes集群中,service删除与构建的频率较高
#优化后的Nginx 代理配置
http {
#这里省略若干配置
server {
#port
listen 80;
#domain
server_name xxx.xxx.xxx;
#将DNS指向kubernetes集群内的DNS
resolver kube-dns.kube-system.svc.cluster.local valid=30s;
#${xxx}根据实际kubernetes集群内部署的服务名称与命名空间,端口进行替换即可
set $endpoint_service ${服务名}.${命名空间}.svc.cluster.local:${端口};
#proxy server
location / {
proxy_pass http://$endpoint_service;
#istio下http协议必须大于等于1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
break;
}
}
}
resolver kube-dns.kube-system.svc.cluster.local valid=30s;
- 增加dns解析配置
set $endpoint_service ${serviceName}.${namespace}.svc.cluster.local:${port};
proxy_pass http://$endpoint_service;
- 以变量方式设置目标域名,如果目标域名不存在也不会影响Nginx启动,当有请求时则会返回Nginx503错误