클라우드 + DevOps/Kubernetes (k8s)

Kubernetes 실습 :: Virtual Machine에서 Kubernetes 설치 (6) 대시보드 인증서 생성

gamjadori 2024. 4. 12. 13:18
728x90

Kubernetes 실습 :: Virtual Machine에서 Kubernetes 설치 (6) 대시보드 인증서 생성 Ver. 1 / Ver. 2

<Ver. 1>

  • 권한 설정을 완료하였으나, 홈페이지에서 로그인 페이지가 뜨지 않아 방법만 정리 후, 간단하게 요약한 방법으로 인증서 설정 완료하였음.
  • 따라서, 오류가 있는 완벽하지 않은 방법이니 절차 따라하지 않을 것.
  • dashboard_rbac 디렉토리를 만들어 작업 진행

 

1. dashboard_rbac 디렉토리 생성

ubuntu@k8s-master:~$ mkdir dashboard_rbac
ubuntu@k8s-master:~$ ls
2163         cd              Desktop    Downloads  Pictures  pwd   Templates
calico.yaml  dashboard_rbac  Documents  Music      Public    snap  Videos
ubuntu@k8s-master:~$ cd dashboard_rbac

2. dashboard-admin-user.yaml 생성

ubuntu@k8s-master:~/dashboard_rbac$ vi dashboard-admin-user.yaml

<vi 편집 내용>

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

3. ClusterRoleBinding-admin-user.yml 생성

ubuntu@k8s-master:~/dashboard_rbas$ vi ClusterRoleBinding-admin-user.yml

<vi 편집 내용>

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

4. Kubernetes 대시보드 관리자 사용자 생성

ubuntu@k8s-master:~/dashboard_rbas$ kubectl apply -f dashboard-admin-user.yaml 
serviceaccount/admin-user created
ubuntu@k8s-master:~/dashboard_rbas$ kubectl apply -f ClusterRoleBinding-admin-user.yml 
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

 

5. 관리자 사용자 토큰 생성

ubuntu@k8s-master:~/dashboard_rbas$  kubectl -n kubernetes-dashboard get sa
NAME                   SECRETS   AGE
admin-user             0         4m14s
default                0         20m
kubernetes-dashboard   0         20m
ubuntu@k8s-master:~/dashboard_rbas$ kubectl -n kubernetes-dashboard get serviceaccounts 
NAME                   SECRETS   AGE
admin-user             0         4m24s
default                0         20m
kubernetes-dashboard   0         20m
ubuntu@k8s-master:~/dashboard_rbas$ kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6ImI3MnZNUFdRVWM5Vmx6czBIRlM0Nk5ob0hWMFA0cnZqLThJNGNmSUh5U3cifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzA3OTg2MjEwLCJpYXQiOjE3MDc5ODI2MTAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiYzIwYWQ1MDUtOTQ4My00YjE4LTk5MDMtZDExNDA3NWQzNTMxIn19LCJuYmYiOjE3MDc5ODI2MTAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.EW-SCmnqP8PzuQsUHgtcwZ3d6pAKYXON9L3b5thRyTgNqZbHaw0mRGOLjNB-NujVx68iUgkaKXVN0sBEV_nGEjGrWFa5mVX1xPTSB-6HUz7nVEKiRWFsR4VS5ja8HXT6ugYXbKxycqTE3iK0GAiBjT8xUni0D2HP2qyL-UO1CnUGUi26u46BQzOu1w4y1iwtTHOjjFs_P3SYR6Fp2MVLhiv-RU50aB5nK1Yl9q1-wFY9bAe973JmONAjdlJTBJMYQrG5iMIoj2g9X81t-F4eWbUHyYud_eqsVr70CXiH0FYuaafTQVXtNbOQxipxHTLKOpo2LMIjO_-U6BJlnODnpQ

 

6. 대시보드에 액세스하기 위해 클라이언트 측 SSL 인증서 및 키 생성

ubuntu@k8s-master:~/dashboard_rbac$ grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
ubuntu@k8s-master:~/dashboard_rbac$ ls
ClusterRoleBinding-admin-user.yml  dashboard-admin-user.yaml  kubecfg.crt
>> ~/.kube/config 파일에서 클라이언트 측 SSL 인증서 데이터를 추출하고, 해당 데이터를 base64로 디코딩한 후 kubecfg.crt 파일에 추가
ubuntu@k8s-master:~/dashboard_rbac$ grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
>> ~/.kube/config 파일에서 클라이언트 측 SSL 키 데이터를 추출하고, 해당 데이터를 base64로 디코딩한 후 kubecfg.key 파일에 추가
ubuntu@k8s-master:~/dashboard_rbac$ ls
ClusterRoleBinding-admin-user.yml  dashboard-admin-user.yaml  kubecfg.crt  kubecfg.key
ubuntu@k8s-master:~/dashboard_rbas$ openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-admin"
Warning: -clcerts option ignored with -export
Enter Export Password:
Verifying - Enter Export Password:
>> 인증서와 키를 사용하여 PKCS#12 포맷의 인증서 파일(kubecfg.p12)을 생성
ubuntu@k8s-master:~/dashboard_rbac$ ls
ClusterRoleBinding-admin-user.yml  dashboard-admin-user.yaml  kubecfg.crt  kubecfg.key  kubecfg.p12
ubuntu@k8s-master:~/dashboard_rbac$ sudo cp /etc/kubernetes/pki/ca.crt ./
[sudo] password for ubuntu: 
ubuntu@k8s-master:~/dashboard_rbac$ ls
ca.crt  ClusterRoleBinding-admin-user.yml  dashboard-admin-user.yaml  kubecfg.crt  kubecfg.key  kubecfg.p12
>> 클러스터의 CA 인증서를 현재 디렉토리로 복사 (대시보드에 접속할 때 사용)

 

