Jupyter 中忽略了 Kubernetes 服务帐户令牌

Kubernetes Service account token ignored in Jupyter

我正在从 Jupiter 中心启动一个新的 Jupyter notebook 实例,并希望从启动的容器内部访问 Kubernetes API。根据 docs,我在 helm 值中添加了服务帐户参数,正如预期的那样,我可以看到按预期安装的服务帐户令牌。

subu@jupyter-subu:~$ sudo ls /run/secrets/kubernetes.io/serviceaccount/
ca.crt  namespace  token

但是,当我尝试 运行 kubectl 时,访问被拒绝

subu@jupyter-subu:~$ kubectl get pods
error: open /var/run/secrets/kubernetes.io/serviceaccount/token: permission denied

很公平,但是 运行 它作为 sudo 并且它只是忽略了服务帐户令牌。

subu@jupyter-subu:~$ sudo kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

如果我使用令牌的详细信息手动设置 kubectl 配置,它完全可以工作,只是默认设置不起作用。任何关于为什么会发生这种情况的想法将不胜感激!

为了让 kubectl 使用投影令牌,必须在您的环境中设置环境变量 KUBERNETES_SERVICE_PORT 和 KUBERNETES_SERVICE_HOST。这些会在 pod 启动时自动注入,但可能只针对您的用户,而不是针对 sudo root 用户。

确保将这些变量传递给根环境 (sudo -E kubectl get pods) 或确保投影令牌对您的用户可读(这应该可以通过将 KubeSpawner 的 singleuser_uid 设置为您的 UID 来实现https://github.com/jupyterhub/kubespawner/issues/140).