본문 바로가기

컨테이너/Kubernetes

k3s dashboard 설치 및 원격 허용 설정(Node Port방식)

Kubernetes Dashboard (쿠버네티스 대시보드)

 

  • 대시보드 : 웹 기반 kubernetes 사용자 인터페이스
  • 대시보드를 사용하여 컨테이너화된 애플리케이션을 kubernetes 클러스터에 배포하고 컨테이너화된 애플리케이션의 문제를 해결하고 클러스터 리소스를 관리 할 수 있음
  • 대시보드를 사용하여 클러스터에서 실행 중인 애플리케이션의 개요 확인 및 개별 kubernetes 리소스(ex : 배포, 작업, DaemonSet 등)를 생성하거나 수정 가능
  • 대시보드는 클러스터의 kubernetes 리소스 상태 및 발생한 오류에 대한 정보를 제공

 

 

k3s 대시보드 설치

- 마스터 노드에 접속 후에 아래 명령을 진행

 

GITHUB_URL=https://github.com/kubernetes/dashboard/releases
VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||')
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml

 

 

- k3s 대시보드를 설치하려고 하는데, 전에 생성한 k8s 대시보드때문에 namespaces가 이미 존재한다는 에러 발생

- 기존의 k8s 대시보드를 삭제한다.

 

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

 

- 그리고 다시 설치하면 잘 생성됨

 

 

대시보드 RBAC(Role Based Access Control)

- RBAC(역할 기반 접근제어)는 사용자나 그룹의 역할(role)을 기반으로 쿠버네티스의 다양한 리소스의 접근을 관리하는 방법으로 RBAC에는 크게 3가지의 리소스가 있음

  •  Role(ClusterRole) : 어떤 권한을 소유하고 있는지 정의
  •  Subjects : Role을 부여할 대상을 나타냄(대상으로 User나 Group, ServiceAccount 등이 있음)
  •  RoleBinding(ClusterRoleBinding) : Role과 Subject의 연결(Binding)을 정의 

 

 

# ServiceAccount 매니페스트 파일 생성

 

vi dashboard.admin-user.yml

# dashboard.admin-user.yml 내용
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

 

 

# ClusterRoleBinding 매니페스트 파일 생성

 

vi dashboard.admin-user-role.yml

# dashboard.admin-user-role.yml 내용
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

 

 

# 두개의 매니페스트 배포

 

sudo k3s kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml

 

 

 

 

k3s 대시보드 원격 접속이 가능하도록 설정

- kubernetes Dashboard는 기본적으로 https 연결을 하도록 설정되어 있으며 로컬에서의 접근만 허용

- kubernetes 대시보드를 외부에 노출시키는 방식은 크게 4가지가 있음

 

  • Proxy 방식 : kubectl proxy를 이용하여 포트와 주소를 지정한 후 Host 머신에 띄우는 방식으로 Host가 외부에 노출되어 있는 상황이라면 해당 IP를 이용하여 외부에서도 접근 가능
  • NodePort 방식 : NodePort 방식의 서비스를 사용하여 포트를 직접 외부에 노출시키는 방
  • API Server 방식 : Proxy 방식과 비슷하나 API 서버가 외부에 노출되어 있어 API 서버에 직접 접속하는 방
  • Ingress 방식 : Kubernetes service를 외부와 연결시켜주는 Ingress를 사용하는 방식

(참고 : https://csupreme19.github.io/devops/kubernetes/2021/03/04/kubernetes-dashboard.html)

 

 

 

NodePort 방식을 사용하여 k3s 대시보드 접속


- 대시보드 서비스를 원격에서 접속 가능하도록 NodePort 방식으로 변경

 

kubectl edit service kubernetes-dashboard -n kubernetes-dashboard

 

 

- 여기서 spec의 내용에 NodePort(31055)를 추가하고 type을 NodePort로 변경

 

#spec 내용
  ports:
  - nodePort: 31055
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort

 

 

# k3s Dashboard 접속 확인

 

kubectl get service -n kubernetes-dashboard

 

 

 

# Dashboard POD 확인

 

kubectl get pod -n kubernetes-dashboard

 

- POD 상태를 보았을 때 모두 Running상태임을 확인

- 만약 STATUS가 CrashLoopBackOff인 경우 방화벽 중단 명령을 해주면됨

(systemctl stop firewalld)

 

 

# k3s 대시보드 접속

 

# url 접속
https://[마스터 서버 ip]:31055

- 원격 접속을 하기위해 token이 필요!!

 

 

 

# 사용자 토큰 생성

 

kubectl -n kubernetes-dashboard create token admin-user

 

- 출력된 토큰을 입력하여 대시보드 접근해주면됨!

 

 

- 이런식으로 쿠버네티스 대시보드를 사용할 수 있음!