文章插图
【Ingress-nginx自定义配置文件】
k8s集群默认安装的ingress-Nginx直接投入测试或生产使用,其不合适的配置参数可能会导致一些访问报错 。
例如:
- “413 Request Entity Too Large”
- “503 Service Unavailable”
- ConfigMap
使用ConfigMap设置Nginx的全局配置文件 - Annotations
使用Annotations设置特定Server的配置文件,如:某个hello.test.cn - Custom Template
使用模板设置更多的特定Server的配置文件
需求在此主要以解决以下两个问题为例:
- “413 Request Entity Too Large”
此问题为上传文件过大导致,nginx默认限制为1M,可以通过调整client_max_body_size参数解决 。 - upstream超时
upstream超市可能会导致502、503、504等问题,nginx默认超时时间为60s,可以通过设置proxy_read_timeout、proxy_connect_timeout、proxy_send_timeout参数解决 。
默认ingress-nginx的ConfigMap有以下三种并且数据都为空
# 默认的三种ConfigMap# kubectl get cm -n ingress-nginxNAMEDATAAGEingress-controller-leader-nginx010dnginx-configuration010dtcp-services010dudp-services010d# ConfigMap定义# vim mandatory# 截取ConfigMap部分---kind: ConfigMapapiVersion: v1metadata:name: nginx-configurationnamespace: ingress-nginxlabels:App.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx---kind: ConfigMapapiVersion: v1metadata:name: tcp-servicesnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx---kind: ConfigMapapiVersion: v1metadata:name: udp-servicesnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
其中:- 三种ConfigMap都没有Data设置,因此数据定义都为空;
- nginx-ingress-controller分别引用nginx-configuration、 tcp-services、 udp-services三个ConfigMap 。
- 具体设置
调整参数我们需要选择对应的ConfigMap,经过测试需要选择nginx-configuration 。
# vim global_configmap.yaml# ingress-nginx 全局配置文件apiVersion: v1kind: ConfigMapmetadata:name: nginx-configurationnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxdata:proxy-connect-timeout: "300"proxy-read-timeout: "300"proxy-send-timeout: "300"proxy-body-size: "200m"# 应用后,nginx会自动reload生效kubectl apply -f global_configmap.yaml# 检查配置文件kubectl exec -it nginx-ingress-controller-gmzq6 -n ingress-nginx -- cat /etc/nginx/nginx.conf
注意:- 使用nginx-configuration,而不是tcp-services和udp-services 。
- 经测试,按照官网"https://kubernetes.github.io/ingress-nginx/examples/customization/custom-configuration/"设置,ConfigMap使用ingress-nginx-controller是不生效的,因为没有ingress-nginx-controller这个ConfigMap,需要使用nginx-configuration 。
$ cat configmap.yamlapiVersion: v1data:proxy-connect-timeout: "10"proxy-read-timeout: "120"proxy-send-timeout: "120"kind: ConfigMapmetadata:name: ingress-nginx-controller
- 在此我将全局配置文件单独列出,也可以将其合并到mandatory.yaml中 。
AnnotationsConfigMap适用于全局配置,但是有时我们只需要针对某个特定的站点设置,此时就需要用到Annotations 。
例如:要对hello.test.cn 这个站设置client_max_body_size解决上传文件太大问题 。
# vim hellworld.yaml# 单独设置IngressapiVersion: extensions/v1beta1kind: Ingressmetadata:name: helloworldnamespace: testannotations:nginx.ingress.kubernetes.io/proxy-body-size: 300mspec:rules:- host: hello.test.cnhttp:paths:- path: /backend:serviceName: helloworldservicePort: 8080# 应用# kubectl apply -f helloworld.yaml# 验证# kubectl exec -it nginx-ingress-controller-gmzq6 -n ingress-nginx -- cat /etc/ngclient_max_body_size300m;
此时client_max_body_size只针对hello.test.cn 这个server生效,其他server仍然使用的是全局配置文件 。总结在ingress-nginx的配置文件/etc/nginx/nginx.conf中指定了Global filters、TCP services、UDP services区域,应该分别对应三个ConfigMap 。
熟悉了ingress-nginx的自定义配置后,我们就可以灵活修改配置参数了 。
推荐阅读
- 利用AOP自定义Redis缓存注解
- 数据库不能存储Emoji表情,又不想改配置文件,怎么办?
- 凯蒂阿姨的自定义 Mac 终端
- 为Python图形界面添加自定义函数功能
- C语言的自定义输入和输出的三种方法
- Bash技巧:介绍一个可以增删改查键值对格式配置文件的Shell脚本
- GCNN 使用Keras构建具有自定义结构和层次的图卷积神经网络
- Spring Boot读取配置文件的几种方式「值得收藏」
- MySQL进阶之配置文件说明
- 超级推荐新品推广怎么使用 超级推荐自定义推广