Как войти в панель управления kubernetes?

Я только что обновил kubeadm и kubelet до v1.8.0. И установите панель управления, следуя официальному документу.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

После этого я запустил панель управления, запустив

$ kubectl proxy --address="192.168.0.101" -p 8001 --accept-hosts='^*$'

Затем, к счастью, я смог получить доступ к панели инструментов через http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Меня перенаправили на страницу входа в систему, подобную этой, которую я никогда раньше не встречал. Похоже, что есть два способа аутентификации.

Я пытался загрузить /etc/kubernetes/admin.conf как kubeconfig, но потерпел неудачу. Затем я попытался использовать токен, полученный от kubeadm token list войти, но снова не удалось.

Вопрос в том, как я могу войти в панель управления. Похоже, они добавили много механизмов безопасности, чем раньше. Благодарю.

14 ответов

Решение

Начиная с версии 1.7 Dashboard использует более безопасную настройку. Это означает, что по умолчанию он имеет минимальный набор привилегий и доступен только через HTTPS. Перед выполнением любых дальнейших действий рекомендуется прочитать руководство по контролю доступа.

Начиная с версии 1.7 Dashboard поддерживает аутентификацию пользователей на основе:

--- Панель инструментов на Github

знак

Вот Token может быть Static Token, Service Account Token, OpenID Connect Token из Kubernetes Аутентификация, но не кубеадм Bootstrap Token,

С помощью kubectl мы можем получить служебную учетную запись (например, контроллер развертывания), созданную в kubernetes по умолчанию.

$ kubectl -n kube-system get secret
# All secrets with type 'kubernetes.io/service-account-token' will allow to log in.
# Note that they have different privileges.
NAME                                     TYPE                                  DATA      AGE
deployment-controller-token-frsqj        kubernetes.io/service-account-token   3         22h

$ kubectl -n kube-system describe secret deployment-controller-token-frsqj
Name:         deployment-controller-token-frsqj
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=deployment-controller
              kubernetes.io/service-account.uid=64735958-ae9f-11e7-90d5-02420ac00002

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZXBsb3ltZW50LWNvbnRyb2xsZXItdG9rZW4tZnJzcWoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVwbG95bWVudC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjQ3MzU5NTgtYWU5Zi0xMWU3LTkwZDUtMDI0MjBhYzAwMDAyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRlcGxveW1lbnQtY29udHJvbGxlciJ9.OqFc4CE1Kh6T3BTCR4XxDZR8gaF1MvH4M3ZHZeCGfO-sw-D0gp826vGPHr_0M66SkGaOmlsVHmP7zmTi-SJ3NCdVO5viHaVUwPJ62hx88_JPmSfD0KJJh6G5QokKfiO0WlGN7L1GgiZj18zgXVYaJShlBSz5qGRuGf0s1jy9KOBt9slAN5xQ9_b88amym2GIXoFyBsqymt5H-iMQaGP35tbRpewKKtly9LzIdrO23bDiZ1voc5QZeAZIWrizzjPY5HPM1qOqacaY9DcGc7akh98eBJG_4vZqH2gKy76fMf0yInFTeNKr45_6fWt8gRM77DQmPwb3hbrjWXe1VvXX_g

Kubeconfig

Пользователь в файле kubeconfig должен либо username & password или же token, в то время как admin.conf иметь только client-certificate,

$ kubectl config set-credentials cluster-admin --token=bearer_token

Альтернатива (не рекомендуется для производства)

Вот два способа обойти аутентификацию, но используйте для осторожности.

Развернуть панель мониторинга с помощью HTTP

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

Панель инструментов можно загрузить по адресу http://localhost:8001/ui с помощью kubectl proxy,

Предоставление прав администратора учетной записи службы Dashboard

$ cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
EOF

После этого вы можете использовать Skip опция на странице входа для доступа к панели инструментов.

TL;DR

Чтобы получить токен в одном oneliner:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}'

Это предполагает, что ваш ~/.kube/config присутствует и действителен. А также что kubectl config get-contexts означает, что вы используете правильный контекст (кластер и пространство имен) для панели мониторинга, в которую вы входите.

объяснение

Я получил этот ответ из того, что узнал из ответа @silverfox. Это очень информативное описание. К сожалению, он не может рассказать вам, как на самом деле применять информацию на практике. Может быть, я делал DevOps слишком долго, но я думаю, что в оболочке. Мне намного сложнее учить или преподавать на английском.

Вот тот пример с разрывами строки и отступами для удобства чтения:

kubectl -n kube-system describe secret $(
  kubectl -n kube-system get secret | \
  awk '/^deployment-controller-token-/{print $1}'
) | \
awk '$1=="token:"{print $2}'

Есть 4 различные команды, и они вызываются в следующем порядке:

  • Строка 2 - это первая команда из раздела токенов @silverfox.
  • Строка 3 - печатать только первое поле строки, начинающейся с deployment-controller-token- (это название стручка)
  • Строка 1 - это вторая команда из раздела токенов @silverfox.
  • Строка 5 - вывести только второе поле строки, первое поле которой равно "token:"

