Kubernetes panosuna nasıl giriş yapılır?


127

Kubeadm ve kubelet'i v1.8.0'a yükselttim. Ve resmi belgeye göre kontrol panelini kurun .

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

Bundan sonra kontrol panelini çalıştırarak başladım

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

Neyse ki, http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ üzerinden kontrol paneline erişebildim.

Daha önce hiç tanışmadığım böyle bir giriş sayfasına yönlendirildim. görüntü açıklamasını buraya girinGörünüşe göre kimlik doğrulamanın iki yolu var.

/etc/kubernetes/admin.confKubeconfig olarak yüklemeyi denedim ama başarısız oldum. Sonra aldığım jetonu kubeadm token listoturum açmak için kullanmayı denedim ancak tekrar başarısız oldum .

Soru, gösterge tablosunda nasıl oturum açabileceğimdir. Görünüşe göre eskisinden çok fazla güvenlik mekanizması eklediler. Teşekkürler.


6
Burada bir programlama sorusu görmüyorum. Bunun yerine serverfault.com'u deneyin.
Jolta

Eğer localhost üzerinde DEĞİLSENİZ, yalnızca https kullanmanız gerekebilir, aksi takdirde oturum açma formu sessizce başarısız olur (hata mesajı olmadan). Ayrıntılar: stackoverflow.com/questions/53957413/…
Putnik

Belirteç oluşturmanız gerekiyor, bu kılavuzu izleyin - jhooq.com/setting-up-kubernetes-dashboard
Rahul

1
@Jolta Devops, artık kubernetes sayesinde bir programlama etkinliği, bununla yüzleşeceksiniz;)
Fabien Quatravaux,

Yanıtlar:


165

1.7 yayımından itibaren Dashboard, aşağıdakilere dayalı kullanıcı kimlik doğrulamasını destekler:

- Github'da Gösterge Tablosu

Jeton

Burada Tokenolabilir Static Token, Service Account Token, OpenID Connect Tokengelen Kubernetes doğrulanırken , ancak kubeadm Bootstrap Token.

Kubectl ile, varsayılan olarak kubernetes'te oluşturulan bir hizmet hesabı (örn. Dağıtım denetleyicisi) alabiliriz.

$ 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

Pano ya sahip olmak kubeconfig dosyasında kullanıcı ihtiyaçları username & passwordya tokenama admin.confsadece sahiptir client-certificate. Yukarıdaki yöntemi kullanarak çıkarılan belirteci eklemek için yapılandırma dosyasını düzenleyebilirsiniz.

$ kubectl yapılandırma set-kimlik bilgileri cluster-admin --token = bearer_token

Alternatif (Üretim için Önerilmez)

Kimlik doğrulamayı atlamanın iki yolu vardır, ancak dikkatli olun.

Gösterge tablosunu HTTP ile dağıtın

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

Gösterge tablosu http: // localhost: 8001 / ui ile birlikte yüklenebilir kubectl proxy.

Dashboard'un Hizmet Hesabına yönetici ayrıcalıkları verme

$ 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

Daha sonra SkipDashboard'a erişmek için giriş sayfasındaki seçeneği kullanabilirsiniz .

Kontrol paneli sürümü v1.10.1 veya üzerini kullanıyorsanız --enable-skip-login, dağıtımın komut satırı bağımsız değişkenlerine de eklemeniz gerekir . Sen ekleyerek bunu yapabilirsiniz argsin kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Misal:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

3
Kullanıcı oluşturup ardından token ile nasıl giriş yapacağımız konusunda bize bir örnek verebilir misiniz? Hala bir kullanıcı gibi davranmak için nasıl token kullanacağımı bilmiyorum.
xren

Bkz Statik Jetonu Dosya Kubernetes güvenilir kılmak üzere
Silverfox

97

TL; DR

Jetonu tek bir onelinerde almak için:

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

Bu, ~ / .kube / config dosyanızın mevcut ve geçerli olduğunu varsayar. Ayrıca bu kubectl config get-contexts, oturum açtığınız gösterge tablosu için doğru bağlamı (küme ve ad alanı) kullandığınızı gösterir.

açıklama

Bu cevabı @ silverfox'un cevabından öğrendiklerimden aldım. Bu çok bilgilendirici bir yazı. Maalesef, bilgiyi nasıl uygulamaya koyacağınızı söylemekte yetersiz kalıyor. Belki de DevOps'u çok uzun süredir yapıyorum, ancak kabuğunda düşünüyorum. İngilizce öğrenmek veya öğretmek benim için çok daha zor.

Okunabilirlik için satır sonları ve girintiler içeren oneliner şu şekildedir:

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

4 farklı komut vardır ve bunlar şu sırayla çağrılır:

  • Satır 2 - Bu, @ silverfox'un Token bölümündeki ilk komuttur .
  • Satır 3 - ile başlayan satırın (bölme adı olan) yalnızca ilk alanını yazdırındeployment-controller-token-
  • Satır 1 - Bu, @ silverfox'un Token bölümündeki ikinci komuttur .
  • 5. Satır - İlk alanı "jeton:" olan satırın yalnızca ikinci alanını yazdırın

