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.confkubeconfig 로 업로드하려고 했지만 실패했습니다. 그런 다음 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는 다음을 기반으로 사용자 인증을 지원합니다.

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의 설정 설정 - 자격 증명 클러스터 관리자 --token = bearer_token

대안 (프로덕션에는 권장되지 않음)

인증을 우회하는 두 가지 방법이 있지만주의해서 사용해야합니다.

HTTP로 대시 보드 배포

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

Dashboard는 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로그인 페이지의 옵션을 사용 하여 Dashboard에 액세스 할 수 있습니다 .

대시 보드 버전 v1.10.1 이상을 사용 --enable-skip-login하는 경우 배포의 명령 줄 인수 에도 추가해야합니다 . argsin 에 추가하여 그렇게 할 수 있습니다 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를 너무 오래 해왔을 수도 있지만 셸에서 생각합니다. 영어로 배우거나 가르치는 것이 훨씬 더 어렵습니다.

다음은 가독성을 위해 줄 바꿈 및 들여 쓰기가있는 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 행-@silverfox의 토큰 섹션 에서 첫 번째 명령입니다 .
  • 3 행- (포드 이름)로 시작하는 행 의 첫 번째 필드 만 인쇄합니다.deployment-controller-token-
  • 1 행-@silverfox의 토큰 섹션 에서 두 번째 명령입니다 .
  • 5 행- 첫 번째 필드 가 "token :" 인 행 의 두 번째 필드 만 인쇄합니다 .

2
awk에 해당하는 powershell이 ​​있습니까?
duct_tape_coder

1
@duct_tape_coder just kubectl -n kube-system get secrets and find the tokenm with name deployment-controller-token-SOMEHASH, 나중에 kubectl -n kube-system describe secret deployment-controller-token-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)from github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik

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

내가 giantswarm 가이드에서 인용 - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/


5
수락 된 답변이 저에게 로그인되었지만 일부 인증 오류가있는 동안 이것은 잘 작동했습니다.
ZedTuX

3
이 명령은 서비스 계정에 많은 권한을 부여하며 프로덕션 환경에서는 권장되지 않을 수 있습니다.
X. 왕

4
이 제품은 또한 이후 KUBE 시스템 하에서 serviceaccount를 추가 싶어 수있는 위치 대시 보드의 삶
atomaras

나를 위해 일했습니다! 포트 8001로 서비스를 노출하고 SSH 터널을 사용하여 로컬 컴퓨터에서 액세스했습니다.
Anuradha Fernando

18

두 가지 답변 결합 : 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

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합니다.
CENTURION

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 : // hostname : exposedport / 에서 인증없이 대시 보드를 가져올 수 있어야 합니다.


이것은 절대적으로 끔찍한 조언입니다. 기술적으로 정확하더라도
Christopher Thomas

0

보안 문제로 인해 로그인 건너 뛰기가 기본적으로 비활성화되어 있습니다. https://github.com/kubernetes/dashboard/issues/2672

대시 보드 yaml에서이 인수를 추가하십시오.

- --enable-skip-login

되찾기 위해


1
이 링크가 질문에 답할 수 있지만 여기에 답변의 필수 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 무효화 될 수 있습니다.
Stefan Becker 19 년

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.