如何配置Nginx Ingress仅开放指定路径,其余路径返回403?
配置Nginx Ingress实现指定路径访问控制
要实现仅允许访问/code-refiner/和/v1/unsubscribed/*路径,其余所有路径返回403错误,可按以下方式修改Ingress配置:
修改后的Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: code-refiner-service-ingress-external namespace: backend annotations: kubernetes.io/ingress.class: nginx-external # 插入自定义Nginx规则,拦截未匹配路径返回403 nginx.ingress.kubernetes.io/configuration-snippet: | location / { deny all; return 403; } spec: rules: - host: code-refiner.example.com http: paths: # 允许访问/code-refiner/前缀路径 - backend: service: name: code-refiner-service port: number: 80 path: /code-refiner/ pathType: Prefix # 允许访问/v1/unsubscribed/前缀路径(包含所有子路径) - backend: service: name: code-refiner-service port: number: 80 path: /v1/unsubscribed/ pathType: Prefix
关键配置说明
- 路径匹配优先级:Nginx Ingress会优先匹配更具体的路径规则,因此先定义允许访问的两个前缀路径,再通过
configuration-snippet设置全局默认拦截规则。 - 自定义Nginx规则:
nginx.ingress.kubernetes.io/configuration-snippet注解用于插入原生Nginx配置,这里的规则会拦截所有未被前面路径匹配到的请求,直接返回403错误。 - 路径类型说明:使用
Prefix类型匹配路径前缀,确保/v1/unsubscribed/下的所有子路径(如/v1/unsubscribed/123)都能被正常访问。
如果后端服务需要路径重写(比如将/code-refiner/xxx重写为/xxx),可添加重写注解并调整路径规则:
# 在metadata.annotations中添加 nginx.ingress.kubernetes.io/rewrite-target: /$2 # 对应调整路径规则,以/code-refiner/为例 path: /code-refiner(/|$)(.*)
内容的提问来源于stack exchange,提问作者Rocky
相关产品推荐
相关产品推荐

