728x90

쿠버네티스 대시보드

관련 문서

쿠버네티스 대시보드 설치 자체는 금방 끝난다. 편리하게 GUI를 이용해 보도록 하자.

 

1. 대시보드 적용

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

 

1.5 원격으로 서버에 접속하고 있다면, kubernetes-dashboard service의 yaml 변경이 필요하다.

kubectl edit services kubernetes-dashboard -n kubernetes-dashboard

해당 명령어를 통해 수정이 가능하다. 아랫쪽에 있는 type을 ClusterIP에서 NodePort로 변경하면 된다.

apiVersion: v1
kind: Service
  ...
spec:
  ports:
  - nodePort: 31116
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort
[root@master ~]#  kubectl get services -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.102.33.100   <none>        8000/TCP        17h
kubernetes-dashboard        NodePort    10.108.90.43    <none>        443:31116/TCP   17h

수정된 것을 확인하면 TYPE이 NodePort로 변경되었다. 마스터노드IP:노드포트(31116)으로 접속 가능하다.

해당 과정을 거치지 않고 원격지에서 마스터 노드 IP를 통해 대시보드에 접속하면 보안 문제로 토큰 입력이 불가능하다.

 

2. 대시보드 접속 활성화

kubectl proxy

프록시를 활성화 했다면 다음 링크로 대시보드 접근이 가능하다. http://localhost:8001/

1-5 단계를 거친 경우 https://마스터노드IP:NodePort 로 접속 가능하다.

 

3. 접속 방법

해당 주소로 접속하면, 다음과 같은 창이 뜬다.

 

4. 토큰 생성 방법

Serviceaccount는 kubectl get serviceaccount 명령어로 확인이 가능하지만, 권한이 없어 대시보드에 접근해도 아무것도 볼 수 없는 상태다. 그러므로 권한을 가지고 있는 어카운트를 만들어 보도록 하자. 대시보드 네임스페이스에 admin-user 어카운트를 만들어 준다.

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF
[root@master ~]# kubectl get serviceaccounts -n kubernetes-dashboard
NAME                   SECRETS   AGE
admin-user             1         65s
default                1         19h
kubernetes-dashboard   1         19h

 

만들고 권한을 생성해 준다. cluster-admin이라는 role이 모든 권한을 가지고 있다.

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
EOF
[root@master ~]# kubectl get clusterrolebinding admin-user
NAME         ROLE                        AGE
admin-user   ClusterRole/cluster-admin   45s

 

그런 다음 토큰을 가져온다.

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

[root@master ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-s6pvq
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1099 bytes
namespace:  20 bytes
token:      블라블라

 

제일 아래의 토큰 값을 기입해 주면, 접속 완료! 모든 권한을 가지고 있다.

728x90