ingress-nginx 参数设置
一般有两部分,一部分为通用的直接设置在nginx中的,这部分可以到对应的ConfigMap中去寻找并使用。默认的基本不用修改。还有是每个ingress定制的一些参数,如websocket,header,等在nginx.server节点中配置的参数。
效果验证
- 一般可以通过应用的请求效果验证, 比较简单.
- 也可以通过nginx-ingress-controller中的容器的日志和配置文件验证。最有效。
2.1 默认位置在pod[nginx-ingress-controller]-容器[nginx]中nginx的配置目录中(如果有多个pod,只需要观察其中一个即可,配置是相同的),即/etc/nginx/conf.d
中的.conf
文件。该文件即为最终效果。
2.2 通过修改pod的对应配置文件来改变最终的配置文件,通过对比查看是否生效。
设置方法
- 配置添加的位置一般为
metadata.annotations
,配置为k-v
类。 - 由于使用的ingrss-nginx容器不同,参数名有所不同(如:
nginx.ingress.kubernetes.io
、kubernetes.io
、nginx.org
等前缀),具体要看对应的文档。最直接有效。 - 为了方便可以使用以下方法:
metadata:
annotations: #使用不同的key设置下参数名
kubernetes.io/proxy-read-timeout: '1801' #设置不同的参数值,来检验
nginx.org/proxy-read-timeout: '1802' #根据nginx配置文件,
nginx.ingress.kubernetes.io/proxy-read-timeout: '1800' #可以知道具体那种方式生效。
- 对于
websocket
配置,可以设置:
metadata:
annotations:
nginx.org/websocket-services: service-name <---你的服务名 #前缀根据上一步的结果设置
nginx.org/proxy-http-version: "1.1" #建议同时设置以下参数
nginx.org/proxy-read-timeout: "3600"
nginx.org/proxy-send-timeout: "3600"
这些参数可以让nginx-ingress-controller在配置文件中自动生成websocket
所需要的配置。效果如下:
server {
location / {
set $service service-name; <---服务名
proxy_http_version 1.1; <--- websocket需要的配置
proxy_set_header Upgrade $http_upgrade; <--- websocket需要的配置
proxy_set_header Connection $connection_upgrade; <--- websocket需要的配置
proxy_connect_timeout 30s;
proxy_read_timeout 1800s;
proxy_send_timeout 3602s;
}
}
以上经验可以解决rancher在远程访问时,无法链接到websocket端的问题。
该问题会导致在UI页面查看日志 和 打开容器的命令窗口是失效,表现为无法连接和ws连接失败。