K8s中Minio通过NGINX Ingress出现ERR_TOO_MANY_REDIRECTS问题求助
Minio通过NGINX Ingress出现ERR_TOO_MANY_REDIRECTS的解决思路
这个循环重定向的坑我之前也踩过,本质是Minio的Web UI和API在生成重定向URL的时候,没有感知到外部访问的路径前缀/minio,导致它会把请求重定向到根路径/,而NGINX Ingress又会把这个根路径请求再次转发到/minio,一来一回就形成了无限循环,直接触发ERR_TOO_MANY_REDIRECTS。
给你几个针对性的解决思路,按优先级排序:
1. 给Minio配置外部访问前缀(最推荐)
Minio本身支持通过环境变量或启动参数指定外部访问的URL前缀,这样它生成的所有重定向、页面链接都会自动带上/minio,从根源上解决问题。
修改你的Minio Deployment,添加以下环境变量:
spec: template: spec: containers: - name: minio image: minio/minio:latest env: # 指定Minio API的外部访问前缀 - name: MINIO_SERVER_URL value: "http://你的域名/minio" # 指定Minio控制台的外部访问前缀(新版Minio控制台默认在9001端口) - name: MINIO_CONSOLE_URL value: "http://你的域名/minio/console" command: - minio - server - /data - --address - ":9000" - --console-address - ":9001"
如果是旧版Minio(控制台和API同端口),只需要设置MINIO_SERVER_URL即可。
2. 调整NGINX Ingress的代理重定向配置
如果暂时不想改Minio的部署,可以通过NGINX Ingress的注解来修正Minio返回的重定向URL,把Minio返回的/替换成/minio/:
更新你的Ingress配置:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-service annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$1 # 修正Minio返回的重定向URL nginx.ingress.kubernetes.io/proxy-redirect-from: / nginx.ingress.kubernetes.io/proxy-redirect-to: /minio/ spec: rules: - http: paths: - path: /app/?(.*) backend: serviceName: app-service servicePort: 3000 - path: /minio/?(.*) backend: serviceName: minio-service servicePort: 9000
这个注解会让NGINX自动修改Minio返回的3xx重定向响应中的Location头,把根路径替换成/minio/,打断循环。
3. 拆分Minio API和控制台的Ingress路径
新版Minio的Web控制台默认运行在9001端口,和9000的API端口分离,你可以在Ingress里分别配置两个路径,避免路径冲突:
spec: rules: - http: paths: - path: /app/?(.*) backend: serviceName: app-service servicePort: 3000 # 处理Minio API请求 - path: /minio/?(.*) backend: serviceName: minio-service servicePort: 9000 # 处理Minio控制台请求 - path: /minio/console/?(.*) backend: serviceName: minio-service servicePort: 9001
配合前面的MINIO_CONSOLE_URL环境变量,就能让控制台的页面链接都指向正确的路径。
一般来说,第一种方法是最彻底的,从Minio自身配置出发解决问题,后面两种可以作为临时方案或者补充。
内容的提问来源于stack exchange,提问作者Yuci
相关产品推荐
相关产品推荐

