应遵循哪个Ingress文档?如何将nginx.conf应用至指定Ingress?
Nginx Ingress控制器自定义nginx.conf配置指南
一、能不能直接用已生效的nginx.conf?
分两种控制器情况:
- Kubernetes官方维护的ingress-nginx:不能直接全盘替换默认生成的nginx.conf,因为控制器会根据Ingress资源、服务配置自动生成核心规则。但可以通过ConfigMap添加自定义的配置片段(全局、server或location级),嵌入到默认配置里。
- NGINX官方出品的Ingress控制器:支持通过ConfigMap提供完整的自定义nginx.conf,但必须保留控制器要求的占位符(比如
{{.Upstreams}}、{{.Servers}}),否则Ingress规则无法被控制器注入生效。
二、用ConfigMap配置自定义nginx配置
1. 针对kubernetes ingress-nginx
先创建包含自定义配置的ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: nginx-custom-config namespace: ingress-nginx # 要和Ingress控制器在同一个命名空间 data: # 全局配置片段,会被嵌入到默认nginx.conf的http块中 nginx.conf: | proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 自定义location级配置,后续可以在Ingress中引用 webapp-location.conf: | proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port;
然后确保Ingress控制器的Deployment挂载了这个ConfigMap——官方默认部署的控制器已经支持挂载额外ConfigMap,只需修改控制器的主ConfigMap(默认名为ingress-nginx-controller),或者在Deployment的volume中添加这个ConfigMap的挂载路径(比如/etc/nginx/conf.d/)。
2. 针对NGINX官方Ingress控制器
创建包含完整nginx.conf的ConfigMap,注意必须保留占位符:
apiVersion: v1 kind: ConfigMap metadata: name: nginx-custom-config namespace: nginx-ingress # 控制器所在命名空间 data: nginx.conf: | events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; # 必须保留这两个占位符,控制器会自动注入Ingress对应的上游和服务器规则 {{.Upstreams}} {{.Servers}} # 你的自定义全局配置 proxy_connect_timeout 60s; }
接着在控制器的启动参数中指定使用这个ConfigMap:添加-nginx-configmap=nginx-ingress/nginx-custom-config(格式为命名空间/ConfigMap名称),或者在控制器的配置文件中指定。
三、将配置应用到你的Ingress资源
对于kubernetes ingress-nginx
如果要给这个Ingress添加location级的自定义配置,在Ingress的annotations里引用ConfigMap中的配置片段:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress annotations: # 直接写入配置片段,或者引用ConfigMap中的文件 nginx.ingress.kubernetes.io/configuration-snippet: | include /etc/nginx/conf.d/webapp-location.conf; spec: tls: - hosts: - "*.mydomain.com" secretName: mydomain-ssl rules: - host: "*.mydomain.com" http: paths: - pathType: Prefix path: "/" backend: service: name: my-webapp port: number: 8080
如果是全局配置,只要控制器挂载了ConfigMap,无需修改Ingress资源就能生效。
对于NGINX官方Ingress控制器
只要你的自定义nginx.conf保留了必要的占位符,控制器会自动把这个Ingress的规则注入到nginx.conf中,不需要修改Ingress资源,确保控制器使用了对应的ConfigMap即可。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

