Я раскручиваю новый экземпляр ноутбука Jupyter из концентратора Jupiter и хочу иметь доступ к Kubernetes API изнутри развернутого контейнера. Согласно документы, я добавил параметр для служебной учетной записи в свои значения 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. Они автоматически внедряются при запуске модуля, но, скорее всего, только для вашего пользователя, а не для пользователя sudo root
.
Обязательно передайте эти переменные для корневой среды (sudo -E kubectl get pods
) или убедитесь, что спроецированный токен доступен для чтения вашим пользователем (это должно быть достижимо, установив singleuser_uid KubeSpawner на ваш UID https://github.com/jupyterhub/kubespawner/issues/140).