Kubernetes 설치를 저와 같이 했다면, addon으로 Dashboard도 설치가 되었을 것이다.
- https://www.whatwant.com/entry/Kubernetes-Install-1
그런데, 정말 설치가 잘 되었을까?
K8s master 서버에 접속 후 한 번 살펴보자.
(master)$ kubectl get deployments --namespace kube-system NAME READY UP-TO-DATE AVAILABLE AGE calico-kube-controllers 1/1 1 1 3d19h coredns 2/2 2 2 3d19h dns-autoscaler 1/1 1 1 3d19h kubernetes-dashboard 1/1 1 1 3d19h kubernetes-metrics-scraper 1/1 1 1 3d19h metrics-server 1/1 1 1 3d19h |
오옷! 뭔가 보인다.
"kubernetes-dashboard"라는 항목이 보인다.
어떻게 접근해야할지 확인하기 위해 service 항목들을 살펴보자.
(master)$ kubectl get services --namespace kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coredns ClusterIP 10.233.0.3 <none> 53/UDP,53/TCP,9153/TCP 3d19h dashboard-metrics-scraper ClusterIP 10.233.43.183 <none> 8000/TCP 3d19h kubernetes-dashboard ClusterIP 10.233.51.126 <none> 443/TCP 3d19h metrics-server ClusterIP 10.233.30.232 <none> 443/TCP 3d19h |
아직 ClusterIP로만 연결되었기 때문에 K8s 밖에서 연결해볼 수 없는 상태다.
밖에서 접근할 수 있는 경로를 만들어보자.
dashboard의 service 항목을 수정해보자.
(master)$ kubectl edit service --namespace kube-system kubernetes-dashboard |
ClusterIP 부분을 "NodePort"로 변경하면 된다.
... selector: k8s-app: kubernetes-dashboard sessionAffinity: None type: ClusterIP status: loadBalancer: {} |
다시 확인해보자.
(master)$ kubectl get services --namespace kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coredns ClusterIP 10.233.0.3 <none> 53/UDP,53/TCP,9153/TCP 3d21h dashboard-metrics-scraper ClusterIP 10.233.43.183 <none> 8000/TCP 3d21h kubernetes-dashboard NodePort 10.233.51.126 <none> 443:31934/TCP 3d21h metrics-server ClusterIP 10.233.30.232 <none> 443/TCP 3d21h |
NodePort로 잘 변경되었으며 "31934"포트로 연결할 수 있음을 알려주고 있다.
바로 웹브라우져로 열어보자.
kubernetes-dashboard는 기본적으로 443포트, https 방식으로 제공되고 있다.
하지만, 당연하게도 인증서가 공인 인증서가 아니기에 ...
그러나, 고급 버튼을 누르면 길이 보인다.
안전하지 않다고 하지만, 전부 내거인데 뭐~ 그냥 이동하자 ^^
어!? 인증이 필요하단다.
이런...
그래... 권한이 필요하겠지...
dashboard를 위한 Service Account를 하나 생성하자.
(master)$ nano dashboard-serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata: name: k8s-dashboard namespace: kube-system |
ClusterRole Admin 권한을 부여하자.
(master)$ nano dashboard-clusterrolebinding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: k8s-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: k8s-dashboard namespace: kube-system |
전부 create 해주면 된다.
(master)$ kubectl create -f dashboard-serviceaccount.yaml (master)$ kubectl create -f dashboard-clusterrolebinding.yaml |
만들어진 Service Account 정보를 살펴보자.
(master)$ kubectl describe serviceaccounts --namespace kube-system k8s-dashboard Name: k8s-dashboard Namespace: kube-system Labels: <none> Annotations: <none> Image pull secrets: <none> Mountable secrets: <none> Tokens: <none> Events: <none> |
어?! Tokens 부분에 아무런 정보가 없다! 이게 뭐지!?
- https://kubernetes.io/docs/concepts/configuration/secret/#service-account-token-secrets
Kubernetes 1.22 이후 버전부터는 token이 자동 생성되지 않는단다! 이런!
(master)$ kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready control-plane 3d20h v1.25.6 worker01 Ready <none> 3d20h v1.25.6 worker02 Ready <none> 3d20h v1.25.6 |
나는 지금 v1.25.6 버전이구나.
그럼 직접 token을 생성하는 수밖에 ...
(master)$ nano dashboard-token.yaml apiVersion: v1 kind: Secret metadata: name: k8s-dashboard-secret annotations: kubernetes.io/service-account.name: "k8s-dashboard" type: kubernetes.io/service-account-token |
Service Account가 있는 kube-system namespace에다가 만들어주면 된다.
(master)$ kubectl create -f dashboard-token.yaml --namespace kube-system |
만들어진 secret 정보를 살펴보면 token 정보도 보일 것이다.
(master)$ kubectl describe secrets --namespace kube-system k8s-dashboard-secret Name: k8s-dashboard-secret Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name: k8s-dashboard kubernetes.io/service-account.uid: 037ee808-781e-424b-a17a-215113708a3b Type: kubernetes.io/service-account-token Data ==== ca.crt: 1099 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6IkdBa0Mtc29XS1NGYl9pb1VuZzhpOHhQWlZaZEVOVTBIMWFQTHlVY21VNVUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrOHMtZGFzaGJvYX... |
그러면, Service Account 정보를 다시 살펴보자.
(master)$ kubectl describe serviceaccounts --namespace kube-system k8s-dashboard Name: k8s-dashboard Namespace: kube-system Labels: <none> Annotations: <none> Image pull secrets: <none> Mountable secrets: <none> Tokens: k8s-dashboard-secret Events: <none> |
token 정보가 연결되었음을 볼 수 있다.
이제, 앞에서 확인한 token 정보를 복사한 뒤에 dashboard에 입력해보자.
음?! 표시할 데이터가 없단다.
얼마나 힘들게 여기까지 들어왔는데!!!!
검색창 옆에 namespace 부분을 "kube-system"으로 변경해보자.
뭔가 많이 보인다~~~!!!
눈에 뭔가 보이니까 좋다! ^^
'Dev Tools > Kubernetes' 카테고리의 다른 글
minikube 설치하기 (0) | 2023.08.19 |
---|---|
Kubernetes 설치 (0) | 2023.04.17 |
Install `NGINX Ingress Controller` in Kubernetes (4) | 2021.09.18 |
Kubernetes 환경 구축 (Vagrant + VirtualBox + Kubespray) (0) | 2021.07.27 |
MinIO StandAlone in Kubernetes (0) | 2021.05.13 |