클라우드 네이티브 애플리케이션 부트캠프 알림

티스토리 뷰

2024.10월 현재 kuberenetes-dashboard는 Helm 설치만 지원합니다. 

이 가이드에서는 k8s cluster가 아닌 외부 VM을 통해 kubernetes-dashboard를 접근하는 방법을 가이드 합니다. 

1. 설치

아래 공식 사이트를 참조하여 Helm으로 설치합니다. 

https://github.com/kubernetes/dashboard

 

GitHub - kubernetes/dashboard: General-purpose web UI for Kubernetes clusters

General-purpose web UI for Kubernetes clusters. Contribute to kubernetes/dashboard development by creating an account on GitHub.

github.com

 

설치 후 Pod가 실행되었는지 확인합니다.

ubuntu@infra:~/.kube$ k get po
NAME                                                    READY   STATUS    RESTARTS       AGE
curl                                                    1/1     Running   1 (172m ago)   176m
kubernetes-dashboard-api-5966688c8-2d94m                1/1     Running   0              103m
kubernetes-dashboard-auth-77d4b5c96f-bs7qr              1/1     Running   0              103m
kubernetes-dashboard-kong-7696bb8c88-cvs25              1/1     Running   0              155m
kubernetes-dashboard-metrics-scraper-6d659646c4-6kkgh   1/1     Running   0              155m
kubernetes-dashboard-web-669b6977f7-nkrc5               1/1     Running   0              155m

 

서비스 객체를 확인합니다. 

'kubernetes-dashboard-kong-proxy'를 통해 접근하게 됩니다. 

ubuntu@infra:~/.kube$ k get svc
NAME                                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
kubernetes-dashboard-api               ClusterIP   10.111.163.222   <none>        8000/TCP                        153m
kubernetes-dashboard-auth              ClusterIP   10.106.227.182   <none>        8000/TCP                        153m
kubernetes-dashboard-kong-manager      NodePort    10.108.214.153   <none>        8002:30597/TCP,8445:30107/TCP   153m
kubernetes-dashboard-kong-proxy        ClusterIP   10.104.18.108    <none>        443/TCP                         153m
kubernetes-dashboard-metrics-scraper   ClusterIP   10.98.145.116    <none>        8000/TCP                        153m
kubernetes-dashboard-web               ClusterIP   10.100.152.131   <none>        8000/TCP                        153m

 

2. 접근 테스트 

외부에서 접근 가능하고 k8s cluster를 private ip로 접근 가능한 VM에서 작업합니다. 

보통 bastian 또는 infra VM일겁니다. 

아래 명령으로 proxying을 합니다. 아래 예에서 '10443'포트는 변경할 수 있습니다. 

sudo kubectl port-forward --namespace kubernetes-dashboard service/kubernetes-dashboard-kong-proxy 10443:443 --address=0.0.0.0

 

https로 접근해야 하기 때문에 Local PC의 hosts 파일에 임의의 도메인을 등록합니다. 

만약, 공인 도메인이 있다면 그걸 사용하시면 됩니다.  아래 예를 참조하여 설정 하십시오. 

당연히 아래 예에서 13.215.90.232는 외부에서 접근 가능한 VM의 public IP이고 

mydashboard.io은 편한 도메인으로 바꾸면 됩니다. 

13.215.90.232 mydashboard.io

 

웹 브라우저에서 https://{host}:{proxy port}로 접근합니다. 

위 예에서는 https://mydashboard.io:10443으로 접근하면 됩니다.  

 

 

3. 로그인 Service Account 생성 및 권한 부여

로그인 할 Service Account를 kubernetes-dashboard 네임스페이스에 생성합니다. 

이 작업은 k8s cluster 접근이 가능한 아무 VM에서 하시면 됩니다. 

먼저 namespace를 kubernetes-dashboard로 변경 합니다. 

kubens kubernetes-dashboard

Service Account를 생성합니다. 이름은 아무거나 상관 없지만 이후 작업 시 실수 안하기 위해 'kube-admin'으로 합니다. 

k create sa kube-admin

super admin권한인 'cluster-admin'을 부여합니다. 

kubectl create clusterrolebinding kube-admin --clusterrole cluster-admin --serviceaccount=kubernetes-dashboard:kube-admin

 

kube-admin을 위한 Secret 객체를 만듭니다. 이 객체의 token값으로 로그인하게 됩니다. 

아래와 같이 yaml파일을 만들고, kubectl apply 명령으로 생성합니다. 

apiVersion: v1
kind: Secret
metadata:
  name: kube-admin-secret
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: kube-admin
type: kubernetes.io/service-account-token

 

아래는 생성하는 예시 입니다. 

kubectl apply -f secret-kube-admin.yaml

 

인증 토큰 값을 구합니다. 

아래 예시를 참고하세요. 여기서 'token:' 뒤에 있는 값이 인증 토큰 값입니다.  

ubuntu@bastion:~/install$ kubectl describe secret kube-admin-secret 
Name:         kube-admin-secret
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kube-admin
              kubernetes.io/service-account.uid: 504181a0-a22e-4887-8175-83893dd0b2f5

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1107 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlU2UFlQeGFNWGc3QWhVdTRfNmdSSV84N1NuZ0dieFNING9wOEJtbkg0OTQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlLWFkbWluLXNlY3JldCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTA0MTgxYTAtYTIyZS00ODg3LTgxNzUtODM4OTNkZDBiMmY1Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmt1YmUtYWRtaW4ifQ.ovlY82LPmT4y3fTeLYMN-hLT5fNYu0fjF-p0LJ-WDe_yVJxPOvTjXKMoB_n4Hb8rba6wRtR2h1UYgIddlc7i2CiZJ8O7koATwSExv-ReaaGr1hveenIdOgcxVaId2ZfeQnwrnEPx8FFqKwFIdv60ehQ5jHtdZEQbvK3jpZzYZvOpeyFQmTUENlVZr83F6TMd-kMpNIqq97ywfYcLJHZZVlu5o5joS0TPnz6bm62L4KzqPhRC899ZGxAGzcwru5bPauF-Ezo2Y-z0aHNOUelCIameCiGXo1tqIsXM9eKOgLGJLNgQJkkrgB_gwew070zq5uuE3N2rP5Fhmy6z3VvTLQ

 

이 인증 토큰으로 로그인 해 보십시오. 

 

 

4. kubenetes-dashboard proxying을 service 로 등록

터미널이 종료되도 proxying이 종료되지 않게 하고, VM이 시작할 때 자동으로 proxying명령이 수행되게 합니다. 

먼저,  위에서 kubectl로 프락싱한 것을 CTRL-C로 종료합니다.

이 작업은 반드시 proxying할 VM에서 하셔야 합니다. 

작업할 user는 sudo권한을 부여받은 사용자 또는 root로 하시면 됩니다. 

service 정의 파일을 만듭니다. 

ubuntu@infra:~/.kube$ sudo vi /etc/systemd/system/kubectl-port-forward.service

[Unit]
Description=Kubernetes Port Forward Service
After=network.target

[Service]
Type=simple
ExecStart=sudo kubectl port-forward --namespace kubernetes-dashboard service/kubernetes-dashboard-kong-proxy 10443:443 --address=0.0.0.0
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

 

service를 등록하고, 시작한 후 상태를 확인 합니다. 

sudo systemctl daemon-reload

sudo systemctl enable kubectl-port-forward --now

sudo systemctl status kubectl-port-forward

 

최종으로 dashboard 접근과 로그인을 테스트 합니다. 

 

 

 

 

 

댓글

클라우드 네이티브 애플리케이션 부트캠프 알림