有一些应用场景下我们会在k8s集群内部署nginx,通过自定义路径将请求转发到k8s集群内特定的服务。
查询集群内的DNS解析
cat /etc/resolv.conf
172.20.0.10 是集群内DNS解析使用的IP
配置nginx的转发
resolver 172.20.0.10 valid=5s;
location ^~ /site/domain/check-dns/ {
set $service xxx-service.[namespace].svc.cluster.local;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://$service/$request_uri;
}
- 利用nginx的resolver动态解析k8s svc域名,获取svc服务endpoint对应的IP;
- 设置变量$service 定义成svc的内部域名,此域名一定要用集群内完整的地址,格式:
service-name.namespace.svc.cluster.local - 配置转发 proxy_pass
http://$service/$request_uri;利用内置变量$request_uri可以将匹配的URL/site/domain/check-dns一起转发到后端服务。
这样的配置可以解决后端的Pod发生变更(如:更新,迁移)时所有的请求仍可以正常的转发到后端服务。