쿠버네티스 대시보드를 설치하고 외부에서 접근할 수 있도록 설정하는 방법
쿠버네티스 대시보드는 클러스터 리소스를 시각적으로 관리하고 모니터링할 수 있는 웹 UI입니다.
1. 쿠버네티스 대시보드 설치
공식 매니페스트를 사용하여 쿠버네티스 대시보드를 설치합니다
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yamlnamespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper createdkubernetes-dashboard 네임스페이스 확인
kubectl get all -n kubernetes-dashboardNAME                                             READY   STATUS    RESTARTS   AGE
pod/dashboard-metrics-scraper-5cb4f4bb9c-k7bbd   1/1     Running   0          9m1s
pod/kubernetes-dashboard-d77c86c87-4lfbr         1/1     Running   0          9m2s
NAME                                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/dashboard-metrics-scraper   ClusterIP   10.110.88.27   <none>        8000/TCP  9m2s
service/kubernetes-dashboard        ClusterIP   10.107.32.5    <none>        443/TCP   9m2s
NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dashboard-metrics-scraper   1/1     1            1           9m1s
deployment.apps/kubernetes-dashboard        1/1     1            1           9m2s
NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/dashboard-metrics-scraper-5cb4f4bb9c   1         1         1       9m1s
replicaset.apps/kubernetes-dashboard-d77c86c87         1         1         1       9m2s2. 서비스 계정 및 권한 설정
대시보드에 접근하기 위해서는 서비스 계정을 생성하고 필요한 권한을 부여해야 합니다.
관리 서비스 계정 생성(Service Account 생성)
kubectl create serviceaccount admin-user -n kubernetes-dashboard또는
cat <<EOF | kubectl create -f -
 apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: admin-user
   namespace: kubernetes-dashboard
EOF클러스터 관리자 권한 부여(Cluster Role Binding 생성)
kubectl create clusterrolebinding admin-user \
--clusterrole=cluster-admin \
--serviceaccount=kubernetes-dashboard:admin-user또는
cat <<EOF | kubectl create -f -
 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
EOF3. 토큰 생성
인증 토큰을 생성하고 출력합니다.
kubectl create token admin-user -n kubernetes-dashboard외부 접근을 위한 NodePort 또는 Ingress 설정
쿠버네티스 대시보드를 외부에서 접근할 수 있도록 NodePort 또는 Ingress를 설정합니다.
NodePort 설정
NodePort를 사용하여 외부에서 접근할 수 있도록 설정합니다.
kubectl get service kubernetes-dashboard -n kubernetes-dashboardNAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes-dashboard   ClusterIP   10.109.227.181   <none>        443/TCP   6m59skubernetes-dashboard 편집
kubectl edit service kubernetes-dashboard -n kubernetes-dashboard- type: ClusterIP -> type: NodePort 변경
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kubernetes-dashboard"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: "2024-07-19T14:10:48Z"
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  resourceVersion: "4424"
  uid: 35aef6a2-26c5-4667-ac22-de01a0005d5e
spec:
  clusterIP: 10.107.32.5
  clusterIPs:
  - 10.107.32.5
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}NodePort 확인
kubectl get service kubernetes-dashboard -n kubernetes-dashboardNAME                   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.109.227.181   <none>        443:31719/TCP   10mNodePort 사용자 지정
- nodePort 값을 원하는 포트로 설정할 수 있습니다.
kubectl edit service kubernetes-dashboard -n kubernetes-dashboard- nodePort: 31719 -> nodePort: 30001 변경
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kubernetes-dashboard"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: "2024-08-21T14:03:15Z"
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  resourceVersion: "11298"
  uid: 443c155a-34f1-45bf-82da-b1662e0fecbb
spec:
  clusterIP: 10.109.227.181
  clusterIPs:
  - 10.109.227.181
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - nodePort: 30679
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}NodePort 확인
kubectl get service kubernetes-dashboard -n kubernetes-dashboardNAME                   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.109.227.181   <none>        443:30001/TCP   10mIngress 설정
Ingress를 사용하여 외부에서 접근할 수 있도록 설정합니다.
NGINX Ingress Controller를 설치합니다.
- Ingress Controller가 설치되어 있어야 하며 설치되어 있지 않은 경우 먼저 설치를 진행합니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yamlIngress 리소스를 생성합니다.
vim kubernetes-dashboard-ingress.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubernetes-dashboard-ingress
  namespace: kubernetes-dashboard
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: <your-dashboard-domain>
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443
  tls:
  - hosts:
    - <your-dashboard-domain>
    secretName: kubernetes-dashboard-tls여기서 <dashboard-domain>은 대시보드에 접근할 도메인 이름으로 교체해야 합니다.
파일을 적용하여 Ingress를 생성합니다.
kubectl apply -f kubernetes-dashboard-ingress.yaml대시보드 접속
- NodePort를 사용하는 경우, 웹 브라우저에서 https://<NodeIP>:30001로 접속합니다.
- Ingress를 사용하는 경우, 설정한 도메인 이름을 사용하여 https://<dashbord-domain>로 접속합니다.
대시보드 로그인 화면에서 앞서 생성한 인증 토큰을 사용하여 로그인합니다.
kubectl -n kubernetes-dashboard create token admin-user
웹 브라우저
https://{NODE_IP}:30001
대시보드
- 쿠버네티스 대시보드 > 모든 네임스페이스

쿠버네티스 대시보드 토큰 제한 시간 변경(token --duration 변경)
서비스 계정(Service Account)에 대한 토큰 생성
kubectl create token --help$ kubectl create token --help
Request a service account token.
Examples:
  # Request a token with a custom expiration
  kubectl create token myapp --duration 10m
...
    --duration=0s:
	Requested lifetime of the issued token. The server may return a token with a longer or shorter lifetime.admin-user 토큰의 유효 기간을 24 시간으로 설정하여 생성
kubectl create token admin-user --duration=24h -n kubernetes-dashboard쿠버네티스 대시보드 삭제
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
외부에서 쿠버네티스 대시보드에 접근할 수 있습니다.
참고URL
- 쿠버네티스 문서 : 쿠버네티스 대시보드를 배포하고 접속하기
- Kubernetes Documentation : Manually create a long-lived API token for a ServiceAccount
- GitHub Repository : Kubernetes Dashboard
'리눅스' 카테고리의 다른 글
| stress 명령어 (0) | 2021.11.21 | 
|---|---|
| docker를 사용한 kafka 클러스터 설정 (0) | 2021.11.17 | 
| /var/run/docker.sock의 permission denied 발생하는 경우 (0) | 2021.11.02 | 
| [kubernetes] 쿠버네티스 클러스터 구성(CentOS 7) (0) | 2021.11.01 | 
| 쿠버네티스 초기화 오류(kubeadm init) (0) | 2021.11.01 | 
 
                  
                 
                  
                 
                  
                