Как войти в панель 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
для входа, но снова потерпели неудачу.
вопрос как я могу войти в Панель управления. Похоже, что они добавили много механизма безопасности, чем раньше. Спасибо.
6 ответов
начиная с версии 1.7 Dashboard использует более безопасную настройку. Это значит, что по умолчанию он имеет минимальный набор привилегий и может быть доступен только через ПРОТОКОЛ HTTPS. Рекомендуется читать открыть Контроль руководство перед выполнением дальнейших шагов.
начиная с выпуска 1.7 Dashboard поддерживает аутентификацию пользователя на основе:
- Токен На Предъявителя что можно использовать на приборной панели Регистрация вид.
- имя пользователя / пароль что можно использовать на приборной панели посмотреть логин.
маркер
здесь Token
может быть Static Token
, Service Account Token
, OpenID Connect Token
С Kubernetes Authenticating, но не 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
опция на странице входа в систему для доступа к панели мониторинга.
TL; DR
чтобы получить токен в одном oneliner:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print }') | awk '=="token:"{print }'
это предполагает, что ваш ~/.kube / config присутствует и действителен. А также, что kubectl config get-contexts
указывает, что вы используете правильный контекст (кластер и пространство имен) для панели мониторинга, в которую вы входите.
объяснение
я получил этот ответ из того, что я узнал из ответа @silverfox. Это очень информативная запись. К сожалению, это не говорит вам, как фактически воплотить информацию в жизнь. Возможно, я слишком долго занимаюсь DevOps, но я думаю, что в shell. Мне гораздо труднее учиться или преподавать по-английски.
вот этот oneliner с разрывами строк и отступами для удобочитаемости:
kubectl -n kube-system describe secret $(
kubectl -n kube-system get secret | \
awk '/^deployment-controller-token-/{print }'
) | \
awk '=="token:"{print }'
есть 4 различных команды, и они вызываются в следующем порядке:
- строка 2-это первая команда от @silverfox маркер.
- строка 3 - только печать первый поле строки, начинающейся с
deployment-controller-token-
(это название РМО) - строка 1 - Это вторая команда от @silverfox маркер.
- строка 5-Печать только второй поле из линии, чья первая поле - это "знак:"
Если вы не хотите предоставлять разрешение администратора учетной записи службы панели мониторинга, вы можете создать учетную запись службы администратора кластера.
$ 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 }') | awk '=="token:"{print }')
все предыдущие ответы хороши для меня. Но прямой ответ с моей стороны пришел бы от 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 }')
. У вас будет много значений для некоторых ключей (Name
, Namespace
, Labels
, ..., token
). Наиболее важным является token
, что соответствует вашему имени. скопируйте этот токен и вставьте его в поле токен. Надеюсь, это поможет.
добавить
type: NodePort for the Service
а затем выполните следующую команду:
kubectl apply -f kubernetes-dashboard.yaml
найдите открытый порт с помощью команды:
kubectl get services -n kube-system
вы должны иметь возможность получить приборную панель в http://hostname:exposedport/ без аутентификации