Làm thế nào để đăng nhập bảng điều khiển kubernetes?


127

Tôi vừa nâng cấp kubeadm và kubelet lên v1.8.0. Và cài đặt bảng điều khiển sau tài liệu chính thức .

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

Sau đó, tôi bắt đầu trang tổng quan bằng cách chạy

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

Sau đó, may mắn thay, tôi đã có thể truy cập trang tổng quan thông qua http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Tôi được chuyển hướng đến một trang đăng nhập như thế này mà tôi chưa từng gặp trước đây. nhập mô tả hình ảnh ở đâyCó vẻ như có hai cách xác thực.

Tôi đã cố gắng tải lên /etc/kubernetes/admin.confdưới dạng kubeconfig nhưng không thành công. Sau đó, tôi đã cố gắng sử dụng mã thông báo mà tôi nhận được kubeadm token listđể đăng nhập nhưng lại không thành công.

Câu hỏi là làm cách nào tôi có thể đăng nhập vào bảng điều khiển. Có vẻ như họ đã thêm nhiều cơ chế bảo mật hơn trước. Cảm ơn.


6
Tôi không thấy câu hỏi lập trình ở đây. Hãy thử serverfault.com thay thế.
Jolta

Nếu bạn KHÔNG sử dụng localhost, bạn có thể được yêu cầu chỉ sử dụng https, nếu không biểu mẫu đăng nhập sẽ không thành công (không có tin nhắn lỗi). Chi tiết: stackoverflow.com/questions/53957413/…
Putnik

Bạn cần tạo mã thông báo, hãy làm theo hướng dẫn này - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh

1
@Jolta Devops hiện là một hoạt động lập trình nhờ kubernetes, bạn sẽ phải đối mặt với nó;)
Fabien Quatravaux

Câu trả lời:


165

Kể từ bản phát hành 1.7 Trang tổng quan hỗ trợ xác thực người dùng dựa trên:

- Trang tổng quan trên Github

Mã thông báo

Đây Tokencó thể được Static Token, Service Account Token, OpenID Connect Tokentừ Kubernetes Chứng thực , nhưng không phải là kubeadm Bootstrap Token.

Với kubectl, chúng ta có thể lấy một tài khoản dịch vụ (ví dụ: bộ điều khiển triển khai) được tạo trong kubernetes theo mặc định.

$ 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

Trang tổng quan cần người dùng trong tệp kubeconfig có một username & passwordhoặc token, nhưng admin.confchỉ có client-certificate. Bạn có thể chỉnh sửa tệp cấu hình để thêm mã thông báo đã được trích xuất bằng phương pháp trên.

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

Thay thế (Không được khuyến nghị cho Sản xuất)

Đây là hai cách để bỏ qua xác thực, nhưng hãy sử dụng một cách thận trọng.

Triển khai trang tổng quan với HTTP

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

Trang tổng quan có thể được tải tại http: // localhost: 8001 / ui với kubectl proxy.

Cấp đặc quyền quản trị viên cho Tài khoản dịch vụ của Trang tổng quan

$ 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

Sau đó, bạn có thể sử dụng Skiptùy chọn trên trang đăng nhập để truy cập Trang tổng quan.

Nếu bạn đang sử dụng bảng điều khiển phiên bản v1.10.1 trở lên, bạn cũng phải thêm --enable-skip-loginvào các đối số dòng lệnh của triển khai. Bạn có thể làm như vậy bằng cách thêm nó vào argstrong kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Thí dụ:

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

3
Bạn có thể cho chúng tôi một ví dụ về cách tạo người dùng sau đó đăng nhập bằng mã thông báo không? Tôi vẫn chưa biết cách sử dụng mã thông báo hoạt động như một người dùng.
xren

Xem tĩnh Mã tập tin trong Kubernetes Chứng thực
Silverfox

97

TL; DR

Để nhận mã thông báo trong một dòng oneliner:

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

Điều này giả định rằng ~ / .kube / config của bạn hiện diện và hợp lệ. Và điều đó cũng kubectl config get-contextschỉ ra rằng bạn đang sử dụng đúng ngữ cảnh (cụm và không gian tên) cho bảng điều khiển mà bạn đang đăng nhập.

Giải trình

Tôi rút ra câu trả lời này từ những gì tôi học được từ câu trả lời của @ silverfox. Đó là một bài viết rất nhiều thông tin. Thật không may, nó không thể cho bạn biết cách thực sự đưa thông tin vào thực tế. Có lẽ tôi đã làm DevOps quá lâu, nhưng tôi nghĩ trong vỏ bọc. Đối với tôi khó khăn hơn nhiều khi học hoặc dạy bằng tiếng Anh.

Đây là oneliner có ngắt dòng và thụt lề để dễ đọc:

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

Có 4 lệnh riêng biệt và chúng được gọi theo thứ tự sau:

  • Dòng 2 - Đây là lệnh đầu tiên từ phần Token của @ silverfox .
  • Dòng 3 - In chỉ là người đầu tiên lĩnh vực của sự khởi đầu phù hợp với deployment-controller-token-(đó là tên pod)
  • Dòng 1 - Đây là lệnh thứ hai từ phần Token của @ silverfox .
  • Dòng 5 - In chỉ thứ hai lĩnh vực của dòng mà đầu tiên lĩnh vực là "mã thông báo:"

