จะลงชื่อเข้าใช้ kubernetes dashboard ได้อย่างไร?


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 แทน
Jolta

หากคุณไม่ได้ใช้งาน localhost คุณอาจต้องใช้ https เท่านั้นมิฉะนั้นแบบฟอร์มการเข้าสู่ระบบจะล้มเหลวโดยไม่โต้ตอบ (โดยไม่มีข้อความที่ผิดพลาด) รายละเอียด: stackoverflow.com/questions/53957413/…
Putnik

คุณต้องสร้างโทเค็นทำตามคำแนะนำนี้ - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh

1
@Jolta Devops ตอนนี้เป็นกิจกรรมการเขียนโปรแกรมขอบคุณ kubernetes คุณจะต้องเผชิญกับมัน;)
Fabien Quatravaux

คำตอบ:


165

ณ รีลีส 1.7 Dashboard รองรับการตรวจสอบผู้ใช้ตาม:

  • Authorization: Bearer <token>ส่งส่วนหัวในทุกคำขอไปยังแดชบอร์ด รองรับตั้งแต่รุ่น 1.6 มีลำดับความสำคัญสูงสุด หากมีอยู่จะไม่แสดงมุมมองการเข้าสู่ระบบ
  • ถือ Tokenที่สามารถใช้บนแดชบอร์ดมุมมองการเข้าสู่ระบบ
  • ชื่อผู้ใช้ / รหัสผ่านที่สามารถใช้บนแดชบอร์ดมุมมองการเข้าสู่ระบบ
  • Kubeconfigไฟล์ที่สามารถใช้บนแดชบอร์ดมุมมองการเข้าสู่ระบบ

- แดชบอร์ดบน Github

เหรียญ

ที่นี่TokenสามารถStatic Token, Service Account Token, OpenID Connect TokenจากKubernetes ตรวจสอบสิทธิ์แต่ไม่ Bootstrap Tokenkubeadm

ด้วย 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 with kubectl proxy.

ให้สิทธิ์ผู้ดูแลระบบแก่บัญชีบริการของแดชบอร์ด

$ 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อาร์กิวเมนต์บรรทัดคำสั่งของการปรับใช้ด้วย คุณสามารถทำได้โดยการเพิ่มมันไปในargskubectl 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

ดูStatic Token Fileใน Kubernetes Authenticating
silverfox

97

TL; DR

ในการรับโทเค็นในโปรแกรมเดียว:

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 มานานเกินไป แต่ฉันคิดว่าในเปลือก การเรียนหรือสอนภาษาอังกฤษยากกว่ามาก

นี่คือ oneliner ที่มีตัวแบ่งบรรทัดและการเยื้องเพื่อให้อ่านง่าย:

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
มี powershell เทียบเท่ากับ awk หรือไม่?
duct_tape_coder

1
@duct_tape_coder เพียงแค่ kubectl -n kube-system ได้รับความลับและค้นหาโทเค็นที่มีชื่อการปรับใช้ - ตัวควบคุม - โทเค็น - SOMEHASH หลังจากนั้นเพียง kubectl -n kube-system อธิบายการใช้งานที่เป็นความลับ - คอนโทรลเลอร์ - โทเค็น -SOMEHASH นั่นคือสิ่งที่ awk ทำ
qubits

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/…
Putnik

49

หากคุณไม่ต้องการให้สิทธิ์ผู้ดูแลระบบในบัญชีบริการแดชบอร์ดคุณสามารถสร้างบัญชีบริการผู้ดูแลระบบคลัสเตอร์

$ 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/


5
อันนี้ใช้ได้ดีสำหรับฉันในขณะที่คำตอบที่ยอมรับคือลงชื่อเข้าใช้ฉัน แต่มีข้อผิดพลาดในการให้สิทธิ์
ZedTuX

3
โปรดทราบว่าคำสั่งนี้ให้สิทธิ์แก่บัญชีบริการเป็นจำนวนมากและอาจไม่แนะนำให้ใช้ในสภาพแวดล้อมการใช้งานจริง
X. Wang

4
อาจต้องการเพิ่มบัญชีบริการภายใต้ kube-system เนื่องจากนี่คือที่ที่แดชบอร์ดอาศัยอยู่
atomaras

ทำงานให้ฉัน! ฉันเปิดเผยบริการด้วยพอร์ต 8001 และใช้อุโมงค์ SSH เพื่อเข้าถึงจากเครื่องในพื้นที่ของฉัน
Anuradha Fernando

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ที่สอดคล้องกับชื่อของคุณ คัดลอกโทเค็นนั้นและวางลงในกล่องโทเค็น หวังว่านี่จะช่วยได้


หลังจากลองหลาย ๆ คำตอบข้างต้นคำตอบนี้ใช้ได้ผล ฉันคัดลอกโทเค็นออกวางและ presto Im in
CENTURION

5

คุณต้องทำตามขั้นตอนเหล่านี้ก่อนการตรวจสอบโทเค็น

  1. สร้างบัญชีบริการ Cluster Admin

    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: // hostname: exposedport / โดยไม่มีการตรวจสอบสิทธิ์


นี่เป็นคำแนะนำที่แย่มาก แม้ว่าจะถูกต้องในทางเทคนิคก็ตาม
Christopher Thomas

0

การข้ามเข้าสู่ระบบถูกปิดใช้งานโดยค่าเริ่มต้นเนื่องจากปัญหาด้านความปลอดภัย https://github.com/kubernetes/dashboard/issues/2672

ในแดชบอร์ดของคุณ yaml เพิ่มอาร์กิวเมนต์นี้

- --enable-skip-login

เพื่อเอาคืน


1
แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป
Stefan Becker

1
แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป - จากรีวิว
Rick

@StefanBecker การเชื่อมโยงไม่ได้เป็นคำตอบ The skip login has been disabled by default due to security issuesแต่แหล่งที่มาเพื่อพิสูจน์ - --enable-skip-loginความพยายามที่คำตอบคือ อาจไม่ใช่คำตอบที่ดีที่สุด แต่นี่ไม่ใช่คำตอบเฉพาะลิงก์
derHugo

@Rick การเชื่อมโยงไม่ได้เป็นคำตอบ The skip login has been disabled by default due to security issuesแต่แหล่งที่มาเพื่อพิสูจน์ - --enable-skip-loginความพยายามที่คำตอบคือ อาจไม่ใช่คำตอบที่ดีที่สุด แต่นี่ไม่ใช่คำตอบเฉพาะลิงก์
derHugo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.