Як увійти на інформаційну панель 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.