ksd
1
源自微信群:Rancher③群—官方交流群
报告者:李永福
由 牛小腩 代为发布
Rancher版本:2.5.4
Kubernetes版本:1.19.3+k3s3
每次从rancher的cluster-explorer(仪表板)进入pod 命令行模式,就会再pod中残留一个下面的进程,这个有方法解决吗?
/bin/sh -c TERM=xterm-256color; export TERM; [ -x /bin/bash ] && ([ -x /usr/bin/script ] && /usr/bin/script -q -c "/bin/bash" /dev/null || exec /bin/bash) || exec /bin/sh」
ksd
2
niusmallnan:
经测试(包括v2.5.11)该问题确实在于cluster-explorer UI中,而cluster-manager UI则无此问题。
这两个UI在这个功能上使用的是同一个API(k8s原生pod/exec接口),不同之处在于:cluster-manager UI在页面上点击close时,会自动发送特殊key,确保进程可以退出;而cluster-explorer仅仅是关闭了前端窗口,没有其他操作。
以下是cluster-manger的做法:
使用ws进行pod/exec接口调用:
点击页面close时,发送了一个特殊的message: 0ZXhpdA0K
本接口的message使用特殊的加密协议: Sec-WebSocket-Protocol: base64.channel.k8s.io
(在request header中可以看到),此协议的编码方式需要去掉前两个字符后对剩余字符进行base64 decode。解码后的结果为: ^]B
这是一种Break key,可以中断console中的执行程序,参考:https://en.wikipedia.org/wiki/Break_key
结论:
确认是cluster-explorer UI中的BUG,会推动在后续版本中修复。
很遗憾这个问题在社区版还没有修复。主要是对解决方案一直没有达成一致。
Rancher企业版(面向国内)已经修复改问题,采用前端发送exit code模式杀掉 bash/sh。
使用社区版的话,可以每次使用Pod shell完毕后,手动输入 exit 也是一样的效果。