2
Awk'ye eşdeğer bir powershell var mı?
duct_tape_coder

1
@duct_tape_coder sadece kubectl -n kube-system sırları alır ve ad deployment-controller-token-SOMEHASH ile tokenm bulur, daha sonra sadece kubectl -n kube-system gizli dağıtım-kontrolör-belirteci-SOMEHASH'ı tanımlar. Awk bunu yapar.
qubits

2
Mükemmel cevap. Bir adım daha atmak için: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' Veya panonuza doğru itin 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/… adresinden
Putnik

49

Kontrol paneli hizmet hesabına yönetici izni vermek istemiyorsanız, küme yöneticisi hizmet hesabı oluşturabilirsiniz.

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

Ve sonra, yeni oluşturulmuş küme yöneticisi hizmet hesabının belirtecini kullanabilirsiniz.

$ 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

Bunu devswarm kılavuzundan alıntı yaptım - https://docs.gantswarm.io/guides/install-kubernetes-dashboard/


5
Bu, kabul edilen cevap bende imzalanırken ancak bazı yetkilendirme hatalarıyla benim için iyi çalıştı.
ZedTuX

3
Bu komutun hizmet hesabına birçok hak verdiğini ve bir üretim ortamında tavsiye edilmeyebileceğini unutmayın.
X. Wang

4
servis hesabını da kontrol panelinin yaşadığı yer olduğu için kube-system altına eklemek isteyebilirsiniz
atomaras

Benim için çalıştı! 8001 numaralı bağlantı noktasıyla hizmeti açığa çıkarıyordum ve yerel makinemden erişmek için bir SSH tüneli kullandım.
Anuradha Fernando

18

İki yanıtı birleştiren: 49992698 ve 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 kontrol panelinde oturum açmak için belirteç çıkarmak için kendi kendini açıklayan basit bir tek satırlık program.

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

Jetonu kopyalayın ve kubernetes panosuna jetonla oturum açma seçeneğinin altına yapıştırın ve kubernetes panosunu kullanmakta fayda var


5

Önceki tüm cevaplar benim için iyi. Ancak benim tarafımdan doğrudan bir cevap https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token'den gelir . Sadece kullan kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Bazı anahtarlar için birçok değerlere sahip olacaktır ( Name, Namespace, Labels, ..., token). En önemlisi tokenisminize karşılık gelen şeydir. bu jetonu kopyalayın ve jeton kutusuna yapıştırın. Bu yardımcı olur umarım.


Yukarıdaki cevaplardan birkaçını denedikten sonra, bu cevap işe yaradı. Bir jetonu kopyaladım, yapıştırdım ve giriş yaptım.
CENTURION

5

Belirteç kimlik doğrulamasından önce bu adımları izlemeniz gerekir

  1. Küme Yöneticisi hizmet hesabı oluşturun

    kubectl create serviceaccount dashboard -n default
    
  2. Küme bağlama kurallarını gösterge tablosu hesabınıza ekleyin

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Bu komutla gizli jetonu alın

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Kubernetes kontrol paneli giriş sayfasında jeton kimlik doğrulamasını seçin görüntü açıklamasını buraya girin

  5. Artık giriş yapabilirsiniz


0

Https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml dosyasını indirin

Ekle

type: NodePort for the Service

Ve sonra şu komutu çalıştırın:

kubectl apply -f kubernetes-dashboard.yaml

Açıktaki bağlantı noktasını şu komutla bulun:

kubectl get services -n kube-system

Gösterge tablosunu http: // hostname: exposedport / kimlik doğrulaması olmadan alabilmelisiniz


Bu kesinlikle berbat bir tavsiye. Teknik olarak doğru olsa bile
Christopher Thomas

0

Güvenlik sorunları nedeniyle, atlama girişi varsayılan olarak devre dışı bırakılmıştır. https://github.com/kubernetes/dashboard/issues/2672

kontrol panelinize yaml bu arg'yi ekleyin

- --enable-skip-login

geri almak için


1
Bu bağlantı soruyu yanıtlasa da, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse yalnızca bağlantı yanıtları geçersiz hale gelebilir.
Stefan Becker

1
Bu bağlantı soruyu yanıtlasa da, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse yalnızca bağlantı yanıtları geçersiz hale gelebilir. - Yorumdan
Rick

@StefanBecker bağlantı cevap değil, kanıtlanacak kaynaktır The skip login has been disabled by default due to security issues. Cevap denemesi - --enable-skip-login. Belki en iyi cevap olmayabilir ama bu yalnızca bağlantıya dayalı bir cevap değil.
derHugo

@Rick link cevap değil, kanıtlanacak kaynaktır The skip login has been disabled by default due to security issues. Cevap denemesi - --enable-skip-login. Belki en iyi cevap olmayabilir ama bu yalnızca bağlantıya dayalı bir cevap değil.
derHugo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.