Как войти в личный кабинет Kubernetes?

127

Я только что обновил kubeadm и kubelet до версии 1.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для входа, но снова потерпел неудачу.

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

ichbinblau
источник
6
Я не вижу здесь вопроса о программировании. Вместо этого попробуйте serverfault.com.
Jolta
Если вы НЕ на локальном хосте, вам может потребоваться использовать только https, иначе форма входа в систему не удастся скрыть (без сообщения об ошибке). Подробности: stackoverflow.com/questions/53957413/…
Путник
Вам необходимо сгенерировать токен, следуйте этому руководству - jhooq.com/setting-up-kubernetes-dashboard
Рахул Ваг,
1
@Jolta Devops теперь занимается программированием благодаря kubernetes, вы столкнетесь с этим;)
Fabien Quatravaux

Ответы:

165

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

- Панель управления на Github

знак

Здесь Tokenможет быть Static Token, Service Account Token, OpenID Connect Tokenот Kubernetes Аутентификация , но не kubeadm 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опцию на странице входа в систему для доступа к панели инструментов.

Если вы используете версию панели мониторинга v1.10.1 или новее, вы также должны добавить --enable-skip-loginаргументы командной строки развертывания. Вы можете сделать это, добавив его в argsин kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Пример:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
Серебряная Лиса
источник
3
Можете ли вы привести пример, как создать пользователя и войти в систему с помощью токена? Я до сих пор не знаю, как использовать токен, действуя как пользователь.
xren
См. Файл статических токенов в аутентификации
Kubernetes
97

TL; DR

Чтобы получить токен в одной строке:

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 - это первая команда из раздела Token @ silverfox .
  • Строка 3 - печатать только первое поле строки, начинающейся с deployment-controller-token-(которое является именем модуля)
  • Строка 1 - это вторая команда из раздела Token @ silverfox .
  • Строка 5 - вывести только второе поле строки, первое поле которой - «токен:»
Бруно Броноски
источник
2
Есть ли эквивалент awk в PowerShell?
duct_tape_coder
1
@duct_tape_coder просто kubectl -n kube-system получить секреты и найти токен с именем deployment-controller-token-SOMEHASH, затем просто kubectl -n kube-system описать секретный-контроллер-токен-SOMEHASH развертывания. Вот что делает awk.
кубиты
2
Отличный ответ. Чтобы сделать еще один шаг: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' или нажмите прямо в буфер обмена kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' | xclip -selection clipboard -i
javajon
@duct_tape_coder kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | sls admin-user | ForEach-Object { $_ -Split '\s+' } | Select -First 1)из github.com/kubernetes/dashboard/blob/master/docs/user/...
Путник
49

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

$ 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/

SunghoMoon
источник
5
Этот сработал для меня отлично, пока принятый ответ был подписан мной, но с некоторыми ошибками авторизации.
ZedTuX
3
Обратите внимание, что эта команда дает учетной записи службы множество прав и может быть нецелесообразной в производственной среде.
X. Wang
4
может также захотеть добавить сервисный аккаунт в kube-system, так как именно здесь находится
дашборд,
Сработало у меня! Я выставлял службу с портом 8001 и использовал туннель SSH для доступа с моей локальной машины.
Анурадха Фернандо
18

Объединяя два ответа: 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}')
Абденнур Туми
источник
8

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

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

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

Rewanth Cool
источник
5

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

Жюльен Ньямбал
источник
Попробовав несколько ответов выше, этот ответ сработал. Я скопировал жетон, вставил его, и готово, я
вхожу
5

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

  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. Теперь вы можете войти в систему

УДИТ ДЖОШИ
источник
0

Загрузите 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: // hostname: visibleport / без аутентификации.

Раджеш Гуптан
источник
Это абсолютно ужасный совет. Даже если это технически правильно
Кристофер Томас
0

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

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

- --enable-skip-login

вернуть это

Ravi
источник
1
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится.
Стефан Беккер
1
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - Из
Rick
@StefanBecker ссылка - это не ответ, а источник доказательства The skip login has been disabled by default due to security issues. Попытка ответа есть - --enable-skip-login. Возможно, это не лучший ответ, но это не только ссылка.
derHugo
@Rick ссылка - это не ответ, а источник доказательства The skip login has been disabled by default due to security issues. Попытка ответа есть - --enable-skip-login. Возможно, это не лучший ответ, но это не только ссылка.
derHugo