k8s-dashboard 배포 및 외부접속 설정하기

mmoo·2022년 5월 29일
0
post-thumbnail

kuberentes에서 공식으로 제공하는 기본 대시보드를 배포하고 대시보드 사이트에 외부에서 접속할 수 있도록 설정해보자!

대시보드 배포

k8s 공식 doc : 쿠버네티스 대시보드를 배포하고 접속하기
일단 위의 링크로 들어가자. 공식 doc에 대시보드를 배포하는 방법이 나와있다.

우리는 외부에서 접속하는 대시보드를 배포할 것이므로, doc에서 제공해 주는 yaml 파일의 주소로 들어가 내용만 긁어와서 dashboard.yaml 파일로 만든다.

긁어온 내용을 쭉 내리다 보면 Service 리소스가 보인다.
이 부분의 타입을 NodePort로 변경하여 외부에서 특정 포트로 대시보드 사이트에 접속할 수 있도록 할 것이다.

dashboard.yaml

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - nodePort: 30880
			port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
	type: NodePort

위와 같이 서비스 타입을 NodePort로 변경하고, 원하는 포트값을 지정해준다. 이 예제에서는 30880으로 설정했다.
kubectl apply -f dashboard.yaml 로 변경한 yaml 파일을 배포해준다.

배포 서버의 지정된 포트로 접속해본다.
성공적으로 배포되었다면 로그인 화면이 나오게 된다🤠

🚨 만약 접속되지 않는다면 해당 포트가 닫힌 상태일 수 있습니다. 사용하는 클라우드 플랫폼의 네트워크 보안 그룹에 해당 포트를 추가하여 열어주세요.



사용자 권한 설정

클러스터 데이터를 보호하기 위해, 대시보드는 기본적으로 최소한의 RBAC 설정을 제공한다. 대시보드를 Bearer 토큰으로 로그인 해보자.
공식 doc에 설정 방법이 나와 있으므로, 이 과정을 따라서 진행해 볼 것이다😏
공식 doc의 설정 방법 링크

샘플 사용자 만들기

🚨  샘플 사용자에게는 관리자(admin) 권한이 부여되므로 주의
	(대시보드 계정에 admin 권한을 부여하는 것은 보안 위험 요소가 될 수 있음)

dashboard-user.yaml


apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
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

한 파일에 ServiceAccountClusterRoleBinding을 설정하여 배포한다.

kubeadm, kops, kubespray 등과 같은 배포 도구를 사용했다면 cluster-admin 이라는 ClusterRole은 이미 존재할 것이다.
그러므로 현재 예제에서는 ServiceAccount를 위한 ClusterRoleBinding만 생성해 줄 것이다.

Bearer Token 값 가져오기

아래의 명령어를 통해 위에서 배포된 ServiceAccountSecret을 base64로 디코드하여 가져온다.

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

결괏값

eyJhbGciOiJSUzI1NiIsImtpZCI6IjRIdWNDU2FkZUpBM0tWNHdEUlBHQnlxV0tqS1VyTGJDZU5acHVNcHl4cmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTQ0NGZwIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhY2NjY2E4Mi1iNTc3LTRkNWYtOGZkMi01ODI3NWZlZDE5N2EiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.dA2pkEQcrwAthNW1k0nK1iWLSH8i1dHi5maQM5oCrhslmEEn_ftezhhn14rst0588E_zl5pPmZ2eDU97bpvQbvN_zBN21Nof5cIgyH5ilqRrWugP81d6XFeXm6RezQnfjVOAgqKYK_bSkNKBgVo_83PRJHFXzzjY3WpUgJTaN3_08-_TViXqX1lvLivqI3H0ffTFd93PuLQ1SAHVGnu5Lszo01ezXk8hsvkADHzC3PSpvOH3CJ6OpDCA-Dg2Nuv_Ye2Yuy0KUqf-TFlaOYhGIIviViJh_1AyMkqJsEymv4XGN5WLr85GrkcefTfR-RFHEPFlHyNwcl06VUX0my

토큰 값은 복사한 뒤, 토큰 입력창에 입력하여 로그인하면 된다.


로그인에 성공한 화면😎

profile
팔수록 모르는게 계속 나와💩

0개의 댓글