Bagaimana cara masuk ke dasbor kubernetes?

127

Saya baru saja meningkatkan kubeadm dan kubelet ke v1.8.0. Dan instal dasbor mengikuti dokumen resmi .

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

Setelah itu, saya memulai dasbor dengan menjalankan

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

Untungnya, saya dapat mengakses dasbor melalui http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Saya dialihkan ke halaman login seperti ini yang belum pernah saya temui sebelumnya. masukkan deskripsi gambar di siniSepertinya ada dua cara otentikasi.

Saya mencoba mengunggah /etc/kubernetes/admin.confsebagai kubeconfig tetapi gagal. Kemudian saya mencoba menggunakan token yang saya dapat dari kubeadm token listuntuk masuk tetapi gagal lagi.

Pertanyaannya adalah bagaimana saya bisa masuk ke dasbor. Sepertinya mereka menambahkan banyak mekanisme keamanan dari sebelumnya. Terima kasih.

ichbinblau.dll
sumber
6
Saya tidak melihat pertanyaan pemrograman di sini. Coba serverfault.com sebagai gantinya.
Jolta
Jika Anda TIDAK menggunakan localhost, Anda mungkin diminta untuk menggunakan https saja, jika tidak, form login akan gagal secara diam-diam (tanpa pesan err). Detail: stackoverflow.com/questions/53957413/…
Putnik
Anda perlu membuat token, ikuti panduan ini - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh
1
@Jolta Devops sekarang menjadi aktivitas pemrograman berkat kubernetes, Anda akan menghadapinya;)
Fabien Quatravaux

Jawaban:

165

Pada rilis 1.7, Dashboard mendukung otentikasi pengguna berdasarkan:

- Dasbor di Github

Token

Di sini Tokendapat Static Token, Service Account Token, OpenID Connect Tokendari Kubernetes Otentikasi , tapi tidak kubeadm yang Bootstrap Token.

Dengan kubectl, kita bisa mendapatkan akun layanan (mis. Pengontrol penerapan) yang dibuat di kubernetes secara default.

$ 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

Dasbor membutuhkan pengguna di file kubeconfig untuk memiliki username & passwordatau token, tetapi admin.confhanya memiliki client-certificate. Anda dapat mengedit file konfigurasi untuk menambahkan token yang telah diekstrak menggunakan metode di atas.

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

Alternatif (Tidak direkomendasikan untuk Produksi)

Berikut dua cara untuk melewati otentikasi, tetapi gunakan untuk hati-hati.

Terapkan dasbor dengan HTTP

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

Dashboard dapat dimuat di http: // localhost: 8001 / ui dengankubectl proxy .

Memberikan hak istimewa admin ke Akun Layanan 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

Setelah itu Anda dapat menggunakan Skipopsi di halaman login untuk mengakses Dashboard.

Jika Anda menggunakan dasbor versi v1.10.1 atau yang lebih baru, Anda juga harus menambahkan --enable-skip-loginke argumen baris perintah penerapan. Anda dapat melakukannya dengan menambahkannya ke argsdalam kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Contoh:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
silverfox.dll
sumber
3
Bisakah Anda memberi kami contoh cara membuat pengguna lalu masuk dengan token? Saya masih tidak tahu cara menggunakan token bertindak seperti pengguna.
xren
Lihat File Token Statis di Kubernetes Authenticating
silverfox
97

TL; DR

Untuk mendapatkan token dalam satu oneliner:

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

Ini mengasumsikan bahwa ~ / .kube / config Anda ada dan valid. Dan juga itu kubectl config get-contextsmenunjukkan bahwa Anda menggunakan konteks yang benar (cluster dan namespace) untuk dasbor yang Anda masuki.

Penjelasan

Saya mendapatkan jawaban ini dari apa yang saya pelajari dari jawaban @ silverfox. Itu adalah tulisan yang sangat informatif. Sayangnya itu tidak memberi tahu Anda bagaimana sebenarnya mempraktikkan informasi. Mungkin saya telah melakukan DevOps terlalu lama, tapi saya pikir di shell. Jauh lebih sulit bagi saya untuk belajar atau mengajar dalam bahasa Inggris.

Berikut adalah satu baris dengan jeda baris dan indentasi agar mudah dibaca:

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

Ada 4 perintah berbeda dan dipanggil dalam urutan ini:

  • Baris 2 - Ini adalah perintah pertama dari bagian Token @ silverfox .
  • Baris 3 - Cetak hanya bidang pertama dari baris yang diawali dengan deployment-controller-token-(yang merupakan nama pod)
  • Baris 1 - Ini adalah perintah kedua dari Token @ silverfox bagian .
  • Baris 5 - Cetak hanya bidang kedua dari baris yang bidang pertamanya adalah "token:"
