Як увійти на інформаційну панель kubernetes?


127

Я щойно модернізував 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
Я не бачу тут питання програмування. Спробуйте замість serverfault.com.
Жолта

Якщо ви НЕ в localhost, вам може знадобитися використовувати тільки https, інакше форма входу не вдасться мовчки (без помилки msg). Детальніше: stackoverflow.com/questions/53957413/…
Путник

Вам потрібно генерувати маркер, дотримуйтесь цього керівництва - jhooq.com/setting-up-kubernetes-dashboard
Рахул Ваг

1
@Jolta Devops тепер є програмовою діяльністю завдяки kubernetes, ви зіткнетесь із цим;)
Фабієн Кватраво

Відповіді:


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 set-poveritivees 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
silverfox

96

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 - Це перша команда з розділу Token @ @ silverfox .
  • Рядок 3 - друкуйте лише перше поле рядка, що починається з deployment-controller-token-(що є ім'ям стручка)
  • Рядок 1 - це друга команда з розділу Token @ @ silverfox .
  • Рядок 5 - Друкуйте лише друге поле рядка, першим полем якого є "маркер:"

2
Чи є силова оболонка еквівалентна awk?
duct_tape_coder

1
@duct_tape_coder просто kubectl -n kube-система отримує секрети і знаходить маркер із ім'ям розгортання імені-контролер-токен-SOMEHASH, згодом просто kubectl -n kube-система описує таємне розгортання-контролер-маркер-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 / ...
Подорожній

48

Якщо ви не хочете надати адміністратору дозвіл на обліковий запис служби інформаційної панелі, ви можете створити обліковий запис адміністратора служби кластера.

$ 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

Я цитував це з гігантського посібника - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/


5
Цей працював для мене чудово, поки прийнята відповідь входила в мене, але з деякими помилками авторизації.
ZedTuX

3
Зауважте, що ця команда надає обліковому запису служби багато прав і може не доцільно застосовуватись у виробничих умовах.
X. Ван

4
може хотіти додати рахунок рахунку в системі
kube

Працювали для мене! Я виставляв послугу з портом 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


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: // ім'я хоста: izpostavport / без автентифікації


Це абсолютно страшна порада. Навіть якщо це технічно правильно
Крістофер Томас

0

Увійти до пропуску було відключено за замовчуванням через проблеми безпеки. https://github.com/kubernetes/dashboard/isissue/2672

у свою ямл приладної панелі додайте цей аргумент

- --enable-skip-login

щоб повернути його


1
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
Стефан Бекер

1
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться. - З огляду
Рік

@StefanBecker посилання - це не відповідь, а джерело, яке потрібно довести The skip login has been disabled by default due to security issues. Спроба відповіді - - --enable-skip-login. Можливо, це не найкраща відповідь, але це не лише відповідь на посилання.
derHugo

@Рік посилання - це не відповідь, а джерело, яке потрібно довести The skip login has been disabled by default due to security issues. Спроба відповіді - - --enable-skip-login. Можливо, це не найкраща відповідь, але це не лише відповідь на посилання.
derHugo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.