Rancher UI上无法建立对 Virtual Kubelet 管理的pod的流式连接

无法在Rancher中直接登录到Pod当中和查看Pod日志

可以给出详细的版本信息以及环境信息吗?

Rancher v2.6.13 所纳管集群的k8s版本是v1.20.8,上面的vk的版本是v1.19.x,vk这虚拟节点上的pod无法被exec 也无法被log,浏览器上看,建立的wss连接无法建立,集群上的其他正常节点的上pod是可以的,

通过 kubectl 可以完成这两个操作吗?对于 log 和exec,rancher都是调用原生 k8s api完成的,如果不行的话就是 vk 对接的cri 没有实现对应的接口

对的 通过kubectl + kubeconfig 是可以执行 exec -it 和 logs 这两个命令的,对我也有点纳闷儿看着都是访问的api server,但是到rancher这里wss就直接断开了

具体vk的provider是哪个?我尝试重现一下

非常感谢,但是我们用的provider是我们自己实现的一套,可能你那边不太能复现。现在的主要疑问是kubectl exec -it xxx sh 或者 kubectl exec xxx – xxx command 都是正常的(这里是正常的HTTP请求),但是一到了 Rancher wss 访问 API Server 就无法建立连接,提示“连接已断开”,感觉是我们的provider实现上有点问题,但我理解这两种方式到了vk后底层调的provider接口都是同一个吧,怎么会出现这种diff呢(btw:Rancher wss 访问 API Server 的正常节点的pod也是ok的)

您那边是否有现成的使用 AWS 这种标准 Provider 的 VK 环境,可否帮忙验证下这种 VK 下的 Pod 是否可以通过Rancher登陆或者是查看日志呢?就是我现在连Rancher是否支持VK这种操作也还不确定,也没搜到什么有意义的文档说明,在Github和Reddit上发issue也没有人理 :smiling_face_with_tear:

两个方面说明这个问题吧

  1. 一个是我们并没有针对vk做系统的整合测试,这个没有在标准的支持列表里面,国内的用户也很少
  2. vk aws provider现在是暂停维护状态,我可以尝试使用 aliyun 的serverless做验证,但不确定是否具有参考价值,因为集群版本比较低。

我使用 aliyun serverless 集群进行测试,可以对 eci 容器进行exec操作以及查看日志操作。

好的好的!非常感谢您的协助,那大概率会是我们provider的问题。(麻烦问下,阿里云的集群版本是多少,还有vk的版本

我测试的是 v1.26的集群版本 vk也是对应的 v1.26,应该是阿里云自己维护的版本,集群被我清理了,保留下来 :rofl: 公有云太贵了不敢开太久

这个集群版本还挺高的。。我们还是垃圾的1.20.8,对了我们vk里面会报这个错level=debug msg=“Error on request” error=“cannot exec with tty and stderr”,rancher里面有办法把这俩给disable掉么。。

无法disable掉,看样子是vk本身的支持问题了。

好的 非常感谢

FYI


https://github.com/virtual-kubelet/virtual-kubelet/blob/d41d02609f8ed3f606da0ddfc36b074554826436/node/api/exec.go#L145
目前发现 vk 实现中不允许 tty和stderr同时打开,这个也不知道为什么会这么设计,但是改了这块儿代码之后 Rancher 就可以进入 vk 上的 pod了。
Rancher发给 API Server 的请求中确实是两个 option 全都是1,可以看看这里Rancher需不需要做什么适配之类的
I0220 16:43:43.723493 1 httplog.go:89] “HTTP” verb=“GET” URI=“/api/v1/namespaces/hxg-test/pods/normal-quick-test-wy-597889dff9-89mpd/exec?container=pi&stdout=1&stdin=1&stderr=1&tty=1&command=%2Fbin%2Fsh&command=-c&command=TERM%3Dxterm-256color%3B%20export%20TERM%3B%20%5B%20-x%20%2Fbin%2Fbash%20%5D%20%26%26%20(%5B%20-x%20%2Fusr%2Fbin%2Fscript%20%5D%20%26%26%20%2Fusr%2Fbin%2Fscript%20-q%20-c%20%22%2Fbin%2Fbash%22%20%2Fdev%2Fnull%20%7C%7C%20exec%20%2Fbin%2Fbash)%20%7C%7C%20exec%20%2Fbin%2Fsh&sockId=38”

1 个赞

对了 麻烦问下 当时 ECI 的 log 是全量的logs 还是滚动的 logs -f 形式,还有印象么

通过rancher ui查看的都是滚动日志,UI上有参数控制日志起始位置的,看下日志框的右下角就知道了

1 个赞