Bruno Bronosky
sumber
2
Apakah ada PowerShell yang setara dengan awk?
duct_tape_coder
1
@duct_tape_coder hanya kubectl -n kube-system dapatkan rahasia dan temukan tokenm dengan nama deployment-controller-token-SOMEHASH, kemudian kubectl -n kube-system mendeskripsikan secret deployment-controller-token-SOMEHASH. Itulah yang dilakukan awk.
qubits
2
Jawaban yang bagus. Untuk mengambil satu langkah lagi: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' Atau tekan langsung ke papan klip Anda 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)dari github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik
48

Jika Anda tidak ingin memberikan izin admin ke akun layanan dasbor, Anda dapat membuat akun layanan admin cluster.

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

Dan kemudian, Anda dapat menggunakan token dari akun layanan admin cluster yang baru saja dibuat.

$ 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

Saya mengutipnya dari panduan giantswarm - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

SunghoMoon
sumber
5
Yang ini berfungsi dengan baik untuk saya sementara jawaban yang diterima masuk ke saya tetapi dengan beberapa kesalahan otorisasi.
ZedTuX
3
Perhatikan bahwa perintah ini memberi akun layanan banyak hak dan mungkin tidak disarankan dalam lingkungan produksi.
X. Wang
4
mungkin ingin menambahkan
akun
Bekerja untuk saya! saya mengekspos layanan dengan port 8001 dan menggunakan terowongan SSH untuk mengakses dari mesin lokal saya.
Anuradha Fernando
18

Menggabungkan dua jawaban: 49992698 dan 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}')
Abdennour TOUMI
sumber
8

Satu baris sederhana yang cukup jelas untuk mengekstrak token untuk login kubernetes dashboard.

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

Salin token dan tempel di dasbor kubernetes di bawah opsi masuk token dan Anda dapat menggunakan dasbor kubernetes

Rewanth Cool
sumber
5

Semua jawaban sebelumnya bagus untuk saya. Tetapi jawaban langsung di pihak saya akan datang dari https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token . Gunakan saja kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Anda akan memiliki banyak nilai untuk beberapa tombol ( Name, Namespace, Labels, ..., token). Yang paling penting adalah tokenyang sesuai dengan nama Anda. salin token itu dan tempel di kotak token. Semoga ini membantu.

Julien Nyambal
sumber
Setelah mencoba beberapa jawaban di atas, jawaban yang satu ini berhasil. Saya menyalin token, menempelkannya, dan presto, Im masuk
CENTURION
5

Anda harus mengikuti langkah-langkah ini sebelum otentikasi token

  1. Buat akun layanan Admin Cluster

    kubectl create serviceaccount dashboard -n default
    
  2. Tambahkan aturan pengikatan cluster ke akun dasbor Anda

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Dapatkan token rahasia dengan perintah ini

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Pilih otentikasi token di halaman login dasbor Kubernetes masukkan deskripsi gambar di sini

  5. Sekarang Anda sudah bisa login

UDIT JOSHI
sumber
0

Unduh https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

Menambahkan

type: NodePort for the Service

Dan kemudian jalankan perintah ini:

kubectl apply -f kubernetes-dashboard.yaml

Temukan port yang terbuka dengan perintah:

kubectl get services -n kube-system

Anda seharusnya bisa mendapatkan dasbor di http: // hostname: eksposport / tanpa otentikasi

Rajesh Guptan
sumber
Ini nasihat yang sangat buruk. Bahkan jika secara teknis benar
Christopher Thomas
0

Lewati login telah dinonaktifkan secara default karena masalah keamanan. https://github.com/kubernetes/dashboard/issues/2672

di dasbor Anda, yaml tambahkan argumen ini

- --enable-skip-login

untuk mendapatkannya kembali

Ravi
sumber
1
Meskipun tautan ini mungkin menjawab pertanyaan, lebih baik menyertakan bagian penting dari jawaban di sini dan menyediakan tautan untuk referensi. Jawaban link saja bisa menjadi tidak valid jika halaman tertaut berubah.
Stefan Becker
1
Meskipun tautan ini mungkin menjawab pertanyaan, lebih baik menyertakan bagian penting dari jawaban di sini dan menyediakan tautan untuk referensi. Jawaban link saja bisa menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
Rick
@StefanBecker tautannya bukanlah jawaban tetapi sumber untuk membuktikan The skip login has been disabled by default due to security issues. Upaya jawabannya adalah - --enable-skip-login. Mungkin ini bukan jawaban terbaik, tetapi ini bukan hanya jawaban tautan.
derHugo
@Rick link bukanlah jawabannya tapi sumber untuk membuktikan The skip login has been disabled by default due to security issues. Upaya jawabannya adalah - --enable-skip-login. Mungkin ini bukan jawaban terbaik, tetapi ini bukan hanya jawaban tautan.
derHugo