cluster-explorer中使用Pod shell导致bash/sh进程残留

源自微信群: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」

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 也是一样的效果。

好的,多谢

是不是这个问题还没有修复