- 로깅
- 쿠버네티스 대시보드 ← 오늘 볼 내용
- 쿠버네티스 클러스터 모니터링
2. 쿠버네티스 대시보드
https://kubernetes.io/ko/docs/tasks/access-application-cluster/web-ui-dashboard/
쿠버네티스를 운영할 때 매번 CLI환경으로 kubectl 명령만 입력하고 있으면 간혹 헷갈리거나 보기 어려울 때가 있을 것이다.
이를 웹 기반 쿠버네티스 유저 인터페이스를 통해 파드나 서비스 등의 클러스터 리소스들을 관리할 수 있고 접근 권한 제어도 가능하다.
생성, 삭제, 수정, 롤링 업데이트, 에러 정보확인 등 여러가지 역할을 수행할 수 있는 대시보드를 설치해서 운영하는 실습을 해보자.
호스트 웹 브라우저에서 실행할 수 있도록 NodePort를 통해 외부로 노출시킬 것이다.
대시보드 UI 배포
대시보드 UI는 기본으로 배포되지 않는다. 배포하려면 다음 커맨드를 실행한다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
위 yaml파일을 실행하면 serviceaccount부터 ClusterIP 등 여러 리소스들이 실행된다.
기본적으로 ClusterIP를 통해 로컬호스트에서만 접근이 가능하도록 설정이 되어있는데 대시보드 서비스의 타입을 ClusterIP에서 NodePort로 변경함으로 외부에서도 접근이 가능하도록 설정할 것이다.
edit창을 열어 타입을 NodePort로 변경한다.
kubectl edit -n kubernetes-dashboard service kubernetes-dashboard
샘플 사용자 생성
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.mdhttps://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
웹 UI를 통해서 대시보드로 접근하려면 반드시 ServiceAccount와 Token이 필요하다.
그래서 쿠버네티스 대시보드로 접근하여 관리할 수 있도록 ServiceAccount와 ClusterRoleBinding을 실행하여 관리자 권한을 가진 샘플 사용자 하나를 생성할 것이다.
ClusterRoleBinding을 통해 주어질 cluster-admin 권한은 모든 클러스터 API 리소스에 접근할 수 있는 최고 권한이므로 함부로 주면 안되지만 실습 목적으로만 인가를 해볼 것이다.
다음 명령을 실행한다.
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
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
---
apiVersion: v1
kind: Secret
metadata:
name: admin-user
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token
EOF
위 명령을 통해 ServiceAccount와 ClusterRoleBinding과 Secret이 모두 생성이 되었다면 다음을 실행하여 Token의 정보를 획득한다.
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d
$ kubectl -n kubernetes-dashboard create token admin-user
위 명령을 통해 생성된 admin-user라는 ServiceAccount에게 토큰을 새로 생성해서 접속할 수도 있다.
ServiceAccount는 생성될 때부터 기본적인 토큰이 부여되는데 우리는 그 기본 토큰을 이용해서 접속한 것이고 세분화된 권한부여, 보안강화, 토큰 소유자 변경, 토큰 만료 및 관리를 목적으로 새로 발급하여 접속할 수도 있다.
커맨드 라인 프록시
proxy 명령을 통해 로컬호스트에서 대시보드로의 접속을 활성화할 수 있다.
만약 본인이 GUI로 리눅스를 실행 중이라면 아래 명령을 실행하고 출력되는 주소와 포트를 FireFox를 열어서 주소창에 입력하면 실행이 되긴 할 것이다.
CLI도 curl명령 입력해서 확인가능하다.
kubectl proxy
다음과 같이 출력이 되는데 저 주소와 포트를 입력하는 것이다.
하지만 우리는 로컬호스트에서 접속하는 것이 아니라 NodePort로 외부에서 실행할 것이다.
그러므로 우리는 이걸 실행하는 것이 아니라 아래 내용을 실행해야 한다.
로컬호스트가 아닌 다른 호스트에서도 접속하기를 원한다면 다음과 같이 주소를 직접 입력하여 192.168.108.130:8001 을 입력하면 접속가능하도록 설정할 수도 있다.
이렇게 하면 로컬호스트(127.0.0.1)로는 접속할 수는 없다.
kubectl proxy --address=192.168.108.130 --accept-hosts='^*$'
대시보드 접속
이제 우리가 대시보드에 접속할 수 있다.
먼저 확인해야할 것은 초반에 생성했던 NodePort의 포트번호다.
kubectl get svc -n kubernetes-dashboard
NodePort의 내용을 보면 443:31379로 나와있는데 인증서를 통한 접속이 이루어지기 때문에 HTTPS로 접속이 된다.
kubectl proxy 명령을 통해 열어놓은 192.168.108.130에 31379라는 포트로 접속을 하게 되면 이제 대시보드로 접속이 가능하다.
아래를 웹 브라우저 주소창에 입력하여 접속한다.
자신이 kubectl proxy를 통해 입력한 그 IP로 접속을 해야한다.
아래는 나의 IP이므로 똑같지 않을 수 있음을 양해바란다.
https://192.168.108.130:31379
첫 화면이 이렇게 뜨지만 아래 '고급' 버튼을 눌러서 '192.168.108.130(안전하지 않음)(으)로 이동' 을 클릭한다.
토큰 정보를 입력하라는 입력창에 조금 전에 획득한 Token 정보를 입력한다.
로그인이 완료되면 다음과 같이 대시보드가 화면에 나타난다.
UI는 한눈에 봐도 쉽게 이해할 수 있는 형태다.
상단에 default라는 네임스페이스, 좌측에 워크로드들이 표시되며 현재 동작 중인 파드들이나 여러 정보들을 쉽게 확인할 수 있다.
현재는 파드가 이미 실행 중이라 파드의 정보들이 나와있지만 처음에는 아무것도 없는 빈 화면이 나올 것이다.
워크로드에서 조금 내리면 노드에 대한 정보도 볼 수 있다.
쿠버네티스가 지원하는 대시보트를 통해서 파드, 디플로이먼트, 서비스, 이벤트, 서비스어카운트, 인그레스 등 모든 클러스터 리소스들을 생성, 수정, 삭제가 가능하며 CLI에서 생성하든 GUI로 생성하든 즉시 화면에 출력되어 관리가 가능하다.
리소스를 대시보드에서 직접 생성하는 방법은 화면 우측 상단에 '+' 버튼을 통해 확인할 수 있다.
형태는 다음과 같다.
직접 yaml 혹은 json코드를 입력해서 생성
파일을 통한 생성
서식을 통한 생성
조금 전에도 말했지만 현재 관리자 권한으로 접속을 했지만 너무 많은 권한으로 인해 보안상 위험할 수도 있음을 염두해두고 항상 최소 권한의 원칙을 유지하여 운영할 수 있어야 한다.
참고로 쿠버네티스 대시보드는 실무에서는 잘 사용하지 않는다.
대규모 프로덕션 환경에서는 대시보드만으로는 부족하기도 하며 보안 문제, RBAC 적용 문제, CLI 선호 등 다양한 이유로 실무에서는 선호하지 않는 경향이 있기 때문이다.
https://www.youtube.com/playlist?list=PLApuRlvrZKohLYdvfX-UEFYTE7kfnnY36
'Kubernetes' 카테고리의 다른 글
Pod Affinity - topologyKey 상세 동작 (0) | 2024.01.03 |
---|---|
Kubernetes 기초 - Scheduling(1) (0) | 2024.01.03 |
Kubernetes 기초 - 로깅과 모니터링(1) (0) | 2024.01.02 |
멀티 마스터 쿠버네티스 클러스터 구성 방법 (0) | 2023.12.31 |
Kubernetes 기초 - Secret (0) | 2023.12.23 |