대시보드는 웹 기반 쿠버네티스 사용자 인터페이스이다.

대시보드를 사용하여 클러스터에 컨테이너 응용 프로그램을 배포하고 컨테이너 화 된 응용 프로그램의 문제를 해결하며, 리소스와 함께 클러스터를 쉽게 GUI를 통해서 관리한다.

대시보드를 사용하여 클러스터에서 실행중인 응용 프로그램의 개요를 추출하거나 관리, 개별 쿠버네티스 자원등을 생성 또는 수정등 관리가 가능하다.

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

https://github.com/kubernetes/dashboard

Dashboard 1.7 버전 이상으로 업그레이드 진행시 Kubernetes-dashboard 서비스 계정의 클러스터 역할 바인딩 을 삭제해야 한다.

그렇지않으며 Dashboard에 클러스터에 대한 전체 관리자 액세스 권한이 부여된다.

설치

버전 1.7 이후 Dashboard는 HTTPS 를 통한 안전한 설치를 권장한다.

기본적으로 최소한의 권한 집합을 가지며 HTTPS를 통해서만 액세스 할 수 있음을 의미한다. 

kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

※ 주의

마스터에서 설치하되, 미니언 또는 노드가 Join 되지 않는 상태에서 설치해야 함.

일반적인 경우에는 위의 스크립트로 설치가 가능하지만, 구글 클라우드 쿠버네티스 엔진의의 경우에는 설치 중에 권한 관련 에러가 나올 수 있는데,

구글 클라우드 쿠버네티스 엔진의 경우에는 보안을 이유로 일반적인 쿠버네티스보다 권한 설정 레벨이 높게 설정되어 있음.

구글 클라우드 쿠버네티스 엔진에서 대시보드를 설치하고자할때에는 위의 스크립트를 실행하기 전에 먼저 아래 명령어를 이용해서, 

현재 사용자 계정에 대해서 cluster-admin Role를 부여해줘야 한다.  

# kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user $(gcloud config get-value account)

액세스

대시보드는 외부 서비스로 제공되지 않고, 내부 IP로만 접속이 가능하며, 클러스터 외부에서 접근하려면 kubectl proxy를 사용하여 접근 가능.

kubectl proxy는 로컬 머신과 쿠버네티스 클러스터간의 통신을 프록시 하여, 로컬 머신에서 쿠버네티스 클러스터내의 HTTP 서비스를 접근할 수 있도록 함.


kubectl proxy  실행시 localhost:8001 포트를 통해서 쿠버네티스 클러스터로 트래픽을 프록시함.


http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

# kubectl proxy


로그인은 Release 1.7 버전부터 도입되었으며, Dashboard를 HTTPS를 통해 Dashboard를 활성화하고 액세스 해야 한다.

Skip은 Dashboard에서 사용하는 서비스 계정의 권한을 사용한다.





HTTPS 

# mkdir certs
# openssl req -nodes -newkey rsa:2048 -keyout certs/dashboard.key -out certs/dashboard.csr -subj "/C=/ST=/L=/O=/OU=/CN=kubernetes-dashboard"
# openssl x509 -req -sha256 -days 365 -in certs/dashboard.csr -signkey certs/dashboard.key -out certs/dashboard.crt
# kubectl create secret generic kubernetes-dashboard-certs --from-file=certs -n kube-system
# kubectl create -f kubernetes-dashboard.yaml
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')



관리자 권한

Dashboard 를 사용하기 위해서는 사용자 인증이 필요한데, 간단하게 인증을 위한 토큰을 사용하는 방법을 이용하도록 하겠다.

토큰은 쿠버네티스 API 인증 메커니즘중의 하나로, 여기서는 admin-user라는 계정을 하나 만든후에,

그 계정에, 클러스터 관리자롤을 부여한 후에, 그 사용자의 토큰을 사용하는 방법을 사용했다.

admin-user.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
 name: admin-user
 namespace: kube-system

cluster-admin 롤을 앞에서 생성한 admin-user에 권한부여

# vi admin-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
 name: admin-user
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: admin-user
 namespace: kube-system


# kubectl create -f dashboard-admin.yaml

admin-user의 토큰 확인

# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
# Kubectl apply -f https://gist.githubusercontent.com/chukaofili/9e94d966e73566eba5abdca7ccb067e6/raw/0f17cd37d2932fb4c3a2e7f4434d08bc64432090/k8s-dashboard-admin-user.yaml
# Kubectl get sa admin-user -n kube-system
# Kubectl describe sa admin-user -n kube-system
Name:         admin-user
Namespace:    kube-system
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"admin-user","namespace":"kube-system"}}
Image pull secrets:  <none>
Mountable secrets:   admin-user-token-r7clc
Tokens:              admin-user-token-r7clc
Events:              <none>
# Kubectl describe secret admin-user-token-wwddb -n kube-system
Name:         admin-user-token-r7clc
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=admin-user
              kubernetes.io/service-account.uid=b7fd3519-697d-11e8-92c9-080027b53697
Type:  kubernetes.io/service-account-token
Data
====
ca.crt:     1066 bytes
namespace:  11 bytes
token:      ....


쿠버네티스 대시보드 설정 및 로그인 부분은 프록시 사용, 로그인을 토큰을 사용하는 등, 운영환경에는 적절하지 않는다.

개발환경이나 테스트 용도로만 사용하도록 하고, 운영 환경에서는 사용자 계정 시스템 생성과 적절한 권한 배정을 한 후에,

적절한 보안 인증 시스템을 마련한 후에 적용하도록 해야 한다.






  • No labels
Write a comment…