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
- 출력된 토큰을 입력하여 대시보드 접근해주면됨!
- 이런식으로 쿠버네티스 대시보드를 사용할 수 있음!
'컨테이너 > Kubernetes' 카테고리의 다른 글
Kubernetes Terminated 상태의 pod 삭제 / Pods stuck in Terminating status / 503 Service Unavailable (0) | 2022.11.23 |
---|---|
Kubernetes(k3s) Pod / Service / Namespace 관련 기본 명령어 학습 (0) | 2022.11.02 |
k3s에 'hello world' HTTP 배포(Traefik Ingress Controller 사용) (0) | 2022.10.31 |
k3s 워커노드 설치하고 k3s 대시보드 확인하기 (0) | 2022.10.31 |
ubuntu에 k3s 마스터 노드 설치 쉽고 간단하게 (0) | 2022.10.28 |