发布了一个应用后,自己和同事访问测试过都正常,就对外开放访问。很快收到报障,说无法访问。去查看发现登陆页面正常,但是输入账号密码登录后,在跳转到主界面时,一直报308错误,最后提示跳转过多停止访问。
查了下308这个代码,是永久重定向的。登录后跳转代码如下:
window.location.href = '/ops';
考虑到这个应用是在kubesphere平台上部署的,通过集群网关路由进行访问。所以我怀疑是不是路由的问题。但是毕竟诡异的是,我和另外一个同事访问都正常,而且我们的环境基本都一样,都是云桌面。但是当我用我自己的另外一个云桌面模板来测试,发现是能重现这个问题的。所以我觉得还是应用的问题。
网上找了一遍,百度、deepseek、chatgpt都问过了,按照上面的方法进行了改造还是无法解决。我怀疑是跨域问题导致的,应用本来就配置了跨域支持,但是因为没遇到过怀疑是哪里搞错了,又仔细检查了一番,把可能影响的地方都优化了下,还是没效果。
这时候没啥好办法了,想着是不是kubersphere平台的问题。所以我尝试直接使用docker进行部署,前端使用nginx代理,这样部署后应用是正常的,没有报308错误。嗯,看来真是kubersphere的问题,想着要不就用docker部署算了,但是考虑了一番,还是觉得应该找到具体的原因。
我当前的kubersphere平台的访问链如下: 用户 -> 物理负载均衡 -> haproxy -> kubesphere集群网关(Ingress) 配置了路由规则https协议访问 -> svc -> pod
我决定先绕开haproxy这里,直接访问kubesphere集群网关,看看能不能解决这个问题。测试结果:仍旧报308错误。
我发现报308的网址,并不是每次都是https的,而是http和https轮流出现。所以我怀疑是https导致的。我尝试把https换成http,结果可以正常访问。
又折腾了好久没找到原因,就在要放弃的时候,突然想起之前配置目录跳转的时候,好像URL必须是/结尾。把跳转时候的URL改成/ops/,再次配置https测试,成功了!
这个问题真是太隐晦了,就一个/的问题,居然会导致这么诡异的问题发生。
故记录下来,以后遇到类似问题,就先看看是不是/的问题。
...