Kubernetes
[kubernetes] 3. kubernetes 관리도구1 - kubernetes dashboard
su''@
2025. 3. 18. 05:24
1. kubernetes Dashboard란?
- kubernetes Dashboard는 kubernetes 클러스터를 위한 웹 기반 UI를 제공한다. kubernetes 환경관리, 문제해결, monitoring 하는 직관적인 접근 방식을 제공하는데, 모든 노드에서 메모리 및 CPU 사용량을 포함한 기본 지표에 접근 가능하다.
- k8s에서 제공하는 거의 모든 워크로드 리소스의 워크로드 상태를 모니터링할 수 있다.
2. Dashboard 설치 : https://github.com/kubernetes/dashboard/releases
- k8s의 버전에 맞는 release를 선택해 설치하면 된다.
- image
kubernetes Dashboard : docker.io/kubernetesui/dashboard:v2.7.0
Matrics scraper : docker.io/kubernetesui/metrics-scraper:v1.0.8
- image
- install
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
3. Dashboard 접속방법
- proxy port를 이용해 접속
# local port 생성 kubectl proxy --port=[port#]&
- NodePort를 이용해 접속
생성된 dashboard의 service를 ClusterIP → NodePort로 변경 - APIServer를 이용한 보안 접속
4. Dashboard 관리 목적 serviceaccount 생성 & 권한 부여
$ mkdir dashboard_rbac && cd $_
~/dashboard_rbac$ vi dashboard-admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
~/dashboard_rbac$ vi ClusterRoleBinding-admin-user.yml
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: kubernetes-dashboard
# serviceaccount 생성
$ kubectl apply -f dashboard-admin-user.yaml
serviceaccount/admin-user created
# SA-ClusterRole Binding
$ kubectl apply -f ClusterRoleBinding-admin-user.yaml
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
5. APIserver를 이용한 보안 접근을 위해 *.crt와 *.key 생성
# token 생성
$ kubectl -n kubernetes-dashboard create token admin-user
$ 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
$ ls
ClusterRoleBinding-admin-user.yaml dashboard-admin-user.yaml kubecfg.crt kubecfg.key
6. openssl pkcs12(Personal Information Exchange Syntax) 인증서 생성
- P12 확장자 또는 pfx 확장자 파일 처리에 대한 OpenSSL 명령어 사용법
$ openssl pkcs12 -export -clcerts-inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-admin" Enter Export Password: (passwd) Verifying - Enter Export Password: (passwd) $ sudo cp /etc/kubernetes/pki/ca.crt ./ $ ls ca.crt ClusterRoleBinding-admin-user.yml dashboard-admin-user.yaml kubecfg.crt kubecfg.key kubecfg.p12
- 윈도우로 생성된 인증서 복사: WinSCP를 이용해 dashboard_rbac 디렉토리를 윈도우로 이동
- powershell or cmd를 관리자 권한으로 실행
$ cd [인증서 존재 경로] $ certutil.exe -addstore "Root" ca.crt Root "신뢰할 수 있는 루트 인증 기관" 서명이 공개 키와 일치합니다. "kubernetes" 인증서가 저장소에 추가되었습니다. CertUtil: -addstore명령이 성공적으로 완료되었습니다. $ certutil.exe -p k8spass# -user -importPFX kubecfg.p12 "kubernetes-admin" 인증서가 저장소에 추가되었습니다. CertUtil: -importPFX명령이 성공적으로 완료되었습니다. $ certmgr.msc
- dashboard 접속
- https://192.168.56.100:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
- 크롬의 incognito 탭을 이용해 접속 (ctrl+shift+n)
- 토큰에 위에서 발급받았던 admin-user token을 입력해주면 접속 가능하다. 이 때 토큰은 유효시간이 있기 때문에 만료됐을 경우에는 재발급을 받아줘야 한다.
만약 재발급 받는 게 불편하다면 --token-ttl=0 을 container args에 추가하여 세션시간 초과를 비활성화 시켜주면 된다.
# token 인증을 완전히 비활성화하려면 다음을 추가 → --enable-skip-login$ kubectl -n kubernetes-dashboard edit deployments kubernetes-dashboard --- spec: containers: - args: - --auto-generate-certificates - --namespace=kubernetes-dashboard - --token-ttl=0
- pod 재시작 확인
- pod 배포 후 dashboard 확인