방금 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
로그인 을 위해받은 토큰을 사용하려고 했지만 다시 실패했습니다.
문제는 대시 보드에 로그인하는 방법입니다. 이전보다 많은 보안 메커니즘을 추가 한 것 같습니다. 감사.
답변
릴리스 1.7부터 Dashboard는 다음을 기반으로 사용자 인증을 지원합니다.
Authorization: Bearer <token>
모든 요청에서 Dashboard에 전달되는 헤더입니다. 릴리스 1.6부터 지원됩니다. 우선 순위가 가장 높습니다. 있는 경우 로그인보기가 표시되지 않습니다.- Dashboard 로그인보기 에서 사용할 수있는 Bearer Token 입니다 .
- 대시 보드 로그인보기 에서 사용할 수있는 사용자 이름 / 비밀번호 입니다 .
- 대시 보드 로그인보기 에서 사용할 수있는 Kubeconfig 파일 .
토큰
여기서 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
하는 경우 배포의 명령 줄 인수 에도 추가해야합니다 . args
in 에 추가하여 그렇게 할 수 있습니다 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/
답변
두 가지 답변 결합 : 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}')
답변
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
귀하의 이름에 해당하는 것입니다. 해당 토큰을 복사하여 토큰 상자에 붙여 넣습니다. 도움이 되었기를 바랍니다.
답변
토큰 인증 전에 다음 단계를 따라야합니다.
-
클러스터 관리 서비스 계정 만들기
kubectl create serviceaccount dashboard -n default
-
대시 보드 계정에 클러스터 바인딩 규칙 추가
kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
-
이 명령으로 비밀 토큰 가져 오기
kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
-
이제 로그인 할 수 있습니다.