7. 생성된 인증서를 통해 로그인

  • 이 과정에서 등록은 되었으나 로그인 페이지가 뜨지 않아 과정 진행 중단
  • PowerShell 관리자 권한으로 실행
  • 처음 위치가 System32에 있기 때문에 User/amdin/dashboard_rbac으로 이동하여 진행
PS C:\\Users\\admin> scp -r ubuntu@192.168.56.100:/home/ubuntu/dashboard_rbac ./
ubuntu@192.168.56.100's password:
dashboard-admin-user.yaml                                                                       100%   99    27.8KB/s   00:00
ClusterRoleBinding-admin-user.yml                                                               100%  271   108.9KB/s   00:00
kubecfg.crt                                                                                     100% 1147   475.0KB/s   00:00
kubecfg.key                                                                                     100% 1675   495.7KB/s   00:00
kubecfg.p12                                                                                     100% 2644   702.3KB/s   00:00
ca.crt
PS C:\\Users\\admin> cd dashboard_rbac
PS C:\\Users\\admin\\dashboard_rbac> certutil.exe -addstore "Root" ca.crt
Root "신뢰할 수 있는 루트 인증 기관"
서명이 공개 키와 일치합니다.
"kubernetes" 인증서가 저장소에 추가되었습니다.
CertUtil: -addstore 명령이 성공적으로 완료되었습니다.
PS C:\\Users\\admin\\dashboard_rbac> certmgr.msc

 

8. 대시보드 페이지 접속 (오류)

  • https://192.168.56.100:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login으로 접속

 

<Ver. 2> 쿠버네티스 인증서 간편 설치

1. 사용 명령어

ubuntu@k8s-master:~$ kubectl create -f <https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml>
ubuntu@k8s-master:~$ kubectl create -f <https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml>

<결과 확인>

 

2. 대시보드 접속 확인

  • https://192.168.56.100:30000으로 접속

 

3. 토큰 생성

  • 생성된 토큰을 통해 대시보드 접속해야 하기 때문에, 따로 메모해야 함
ubuntu@k8s-master:~/dashboard_rbac$ kubectl apply -f dashboard-admin-user.yaml
serviceaccount/admin-user created
ubuntu@k8s-master:~/dashboard_rbac$ kubectl apply -f ClusterRoleBinding-admin-user.yml
clusterrolebinding.rbac.authorization.k8s.io/admin-user unchanged
ubuntu@k8s-master:~/dashboard_rbac$ kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6ImI3MnZNUFdRVWM5Vmx6czBIRlM0Nk5ob0hWMFA0cnZqLThJNGNmSUh5U3cifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzA4MDQ3NDYzLCJpYXQiOjE3MDgwNDM4NjMsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiODAwYWNkYWYtMjM3Ni00Y2UyLWJiMGItMDljOTRiNjYyYzNiIn19LCJuYmYiOjE3MDgwNDM4NjMsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.ZEFuSTA_P156sJoQk0luT3b6fRN9MMXxud-nbHqRhdD3hE5PeeoVscCVdp2PXLDVg-CvluL6UrLn15n97vbGak1GkcWPzlVxrXc5f8wwBMyEpuIqXP7XhJ8_V0VQcUT05v1BXFdtdMblOz8qBIsquFrjhU0uHx-H2pEXFQHKGnmyoHXsY49RTC1KtyHEVBxBV4yktAZcy_onXEjpzl2iy5TWvSMHWvdl925Zih4KBlFk0mwVZLqHT1QmnBHJYH_lBI50AJvAdjNu8A9I4UevQCk5HEZzO8TD0pbNWsBNASgl5FuTRrXQgR1Bz6Ol3plCLGHEflVT2AYumoi_iS8ZKA

<dashboard-admin-user.yaml 내용>

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

<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
  • 주기적으로 로그아웃 및 토큰이 만료되기 때문에 계속 생성해야 함
  • kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6ImI3MnZNUFdRVWM5Vmx6czBIRlM0Nk5ob0hWMFA0cnZqLThJNGNmSUh5U3cifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzA4MDQ3NDYzLCJpYXQiOjE3MDgwNDM4NjMsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiODAwYWNkYWYtMjM3Ni00Y2UyLWJiMGItMDljOTRiNjYyYzNiIn19LCJuYmYiOjE3MDgwNDM4NjMsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.ZEFuSTA_P156sJoQk0luT3b6fRN9MMXxud-nbHqRhdD3hE5PeeoVscCVdp2PXLDVg-CvluL6UrLn15n97vbGak1GkcWPzlVxrXc5f8wwBMyEpuIqXP7XhJ8_V0VQcUT05v1BXFdtdMblOz8qBIsquFrjhU0uHx-H2pEXFQHKGnmyoHXsY49RTC1KtyHEVBxBV4yktAZcy_onXEjpzl2iy5TWvSMHWvdl925Zih4KBlFk0mwVZLqHT1QmnBHJYH_lBI50AJvAdjNu8A9I4UevQCk5HEZzO8TD0pbNWsBNASgl5FuTRrXQgR1Bz6Ol3plCLGHEflVT2AYumoi_iS8ZKA

 

4. 쿠버네티스 대시보드 접속

  • 토큰을 붙여넣기 하여 로그인 진행

<접속 완료>