2
Có một powerhell tương đương với awk không?
duct_tape_coder

1
@duct_tape_coder chỉ cần kubectl -n kube-system lấy bí mật và tìm mã thông báo với tên deploy-controller-token-SOMEHASH, sau đó chỉ kubectl -n kube-system mô tả bí mật triển khai-controller-token-SOMEHASH. Đó là những gì awk làm.
qubits

2
Câu trả lời chính xác. Để mang nó một bước nữa: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' Hoặc đẩy quyền clipboard của bạn 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)từ github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik

48

Nếu bạn không muốn cấp quyền quản trị viên cho tài khoản dịch vụ bảng điều khiển, bạn có thể tạo tài khoản dịch vụ quản trị cụm.

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

Và sau đó, bạn có thể sử dụng mã thông báo của tài khoản dịch vụ quản trị cụm vừa tạo.

$ 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

Tôi đã trích dẫn nó từ hướng dẫn giantwarm - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/


5
Câu trả lời này hoạt động tốt đối với tôi trong khi câu trả lời được chấp nhận đã được đăng nhập với tôi nhưng với một số lỗi ủy quyền.
ZedTuX

3
Lưu ý rằng lệnh này cung cấp cho tài khoản dịch vụ nhiều quyền và có thể không được khuyến khích trong môi trường sản xuất.
X. Wang

4
có thể muốn thêm serviceaccount dưới Kube hệ thống cũng vì đây là nơi cuộc sống bảng điều khiển
atomaras

Đã làm cho tôi! tôi đã để lộ dịch vụ với cổng 8001 và sử dụng đường hầm SSH để truy cập từ máy cục bộ của mình.
Anuradha Fernando

18

Kết hợp hai câu trả lời: 4999269847761914 :

# 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

Một lớp lót đơn giản tự giải thích để trích xuất mã thông báo để đăng nhập bảng điều khiển kubernetes.

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

Sao chép mã thông báo và dán nó trên bảng điều khiển kubernetes dưới tùy chọn đăng nhập mã thông báo và bạn có thể sử dụng bảng điều khiển kubernetes


5

Tất cả các câu trả lời trước đây là tốt cho tôi. Nhưng câu trả lời thẳng thắn về phía tôi sẽ đến từ https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token . Chỉ cần sử dụng kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Bạn sẽ có nhiều giá trị cho một số phím ( Name, Namespace, Labels, ..., token). Điều quan trọng nhất là tokentương ứng với tên của bạn. sao chép mã thông báo đó và dán vào hộp mã thông báo. Hi vọng điêu nay co ich.


Sau khi thử một số câu trả lời ở trên, câu trả lời này đã hoạt động. Tôi đã sao chép một mã thông báo ra, dán nó và bắt đầu, Tôi tham gia.
CENTURION

5

Bạn cần làm theo các bước sau trước khi xác thực mã thông báo

  1. Tạo tài khoản dịch vụ quản trị cụm

    kubectl create serviceaccount dashboard -n default
    
  2. Thêm các quy tắc ràng buộc cụm vào tài khoản trang tổng quan của bạn

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Nhận mã thông báo bí mật bằng lệnh này

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Chọn xác thực mã thông báo trong trang đăng nhập bảng điều khiển Kubernetes nhập mô tả hình ảnh ở đây

  5. Bây giờ bạn có thể đăng nhập


0

Tải xuống https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

thêm vào

type: NodePort for the Service

Và sau đó chạy lệnh này:

kubectl apply -f kubernetes-dashboard.yaml

Tìm cổng tiếp xúc bằng lệnh:

kubectl get services -n kube-system

Bạn sẽ có thể tải trang tổng quan tại http: // hostname: contactport / mà không cần xác thực


Đây là lời khuyên hoàn toàn khủng khiếp. Ngay cả khi nó đúng về mặt kỹ thuật
Christopher Thomas

0

Đăng nhập bỏ qua đã bị tắt theo mặc định do các vấn đề bảo mật. https://github.com/kubernetes/dashboard/issues/2672

trong bảng điều khiển của bạn, bạn hãy thêm lập luận này

- --enable-skip-login

để lấy lại nó


1
Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Stefan Becker

1
Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. - Từ đánh giá
Rick

@StefanBecker liên kết không phải là câu trả lời mà là nguồn để chứng minh The skip login has been disabled by default due to security issues. Câu trả lời là - --enable-skip-login. Có thể đây không phải là câu trả lời hay nhất nhưng đây không phải là câu trả lời chỉ có liên kết.
derHugo

@Rick liên kết không phải là câu trả lời mà là nguồn để chứng minh The skip login has been disabled by default due to security issues. Câu trả lời là - --enable-skip-login. Có thể đây không phải là câu trả lời hay nhất nhưng đây không phải là câu trả lời chỉ có liên kết.
derHugo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.