You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应遵循哪个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:15:58