Если вы не хотите предоставлять права администратора учетной записи службы панели мониторинга, вы можете создать учетную запись службы администратора кластера.

$ kubectl create serviceaccount cluster-admin-dashboard-sa
$ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

И тогда вы можете использовать токен только что созданной учетной записи службы администратора кластера.

$ kubectl get secret | grep cluster-admin-dashboard-sa
cluster-admin-dashboard-sa-token-6xm8l   kubernetes.io/service-account-token   3         18m
$ kubectl describe secret cluster-admin-dashboard-sa-token-6xm8l

Я процитировал это из руководства giantswarm - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

Сочетание двух ответов: 49992698 и 47761914:

# Create service account
kubectl create serviceaccount cluster-admin-dashboard-sa

# Bind ClusterAdmin role to the service account
kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

# Parse the token
TOKEN=$(kubectl describe secret $(kubectl -n kube-system get secret | awk '/^cluster-admin-dashboard-sa-token-/{print $1}') | awk '$1=="token:"{print $2}')

Вам необходимо выполнить следующие действия перед аутентификацией токена

  1. Создание учетной записи службы администратора кластера

    kubectl create serviceaccount dashboard -n default
    
  2. Добавьте правила привязки кластера в свою учетную запись панели управления

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Получите секретный токен с помощью этой команды

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Выберите аутентификацию токена на странице входа в личный кабинет Kubernetes.

  5. Теперь вы можете войти в систему

это, наконец, то, что работает сейчас (2023)

создать два файлаcreate-service-cccount.yaml

      apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

иcreate-cluster-role-binding.yaml

      apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

затем беги

      kubectl apply -f create-service-cccount.yaml
kubectl apply -f create-cluster-role-binding.yaml
kubectl -n kubernetes-dashboard create token admin-user

для получения последних обновлений проверьте https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

Не требующий пояснений простой однострочный инструмент для извлечения токена для входа в панель управления kubernetes.

kubectl describe secret -n kube-system | grep deployment -A 12

Скопируйте токен и вставьте его на панель управления kubernetes в разделе входа в систему с помощью токена, и вы можете использовать панель управления kubernetes.

Однако, если вы используете версию After kubernetes 1.24 ,

создание учетных записей служб не будет генерировать токены, вместо этого следует использовать следующую команду.

      kubectl -n kubernetes-dashboard create token admin-user

Все предыдущие ответы хороши для меня. Но прямой ответ с моей стороны будет дан по https://github.com/kubernetes/dashboard/wiki/Creating-sample-user. Просто используйте kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'), У вас будет много значений для некоторых ключей (Name, Namespace, Labels,..., token). Наиболее важным является token это соответствует вашему имени. скопируйте этот токен и вставьте его в поле токена. Надеюсь это поможет.

Для версии 1.26.0/1.26.1 в 2023 г.

      kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl create serviceaccount admin-user -n kubernetes-dashboard
kubectl create clusterrolebinding dashboard-admin -n kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=admin-user
kubectl -n kubernetes-dashboard create token admin-user

Новейшее руководство: https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md .

Вы можете получить токен:

      kubectl describe secret -n kube-system | grep deployment -A 12

Возьмите значение токена, что-то вроде

      token:    eyJhbGciOiJSUzI1NiIsI...

Используйте переадресацию портов на / kubernetes-dashboard:

      kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443 --address='0.0.0.0'

Доступ к сайту с помощью:

      https://<IP-of-Master-node>:8080/

При запросе предоставьте жетон. Обратите внимание httpsпо URL. Протестирован сайт в Firefox, потому что с новыми обновлениями Google Chrome стал строго запрещать трафик от неизвестных сертификатов SSL.

Также обратите внимание, что порт 8080 должен быть открыт в виртуальной машине главного узла.

Вход в систему с пропуском по умолчанию отключен из-за проблем безопасности. https://github.com/kubernetes/dashboard/issues/2672

в вашей приборной панели yaml добавить этот аргумент

- --enable-skip-login

чтобы вернуть его

Альтернативный способ получить токен kubernetes-dashboard:

      kubectl -n kubernetes-dashboard get secret -o=jsonpath='{.items[?(@.metadata.annotations.kubernetes\.io/service-account\.name=="kubernetes-dashboard")].data.token}' | base64 --decode

Объяснение:

  1. Получить все secretв пространстве имен.
  2. Посмотрите на itemsмассив и соответствие для: metadata-> annotations-> kubernetes.io/service-account.name== kubernetes-dashboard
  3. Распечатать data->
  4. Расшифровать содержимое. (Если вы выполняете kubectl describe secret, tokenуже расшифровано)

Загрузите https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

добавлять

type: NodePort for the Service

И затем выполните эту команду:

kubectl apply -f kubernetes-dashboard.yaml

Найдите незащищенный порт с помощью команды:

kubectl get services -n kube-system

Вы должны быть в состоянии получить панель управления по адресу http: // имя_хоста: незащищенный порт / без аутентификации

Другие вопросы по тегам