Kubernetes Ingress安全配置踩坑记
在为React微服务架构搭建API网关时,我们遇到了一个典型的Ingress安全配置问题。最初,我们使用了标准的Nginx Ingress Controller,但在生产环境中发现存在严重的安全漏洞。
问题复现步骤
首先,我们在Kubernetes集群中部署了标准的Ingress资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-gateway
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
踩坑经历
部署后发现,虽然HTTPS配置生效,但存在以下问题:
- 路径重写不完整 - 某些React微服务的路由在重定向后出现404错误
- 安全头缺失 - 缺少CSP、X-Frame-Options等安全头部
- 访问控制不足 - 未限制特定IP段访问,导致API被恶意扫描
解决方案
通过添加自定义配置和调整Ingress注解解决:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-gateway
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,172.16.0.0/12
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
实践建议
对于React微服务架构,建议将Ingress配置与服务路由策略紧密结合,避免在统一入口处出现路由冲突。同时,必须建立完整的安全头配置清单,确保API网关的安全性。

讨论