1. Ingress-Nginx 路由重写核心原理当你用手机点外卖时地址栏输入www.外卖平台.com/restaurant/1234实际后端服务接收的可能是/api/v1/restaurants/1234。这种表里不一的路径转换正是Ingress-Nginx路由重写的魔法所在。rewrite-target就像个翻译官它会把外部路径按规则重组。比如这个配置nginx.ingress.kubernetes.io/rewrite-target: /v2/$2当用户访问/shop/item/5566时$2会捕获item/5566最终传给后端的是/v2/item/5566。我曾在电商项目中用这个技巧让前端团队用短路径/p/手机型号而后端保持规范的RESTful路径/products/electronics/phones。正则表达式是路由匹配的瑞士军刀。开启use-regex: true后这个路径规则path: /shop(/|$)(.*)会匹配所有以/shop开头的请求(.*)捕获后续路径。曾经踩过坑忘记加(/|$)导致/shopcart也被误匹配后来才明白这是精确匹配/shop或/shop/的语法糖。2. 多服务路由分发实战想象小区快递柜快递员根据包裹大小路径决定放入哪个柜格服务。这个配置就是智能分拣系统paths: - path: /static backend: static-service - path: /api backend: api-serviceconfiguration-snippet是高级玩家的自定义工具箱。有次需要特殊跳转规则nginx.ingress.kubernetes.io/configuration-snippet: | if ($request_uri ~* /legacy/(.*)) { return 301 /modern/$1; }这相当于在Nginx配置里直接写location块。但要注意过度使用会使配置变成面条代码建议复杂逻辑还是用单独的ConfigMap管理。遇到前后端分离架构时可以这样配置paths: - path: / backend: frontend - path: /api backend: backend关键点在于pathType: Prefix要设置正确否则/api/v2可能无法正确路由。实测发现如果后端是Spring Boot还需要配合server.servlet.context-path使用。3. 路径保留与截断技巧有时需要像理发师一样修剪URL。比如用户访问/gateway/user/profile但后端只需要/user/profile。这两种方案都能实现方案Arewrite-targetpath: /gateway(/|$)(.*) rewrite-target: /$2方案Bconfiguration-snippetconfiguration-snippet: | rewrite ^/gateway/(.*)$ /$1 break;我在日志系统里对比过二者性能rewrite-target更规范但灵活性稍差configuration-snippet性能略优约3%请求处理速度提升。注意break关键字很重要没有它会导致无限重定向循环。带斜杠的路径处理是个暗礁。比如path: /admin(/|$)(.*) proxy_pass: http://backend/结尾的/决定是否保留admin路径。有次线上事故就是因为漏了这个斜杠导致后端收到/admin/user而非预期的/user。4. 高级场景配置秘籍SSE服务器推送事件需要特殊配置annotations: nginx.ingress.kubernetes.io/proxy-buffering: off nginx.ingress.kubernetes.io/proxy-read-timeout: 3600在大模型流式输出场景中必须关闭缓冲并延长超时。某次AI客服项目就因默认30秒超时导致长对话中断调整后才稳定。CORS跨域问题的终极方案nginx.ingress.kubernetes.io/enable-cors: true nginx.ingress.kubernetes.io/cors-allow-methods: PUT, GET, POST但遇到复杂场景时还是得用configuration-snippet写完整CORS头。有个移动端项目就因为漏了Access-Control-Allow-Credentials: true导致cookie无法传递。流量镜像是灰度发布的神器nginx.ingress.kubernetes.io/mirror-target: http://new-version:8080设置5%流量镜像到新版本nginx.ingress.kubernetes.io/mirror-percent: 5但要注意镜像请求的响应会被丢弃只能用于监控异常率。5. 性能调优与排错超时配置的黄金组合proxy-connect-timeout: 15 proxy-read-timeout: 60 proxy-send-timeout: 60金融项目里发现连接超时设太短5秒会导致海外用户频繁超时。但也不宜过长否则会耗尽Ingress的worker连接池。日志增强配置log-format-upstream: $remote_addr - $remote_user [$time_local] $request我曾用这个格式捕获到恶意爬虫GET /api/products?page1 HTTP/1.1 200 GET /api/products?page2 HTTP/1.1 200 ...连续500次相同模式启用gzip压缩能显著提升文本API性能use-gzip: true gzip-types: application/json, text/css但注意不要压缩已压缩的格式如JPEG实测发现反而会增加5-7%的CPU开销。6. 安全加固方案请求头过滤防止注入攻击configuration-snippet: | proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;速率限制防DDoSnginx.ingress.kubernetes.io/limit-rps: 100电商大促时我们配合地理围栏使用nginx.ingress.kubernetes.io/whitelist-source-range: 192.168.0.0/24TLS强化配置ssl-ciphers: ECDHE-ECDSA-AES128-GCM-SHA256 ssl-protocols: TLSv1.2 TLSv1.3金融项目审计时这个配置让安全评分从B提升到A。7. 经典踩坑案例案例1正则捕获组不匹配path: /v1/(.*) rewrite-target: /api/$1当访问/v1没有斜杠时$1捕获空值最终路径变成/api/。解决方案path: /v1(/|$)(.*)案例2Cookie丢失 因为Path属性不匹配需要设置nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/session-cookie-path: /案例3WebSocket连接闪断 需要特别配置proxy-http-version: 1.1 proxy-set-header Upgrade $http_upgrade proxy-set-header Connection upgrade某在线教育平台就因漏了这些头导致白板协作功能在iOS端异常。