<返回更多

Ingress-nginx自定义配置文件

2020-08-31    
加入收藏
Ingress-nginx自定义配置文件

 

k8s集群默认安装的ingress-Nginx直接投入测试或生产使用,其不合适的配置参数可能会导致一些访问报错。
例如:

此时我们就需要调整ingress-nginx的配置参数来解决问题,有以下三种方式:

在此只介绍下比较常见的ConfigMap、Annotations两种方式。

需求

在此主要以解决以下两个问题为例:

  1. “413 Request Entity Too Large”
    此问题为上传文件过大导致,nginx默认限制为1M,可以通过调整client_max_body_size参数解决。
  2. upstream超时
    upstream超市可能会导致502、503、504等问题,nginx默认超时时间为60s,可以通过设置proxy_read_timeout、proxy_connect_timeout、proxy_send_timeout参数解决。

ConfigMap

1. 默认配置

默认ingress-nginx的ConfigMap有以下三种并且数据都为空

# 默认的三种ConfigMap
# kubectl get cm -n ingress-nginx
NAME                              DATA   AGEingress-controller-leader-nginx   0      10d
nginx-configuration               0      10d
tcp-services                      0      10d
udp-services                      0      10d
# ConfigMap定义# vim mandatory# 截取ConfigMap部分---kind: ConfigMapapiVersion: v1metadata:  name: nginx-configuration  namespace: ingress-nginx
  labels:    App.kubernetes.io/name: ingress-nginx    app.kubernetes.io/part-of: ingress-nginx---kind: ConfigMapapiVersion: v1metadata:  name: tcp-services  namespace: ingress-nginx
  labels:    app.kubernetes.io/name: ingress-nginx    app.kubernetes.io/part-of: ingress-nginx---kind: ConfigMapapiVersion: v1metadata:  name: udp-services  namespace: ingress-nginx
  labels:    app.kubernetes.io/name: ingress-nginx    app.kubernetes.io/part-of: ingress-nginx

其中:

  1. 具体设置
    调整参数我们需要选择对应的ConfigMap,经过测试需要选择nginx-configuration。
# vim global_configmap.yaml
# ingress-nginx 全局配置文件apiVersion: v1kind: ConfigMapmetadata:  name: nginx-configuration  namespace: ingress-nginx  labels:    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:  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

注意:

$ cat configmap.yaml
apiVersion: v1data:  proxy-connect-timeout: "10"
  proxy-read-timeout: "120"
  proxy-send-timeout: "120"
kind: ConfigMapmetadata:  name: ingress-nginx-controller

 

Annotations

ConfigMap适用于全局配置,但是有时我们只需要针对某个特定的站点设置,此时就需要用到Annotations。
例如:要对hello.test.cn 这个站设置client_max_body_size解决上传文件太大问题。

# vim hellworld.yaml
# 单独设置IngressapiVersion: extensions/v1beta1kind: Ingressmetadata:  name: helloworld  namespace: test  annotations:    nginx.ingress.kubernetes.io/proxy-body-size: 300m
spec:  rules:    - host: hello.test.cn      http:        paths:          - path: /
            backend:              serviceName: helloworld              servicePort: 8080
# 应用# kubectl apply -f helloworld.yaml# 验证# kubectl exec -it nginx-ingress-controller-gmzq6 -n ingress-nginx -- cat /etc/ng
client_max_body_size                    300m;

此时client_max_body_size只针对hello.test.cn 这个server生效,其他server仍然使用的是全局配置文件。

 

总结

在ingress-nginx的配置文件/etc/nginx/nginx.conf中指定了Global filters、TCP services、UDP services区域,应该分别对应三个ConfigMap。
熟悉了ingress-nginx的自定义配置后,我们就可以灵活修改配置参数了。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>