鱼er鱼
1
ksd
2
通过 docker run 的 rancher 自带的 local 集群是支撑 rancher 运行的,由于网络的隔离,不建议部署自己的业务在 local 集群中,要不你新建个集群试试?
鱼er鱼
3
问题已经进一步聚焦到确实是rancher(或者也可能是k3s集群)的问题(但不是airflow的问题),验证过程如下:
将原有的airflow的pod改为空命令启动,然后手动进入容器内,用nc命令起一个简单的webserver进行观察,如下两组对比:
A: echo “listing 8080” && while true; do echo -e “HTTP/1.1 200 OK\nContent-Type: text/html; charset=utf-8\n\n<”‘!’“DOCTYPE html>\n<a href="/date">date” | nc -l -k -p 8080 -q 1; done
Out: <a href="/api/v1/namespaces/airflow273/services/http:test-proxy:8080/proxy/date">date</a>
B: echo “listing 8080” && while true; do echo -e “HTTP/1.1 200 OK\n\n<”‘!’“DOCTYPE html>\n<a href="/date">date” | nc -l -k -p 8080 -q 1; done
Out: <a href="/date">date</a>
上述实验,webserver不存在任何对链接进行改写的逻辑,但验证了,proxy访问后端服务时,会主动改写某些字符串,包括a链接、link地址、script地址,等,但,问题点在于,某些业务,在meta标签中存储链接地址以便给ajax交互时使用,由于没有对meta中存储的链接进行改写,导致了前述错误。
排查中也发现,proxy在从后端获取结果并返回给浏览器时,改写了response的Content-Type,将其从“Content-Type: text/html”改为了“Content-Type: text/plan”,导致很长时间才发现这个突破口。
建议/期望:1、通过环境变量、或标签的形式,可以自行添加指定额外的标签值重写。2、保留response的Content-Type。
PS: 查到源码中有如下逻辑(go语言不熟,但高度怀疑问题就在此处):
- 使用 rancher proxy 代理后,后端代理响应时,会修改部分资源引用的地址(比如:html 文件文件中的 类似 href 或 src ="
/test/test.css
"这样的资源引用),修改成代理后的资源地址,否则会找不对应的资源
- 可以尝试在 html 文件 head 标签中添加 base 标签,其他资源引用使用现对路径来解决这个问题(因为后端代理响应时,会修改 base 标签中的路径为代理后的路径,相对地址引用的资源会基于 base 标签中的路径自动组装资源路径):比如
<base href="/ui/" />
<link rel="icon" href="./favicon.ico"/>
- 如果不想使用proxy或应用不支持proxy方式,可以使用 nodeport 或 ingress 等方式暴露服务外部访问url,可避免这个问题
鱼er鱼
5
请问:
1、所以能否让proxy完善一些,支持自定义那些标签需要被改写?
2、使用proxy时,那些标签属性值会被改写,有确切的文档说明吗,或者相应的代码区域能确定 – 这些?
谢谢