重要!Kubernetes最新补丁版本的Panic问题

837 阅读1分钟

我们知道 Kubernetes 的版本发布分为小版本和补丁版本,比如 1.20.7 中的 20 是小版本号,而 7 则是补丁版本。通常来说,补丁版本包含了当前小版本的最近补丁以及安全问题修复,建议用户紧跟补丁版本升级。

不过在最新的几个补丁版本(包括 1.18.19、1.19.11、1.20.7 以及 1.21.1)中,由于社区 PR 99839 在修复内存泄漏时未正确处理空指针,kubelet 会在处理 portforward 请求时发生 Panic。

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x17e78f8]
goroutine 1168860 [running]:
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy.(*connection).RemoveStreams(0xc002b30080, 0xc0032f7160, 0x2, 0x2)
 /workspace/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go:101 +0x78
k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward.(*httpStreamHandler).removeStreamPair(0xc00349c310, 0x6c657a8, 0x1)
 /workspace/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/httpstream.go:168 +0x16d
k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward.(*httpStreamHandler).monitorStreamPair(0xc00349c310, 0xc000f6ef50, 0xc00369fd40)
 /workspace/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/httpstream.go:148 +0x1fe
created by k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward.(*httpStreamHandler).run
 /workspace/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/httpstream.go:227 +0x58a

因而,Kubernetes 社区推荐用户避免升级到这些版本。

目前社区维护的发布分支已经修复该问题(参考102489),并且该修复将包含到下一批次的补丁版本之中。2021-06-16 将发布 1.21.2、1.20.8、1.19.12,届时用户可以升级到这些版本避免 Kubelet Panic 的问题。

不过非常遗憾的是 1.18.x 分支已经不再维护,因而 1.18.19 的用户需要升级到 1.19.x 才可以了。


欢迎微信搜索并关注 漫谈云原生 公众号,了解更多云原生知识。