[kubernetes] Kubernetes 대시 보드에 로그인하는 방법은 무엇입니까?

방금 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로그인 을 위해받은 토큰을 사용하려고 했지만 다시 실패했습니다.

문제는 대시 보드에 로그인하는 방법입니다. 이전보다 많은 보안 메커니즘을 추가 한 것 같습니다. 감사.



답변

릴리스 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


답변

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 :” 인 행 의 두 번째 필드 만 인쇄합니다 .

답변

대시 보드 서비스 계정에 관리자 권한을 부여하지 않으려면 클러스터 관리자 서비스 계정을 만들 수 있습니다.

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


답변

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


답변

kubernetes 대시 보드 로그인을 위해 토큰을 추출하기위한 설명이 필요없는 간단한 한 줄입니다.

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

토큰을 복사하여 토큰 로그인 옵션 아래의 kubernetes 대시 보드에 붙여 넣으면 kubernetes 대시 보드를 사용하는 것이 좋습니다.


답변

이전의 모든 답변은 나에게 좋습니다. 그러나 내 측면의 직접적인 대답은 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귀하의 이름에 해당하는 것입니다. 해당 토큰을 복사하여 토큰 상자에 붙여 넣습니다. 도움이 되었기를 바랍니다.


답변

토큰 인증 전에 다음 단계를 따라야합니다.

  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. 이제 로그인 할 수 있습니다.