在Kubernetes环境中如何正确的配置Nginx

原创
2021/01/03 17:39
阅读数 2K

#常规的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错误
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部