본문 바로가기
IT Knowledge/Kubernetes

Kubernetes 대시보드 UI 배포(with kube-apiserver)

by Seok. 2022. 4. 8.
반응형

kubernetes cluster를 만들면, 모든 관리를 CLI를 통해서만 해야하나?

UI가 없을까?를 먼저 생각이 들게 됩니다. 

 

따라서, kubernetes 대시보드를 설치합니다. 

 

위의 대시보드를 열어보는 가장 쉬운방법은 kube-proxy를 사용하는 방법이지만, 

kubectl proxy를 이용하는 방법은 Localhost 에서 밖에 접근이 안된다. 

 

따라서, 내가 UI를 다른사람들에게도 제공하려고 하면, API Server를 이용해야한다. 

 


[대시보드 UI 배포]

# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

recommended.yaml 파일을 직접 다운로드 받아서 실행해보면 아래와 같다. 

 


[kubectl proxy를 이용하는 방법]

# kubectl proxy

 

kubectl은  http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 를 통해 대시보드에 접속할 수 있게 해줄 것이다.

UI는 오직 커맨드가 실행된 머신에서만 접근 가능하다. 상세 내용은 kubectl proxy --help 옵션을 확인한다.

 


[API Server 활용 방법(kube-apiserver 통해 접근하는 방식)]

  • Step1 : kube-apiserver 접근하기 위한 인증서 생성
  • Step2 : 인증서 클라이언트에 적용

[Step1 - 인증서 생성]

.kube/config 파일의 client certificate client key 추출하여 각각 kubecfg.crt kubecfg.key 파일 생성

# grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
# grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key

 

Key를 포함한 p12 인증서 생성

# openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-admin"

"kubecfg.p12" "/etc/kubernetes/pki/kubecfg.crt" 파일은 클라이언트PC 다운로드

 

[Step2 - 인증서 클라이언트에 적용]

다운로드 받은 인증서를 클라이언트PC에 설치한다.

kubecfg.crt는 신뢰할  있는 루트 인증 기관 인증서에 설치 Kubecfg.p12 개인용인증서 설치

[대시보드 로그인 시도]

https://[MasterServerIP]:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login

인증서 선택 후 확인

 

오... 로그인 하려면 Token(토큰)이 필요하네. 

 

사용자 계정 admin-user 토큰 생성 방법은?

계정 생성 및 Role Binding

# cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
EOF
serviceaccount/admin-user created

==================================================================

# cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1 
kind: ClusterRoleBinding 
metadata: 
  name: admin-user 
roleRef: 
  apiGroup: rbac.authorization.k8s.io 
  kind: ClusterRole 
  name: cluster-admin 
subjects: 
- kind: ServiceAccount 
  name: admin-user 
  namespace: kube-system 
EOF
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

토큰값 확인

# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

토큰값을 획득했다!!

 

그럼 다시 로그인 시도

대시보드 로그인 성공!

 

 

그러나, 계속 이렇게 토큰으로 로그인할수는 없다. 

쉽고 간편하게 로그할 수 있는 방법이 필요하다!!

반응형

댓글