티스토리 뷰
[Container Management] Kubernetes Dashboard Install & Setting
GodNR 2019. 8. 1. 00:36이번 포스팅에서는 Kubernetes Dashboard를 설치해 보겠습니다.
CLI 환경이 충분히 익숙한 많은 관리자, 운영자 분들이 있지만, 보다 유저 편의성을 강조하기 위한 Kubernetes 대시보드는 필수적인 컨포넌트라고 볼 수 있습니다.
지난 Master Node 설치 과정은 아래를 참고하세요.
[Container Management] Kubernetes Master Node 설치
# 참고 URL : Kubernetes 설치 메뉴얼
https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
Kubernetes Dashboard 설치
1) Dashboard 설치
- 설치는 kubernetes install을 위한 yaml파일로 손쉽게 진행할 수 있습니다.
[root@guruson ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta1/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/kubernetes-metrics-scraper created
[root@guruson ~]#
2) dashboard namespace 확인
- 다음과 같이 Kubernetes dashboard가 추가되었음을 확인할 수 있습니다.
[root@guruson ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5c98db65d4-hvmnp 1/1 Running 0 26m
kube-system coredns-5c98db65d4-p72lb 1/1 Running 0 26m
kube-system etcd-guruson 1/1 Running 0 25m
kube-system kube-apiserver-guruson 1/1 Running 0 25m
kube-system kube-controller-manager-guruson 1/1 Running 0 24m
kube-system kube-proxy-7plbr 1/1 Running 0 26m
kube-system kube-scheduler-guruson 1/1 Running 0 25m
kube-system weave-net-9g2ng 2/2 Running 0 21m
kubernetes-dashboard kubernetes-dashboard-5c8f9556c4-2kvdw 1/1 Running 0 11m
kubernetes-dashboard kubernetes-metrics-scraper-86456cdd8f-ppjv5 1/1 Running 0 11m
[root@guruson ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8be33a0045e9 docker.io/kubernetesui/dashboard@sha256:be8b4e180f7325c721acb5adba366ee30a7fce36beea344dbadf6d0f8534b70e "/dashboard --inse..." 11 minutes ago Up 11 minutes k8s_kubernetes-dashboard_kubernetes-dashboard-5c8f9556c4-2kvdw_kubernetes-dashboard_dc89d589-dfab-408e-ac5c-d986ea5c6224_0
dfef7d934e1f docker.io/kubernetesui/metrics-scraper@sha256:d62574b33b50e1af00ce5e6ec4301491ae97288f7b7167a46a49ee480a8250a4 "/metrics-sidecar" 11 minutes ago Up 11 minutes k8s_kubernetes-metrics-scraper_kubernetes-metrics-scraper-86456cdd8f-ppjv5_kubernetes-dashboard_92e7c881-3ab1-429d-b4c3-b9dde0577431_0
650439dd19d1 k8s.gcr.io/pause:3.1 "/pause" 11 minutes ago Up 11 minutes k8s_POD_kubernetes-metrics-scraper-86456cdd8f-ppjv5_kubernetes-dashboard_92e7c881-3ab1-429d-b4c3-b9dde0577431_0
967b4fb56150 k8s.gcr.io/pause:3.1 "/pause" 11 minutes ago Up 11 minutes k8s_POD_kubernetes-dashboard-5c8f9556c4-2kvdw_kubernetes-dashboard_dc89d589-dfab-408e-ac5c-d986ea5c6224_0
d6bd6d76be83 eb516548c180 "/coredns -conf /e..." 21 minutes ago Up 21 minutes k8s_coredns_coredns-5c98db65d4-p72lb_kube-system_5e5e524b-debf-4318-a0e0-0ce09bb2007d_0
f3f54a3e3264 eb516548c180 "/coredns -conf /e..." 21 minutes ago Up 21 minutes k8s_coredns_coredns-5c98db65d4-hvmnp_kube-system_2b5eb15f-997a-4e22-ae7a-18e4aa63900e_0
a74676aa9002 k8s.gcr.io/pause:3.1 "/pause" 21 minutes ago Up 21 minutes k8s_POD_coredns-5c98db65d4-p72lb_kube-system_5e5e524b-debf-4318-a0e0-0ce09bb2007d_0
16e36b525775 k8s.gcr.io/pause:3.1 "/pause" 21 minutes ago Up 21 minutes k8s_POD_coredns-5c98db65d4-hvmnp_kube-system_2b5eb15f-997a-4e22-ae7a-18e4aa63900e_0
95f7065c7800 5ce48e0d813c "/usr/bin/weave-npc" 21 minutes ago Up 21 minutes k8s_weave-npc_weave-net-9g2ng_kube-system_7ca1b168-26e9-4e30-89c5-731fd4492a17_0
bf40f0aaca75 f04a043bb67a "/home/weave/launc..." 21 minutes ago Up 21 minutes k8s_weave_weave-net-9g2ng_kube-system_7ca1b168-26e9-4e30-89c5-731fd4492a17_0
c15a632910d4 k8s.gcr.io/pause:3.1 "/pause" 21 minutes ago Up 21 minutes k8s_POD_weave-net-9g2ng_kube-system_7ca1b168-26e9-4e30-89c5-731fd4492a17_0
553b2f5013c8 89a062da739d "/usr/local/bin/ku..." 26 minutes ago Up 26 minutes k8s_kube-proxy_kube-proxy-7plbr_kube-system_f946a39f-b320-4d7e-80be-8ade3a224eec_0
bd2e127e576c k8s.gcr.io/pause:3.1 "/pause" 26 minutes ago Up 26 minutes k8s_POD_kube-proxy-7plbr_kube-system_f946a39f-b320-4d7e-80be-8ade3a224eec_0
8273ba04d071 b0b3c4c404da "kube-scheduler --..." 26 minutes ago Up 26 minutes k8s_kube-scheduler_kube-scheduler-guruson_kube-system_ecae9d12d3610192347be3d1aa5aa552_0
50819117a16c 68c3eb07bfc3 "kube-apiserver --..." 26 minutes ago Up 26 minutes k8s_kube-apiserver_kube-apiserver-guruson_kube-system_771894cf22aa788ac60030c63ac93c0a_0
ef2e5b80418f 2c4adeb21b4f "etcd --advertise-..." 26 minutes ago Up 26 minutes k8s_etcd_etcd-guruson_kube-system_739bfe2c63b2d1d1b1e833c60fd75422_0
34dc84306624 d75082f1d121 "kube-controller-m..." 26 minutes ago Up 26 minutes k8s_kube-controller-manager_kube-controller-manager-guruson_kube-system_1eef4eca35083fec456d0af4bccd851c_0
eb959a163fa1 k8s.gcr.io/pause:3.1 "/pause" 26 minutes ago Up 26 minutes k8s_POD_kube-scheduler-guruson_kube-system_ecae9d12d3610192347be3d1aa5aa552_0
3825e239a71e k8s.gcr.io/pause:3.1 "/pause" 26 minutes ago Up 26 minutes k8s_POD_kube-controller-manager-guruson_kube-system_1eef4eca35083fec456d0af4bccd851c_0
0941ac568e1b k8s.gcr.io/pause:3.1 "/pause" 26 minutes ago Up 26 minutes k8s_POD_etcd-guruson_kube-system_739bfe2c63b2d1d1b1e833c60fd75422_0
9014baf49b6c k8s.gcr.io/pause:3.1 "/pause" 26 minutes ago Up 26 minutes k8s_POD_kube-apiserver-guruson_kube-system_771894cf22aa788ac60030c63ac93c0a_0
[root@guruson ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kuard-build latest 9fd8efe225a6 7 days ago 433 MB
<none> <none> 6fdfd14725b8 8 days ago 5.58 MB
k8s.gcr.io/kube-scheduler v1.15.1 b0b3c4c404da 13 days ago 81.1 MB
k8s.gcr.io/kube-controller-manager v1.15.1 d75082f1d121 13 days ago 159 MB
k8s.gcr.io/kube-proxy v1.15.1 89a062da739d 13 days ago 82.4 MB
k8s.gcr.io/kube-apiserver v1.15.1 68c3eb07bfc3 13 days ago 207 MB
docker.io/golang 1.12-alpine 6b21b4c6e7a3 2 weeks ago 350 MB
docker.io/alpine latest b7b28af77ffe 2 weeks ago 5.58 MB
docker.io/kubernetesui/dashboard v2.0.0-beta1 4640949a39e6 3 weeks ago 64.6 MB
docker.io/weaveworks/weave-kube 2.5.2 f04a043bb67a 2 months ago 148 MB
docker.io/weaveworks/weave-npc 2.5.2 5ce48e0d813c 2 months ago 49.6 MB
docker.io/openshift/origin-node v3.11 14d965ab72d5 3 months ago 1.17 GB
docker.io/openshift/origin-control-plane v3.11 42f38837c3d6 3 months ago 829 MB
docker.io/openshift/origin-cli v3.11 3d6b03d3fd9c 3 months ago 384 MB
docker.io/openshift/origin-hyperkube v3.11 ba4772ad4b1e 3 months ago 509 MB
docker.io/openshift/origin-pod v3.11 91915f601106 3 months ago 262 MB
docker.io/openshift/origin-hypershift v3.11 dcab472bf75a 3 months ago 549 MB
docker.io/kubernetesui/metrics-scraper v1.0.0 44390ebe2b73 3 months ago 36.8 MB
k8s.gcr.io/coredns 1.3.1 eb516548c180 6 months ago 40.3 MB
k8s.gcr.io/etcd 3.3.10 2c4adeb21b4f 8 months ago 258 MB
docker.io/openshift/origin-service-serving-cert-signer v3.11 47dadf9d43b6 9 months ago 276 MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 19 months ago 742 kB
[root@guruson ~]#
- 또한 Running 상태로 정상적으로 구동되어 있음을 알수 있습니다.
Dashboard에 접근하기 전 기본적으로 확인해야 하는 Cluster info를 먼저 확인하도록 하겠습니다.
[root@guruson ~]# kubectl cluster-info
Kubernetes master is running at https://222.234.124.110:6443
KubeDNS is running at https://222.234.124.110:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@guruson ~]#
3) dashboard 기동 방법
- Proxy를 이용하는 방법
- NodePort를 이용하는 방법
- API Server를 이용하는방법
위와 같이 총 3가지 접속 방법이 있습니다.
각각의 접속 방법에 대해 살펴보겠습니다.
a) kubectl proxy를 기동하는 방법
먼저 Proxy를 이용한 기동 방식을 살펴보겠습니다.
기동 방법은 매우 간단합니다.
[root@guruson ~]# kubectl proxy --port=8001 &
[1] 29979
Starting to serve on 127.0.0.1:8001
[root@guruson ~]#
kubectl proxy --port=[접속 포트] --address=[Kubernetes Dashboard URL] --accept-hosts='^*$' &
다만 제약사항으로는 Kubernetes Dashboard에 접근할 수 있는 클라이언트 PC는 바로 자신 즉 localhost에서만 접속이 가능하다는 점입니다.
외부에서 해당 master server ip로 접근할 경우 로그인 화면은 표출되지만, 토큰 값을 넣어도 전혀 동작하지 않음을 볼 수 있습니다.
- Kubernetes Login 인증키 생성
Kubernetes는 접속방법이 두가지가 있는데 kubeconfig를 사용하는 방법과 Token을 사용하는 방법입니다.
지금부터는 Token을 생성하여 접속하는 과정에 대해 알아보겠습니다.
- 먼저 serviceaccount를 생성합니다.
[root@guruson ~]# cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
serviceaccount/admin-user created
[root@guruson ~]#
- 다음으로 ClusterRoleBinding을 생성합니다.
[root@guruson ~]# 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: kube-system
EOF
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
[root@guruson ~]
- 사용자 계정의 토큰을 가져와서 대시보드에 입력합니다.
[root@guruson ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-p9ldd
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=admin-user
kubernetes.io/service-account.uid=041cb7ec-946a-49b6-8900-6dc90fc08464
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXA5bGRkIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwNDFjYjdlYy05NDZhLTQ5YjYtODkwMC02ZGM5MGZjMDg0NjQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.TJtTZh5c-DpbmGwEF5QJ3yS9lADpqRCLJRnsr-t0xLOGPY4u3gNGXq8F4C4vL__PpfY-u5xmFTv-H3Oe6jTmjBnduR_bFNP1BqWGl3T1si-FC08a_aNqKbmjUKJ_4SWsSe_DjgUZTawr04C5dtNcBd0o0clQG_nkQFk7Gko2tiFhF0PwdtgSOh29JjlhAj_vzpd-vUNxMUJ0Y1ulPEfSCAA0pmIjBYpl_oBVMOd8Xkszz3FYC9ij9WevttnFMjxsEL5x6hGQw62OYQkx_YsE-P7db3cG0ieHECScHFp_Z0rg_lXBnDYFtj6hyPlpS7EvcVSRRUBhasPr3GlqHoIycg
[root@guruson ~]#
- 위와 같이 토큰 생성 후 localhost와 외부 접속화면으로 각각 테스트를 진행해 보겠습니다.
[localhost ]
[222.234.124.110]
localhost와 master_server_ip로 각각 접속은 위와 같이 가능하지만, 실제로 master_server_로 접속할 경우 Sign In 버튼 클릭시에도 동작하지 않음을 볼 수 있습니다.
물론 skip 버튼을 활성화하여 누구나 admin이 될 수 있는 기능을 제공하긴 하지만, 권고하지 않습니다.
b) Node Port를 활용하는 방법
다음으로 NodePort를 활용한 접속 방법입니다.
NodePort로 접속하기 위해서는 다음과 같이 Kubernetes-Dashboard의 설정을 변경해야 합니다.
[root@guruson ~]# kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kubernetes-dashboard"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
creationTimestamp: 2019-08-02T07:53:31Z
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
resourceVersion: "743"
selfLink: /api/v1/namespaces/kubernetes-dashboard/services/kubernetes-dashboard
uid: ce676471-4e08-4f46-b80f-08d1fbb088a7
spec:
clusterIP: 10.105.252.142
ports:
- port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: ClusterIP ===============================> NodePort
status:
loadBalancer: {}
[root@guruson ~]#
위와 같이 edit service를 통해 type: ClusterIP를 NodePort로 변경하고 저장합니다.
저장한 상태로 NodePort를 확인하는 방법은 다음과 같습니다.
[root@guruson ~]# kubectl -n kubernetes-dashboard get service kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard ClusterIP 10.105.252.142 <none> 443/TCP 19m
[root@guruson ~]#
============> 위는 NodePort로 변경 전 kubernetes-dashboard 정보이며, 아래는 변경 후 정보입니다.
[root@guruson ~]# kubectl -n kubernetes-dashboard get service kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.105.252.142 <none> 443:30783/TCP 16m
[root@guruson ~]#
다음과 같이 NodePort로 변경하면 Kubernetes-dashboard는 32062라는 포트로 기동됩니다. 다만 해당 포트는 매번 기동 및 셋팅 시점마다 변경되는 Port로 Dashboard에 접근하기 위해서는 항상 확인 후 접속해야합니다.
c) API Server를 활용하는 방법
마지막으로 가장 효과적인 방법이라 할 수 있는 kube-apiserver를 통해 접근하는 방식입니다.
접근하는 방법은 크게 두가지 스텝으로 나뉘어져 있는데 먼저 kube-apiserver에 접근하기 위한 인증서를 생성하고 이를 클라이언트 브라우저에 적용하는 것입니다.
먼저 인증서 생성 방법에 대해 알아보겠습니다.
먼저 .kube/config 파일의 client certificate와 client key를 추출하여 각각 kubecfg.crt와 kubecfg.key 파일로 생성합니다.
[root@guruson ~]# grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
[root@guruson ~]# cat kubecfg.crt
-----BEGIN CERTIFICATE-----
MIIC8jCCAdqgAwIBAgIIbvzqKy59RjswDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
AxMKa3ViZXJuZXRlczAeFw0xOTA4MDMxMTI4NThaFw0yMDA4MDIxMTI5MDBaMDQx
FzAVBgNVBAoTDnN5c3RlbTptYXN0ZXJzMRkwFwYDVQQDExBrdWJlcm5ldGVzLWFk
bWluMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu6Ha1Du1KM6LhNO6
04T4kJcub+7wGSBciKB2TEof/bO+RNGIq5WvL8EdrvyJhgeQ+X1EgpD2stKVGD+Z
oHL2YPbYjJCOzL+3BYmJG0v9Khn7cCQODFX1z4L0FuJJt1c4r1+8xeTWZ0Rllzpn
a6v4+71MiFprM2M1RvM+bS/b3LTSvPQLc4/6QJEjVxbxSuANJsYeNSyxYHCwIoQ5
RSANOMSVnynhgl7zOt28DYUPMYWYV0nfu87DQtsqcKfhO8VxU/mWpOpHUKB94Nj2
GCtRYO7OSRwim8+6x8DHrkvuCdTKdPRazqgMdWDkg3kinwK1FeiU/qHpazuMpx64
u1h/9QIDAQABoycwJTAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUH
AwIwDQYJKoZIhvcNAQELBQADggEBAHnGTlklZKpj9TcCHN+MHf2xgi3+yCaNOYX8
ltHJ0b2pK5TndOOh2WHmApIV6gQT2ZU3sxb3OWDmL8qAKnkufli4HsBeJ6eIIrHh
gqnf4g5VBgkOMZkPXUL4RlrOyUVN4A3WToMlCwZY0sET86/qrnVdOncUwfARAof8
+UQYzIwc5Ge0uCSWG7J8RXsF+14ynOqhLxzdtLJBmvazGwO6QrCOupFJT6SzQlos
vBYT3qID6v/l8ZcQgbQhlzsfYrkLc+Vi4FGNMkfNYwxHeI368sKgPQfrcccswylr
1iGmuaC+fKqdxKwU5qAqiNGfQAbEWQicTiVuGBU7Xxm9zzia6SI=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIC8jCCAdqgAwIBAgIIbvzqKy59RjswDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
AxMKa3ViZXJuZXRlczAeFw0xOTA4MDMxMTI4NThaFw0yMDA4MDIxMTI5MDBaMDQx
FzAVBgNVBAoTDnN5c3RlbTptYXN0ZXJzMRkwFwYDVQQDExBrdWJlcm5ldGVzLWFk
bWluMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu6Ha1Du1KM6LhNO6
04T4kJcub+7wGSBciKB2TEof/bO+RNGIq5WvL8EdrvyJhgeQ+X1EgpD2stKVGD+Z
oHL2YPbYjJCOzL+3BYmJG0v9Khn7cCQODFX1z4L0FuJJt1c4r1+8xeTWZ0Rllzpn
a6v4+71MiFprM2M1RvM+bS/b3LTSvPQLc4/6QJEjVxbxSuANJsYeNSyxYHCwIoQ5
RSANOMSVnynhgl7zOt28DYUPMYWYV0nfu87DQtsqcKfhO8VxU/mWpOpHUKB94Nj2
GCtRYO7OSRwim8+6x8DHrkvuCdTKdPRazqgMdWDkg3kinwK1FeiU/qHpazuMpx64
u1h/9QIDAQABoycwJTAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUH
AwIwDQYJKoZIhvcNAQELBQADggEBAHnGTlklZKpj9TcCHN+MHf2xgi3+yCaNOYX8
ltHJ0b2pK5TndOOh2WHmApIV6gQT2ZU3sxb3OWDmL8qAKnkufli4HsBeJ6eIIrHh
gqnf4g5VBgkOMZkPXUL4RlrOyUVN4A3WToMlCwZY0sET86/qrnVdOncUwfARAof8
+UQYzIwc5Ge0uCSWG7J8RXsF+14ynOqhLxzdtLJBmvazGwO6QrCOupFJT6SzQlos
vBYT3qID6v/l8ZcQgbQhlzsfYrkLc+Vi4FGNMkfNYwxHeI368sKgPQfrcccswylr
1iGmuaC+fKqdxKwU5qAqiNGfQAbEWQicTiVuGBU7Xxm9zzia6SI=
-----END CERTIFICATE-----
[root@guruson ~]# grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
[root@guruson ~]# cat kubecfg.key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAu6Ha1Du1KM6LhNO604T4kJcub+7wGSBciKB2TEof/bO+RNGI
q5WvL8EdrvyJhgeQ+X1EgpD2stKVGD+ZoHL2YPbYjJCOzL+3BYmJG0v9Khn7cCQO
DFX1z4L0FuJJt1c4r1+8xeTWZ0Rllzpna6v4+71MiFprM2M1RvM+bS/b3LTSvPQL
c4/6QJEjVxbxSuANJsYeNSyxYHCwIoQ5RSANOMSVnynhgl7zOt28DYUPMYWYV0nf
u87DQtsqcKfhO8VxU/mWpOpHUKB94Nj2GCtRYO7OSRwim8+6x8DHrkvuCdTKdPRa
zqgMdWDkg3kinwK1FeiU/qHpazuMpx64u1h/9QIDAQABAoIBADJvPzLtGbTuT/JU
N1PD2kyDVqgfwcn/OOBAwYugIRlAx1QYPnRgt8ZOUnxGxXCReBaX5WJzNNy8Xfc2
oUTPogpOT8b41GmU3s1OOtxrgJFgioWKK3yFXp14xcOg78+oUkRRp5xJ9pereuM7
f7EheLuyFnBQXaBiel+n4o/W3XJlcczNDyyWn8+D0edTafkz5SyswP3g1HVpXUMB
rvckp5s0GQowr/nMmXyBBPpU+1cwcdyFCCHoLENPTWY7aBIjPhgFPjV64qV+keT2
B5DinHSLixRXNgCN9H9voDoSzDNh5YCF3iOPVAg+DndAQtq9rQ5tSaOy9qKQ+KgA
VyXsa8ECgYEAwgMwUvIHbVG5vw/GmLq+wbpHQ83FPGBGZBoTjpdg1aN/rwuNnnl2
eiNr3TM2ezkrJa44Jzdr8d3+qdOw7AFF7+HPRamxzTTS4Dc9Koy6MTEKcR18EEEC
xtzZxU00in+OQK9aufG7WUagSIKqXYtzLgw8NdMN1zuGuBQ3zMvhI9sCgYEA95TP
ozTzj2bETgcP64/tsx4cEVsN54pPsXZvebja55mEUNx6ob+3IcQNK2sFBULR1Fx4
qF9pWuBkSAgGyy3HHf98iVOtUHuVAdNYpgJXlm8FJ3X/QL65lJ+9ZNM2dGyKiUWN
F4qmmjGDILFORjIDNQQs1fi08Ciez4+EHV7KHG8CgYAQUURXNZP6Vc1RjHofjlVM
5eXohf34vgAtmyPZ8lFqpn2us0IN+hlE3IXN7OjAJGbEnIqMgdTKWul4Tx2qO9Eu
A8fzC/qwT6kMwpiaY4ulZ4KBUQGGPHGHWDvYpE2u+Ft2hUkUKoifUZlZf+PkSj49
uTm3LTEU0STbhpfK2brt0QKBgQC+y15sbt0X8OFtJEIfjc5nz9dfhKUlf1BE+XmU
+2EvQ/5U9mRHDGCL0/M2N4Yp9MGRfyW407Z0QyLk49Kgd4nQU1hc2DBjKqm9O2tA
m+N12d7F90gbVB/eKnAhKCf59r+YZBIER2R2xZtA8YLZ06bnD22iA8UkopkoaXgt
ziPBXwKBgHLag6BfxZ++2X9WLKFGtiN4U0tQQMJu2hho4SYJgGFIG9V8dk0//4Ic
0N6Jm3xXIYyDS6uIPW/SBkcAy+cNCSIJncJiJUKB6MUIQigCdXALlN0Uw2fEzF7u
kd/05hs+HFDxXFBso6Fd/lfvMDrh6EYE39kIQJ0J2huT5SJsBmSV
-----END RSA PRIVATE KEY-----
[root@guruson ~]#
다음으로 생성한 키를 기반으로 p12 인증서 파일을 생성합니다.
[root@guruson ~]# openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-admin"
Enter Export Password:
Verifying - Enter Export Password:
[root@guruson ~]# ls -la kubecfg.p12
-rw-r--r-- 1 root root 3262 Aug 3 22:49 kubecfg.p12
[root@guruson ~]#
인증서 암호를 결정하여 입력하고 생성된 파일을 확인합니다.
클라이언트 브라우저에 인증서를 반영하기 위해서는 총 2개의 파일이 필요한데 하나는 바로 생성한 kubecfg.p12 파일이고 다른 하나는 /etc/kubernetes/pki/ca.crt 인증서입니다.
두개의 파일을 로컬로 다운로드 받도록 합니다.
다음으로 다운로드 받은 인증서를 클라이언트에게 적용하는 방법입니다.
먼저 신뢰할 수 있는 루트 인증 기관 인증서를 적용합니다. (certutil.exe -addstore "Root" D:\cert\ca.crt)
다음으로 개인용 인증서를 적용합니다. (certutil.exe -p [인증키 생성시 PW] -user -importPFX D:\cert\kubecfg.p12)
위 명령어 입력 시 아래와 같은 인증서 설치 여부를 묻게 되며 예를 선택하면 모든 준비가 완료됩니다.
혹시나 인증서를 갱신하거나 정보가 변경되어 삭제해야 할 필요가 있을 경우에는 certmgr.msc 명령어를 이용하여 인증서를 확인할 수 있습니다.
위와 같이 명령어 입력시 아래와 같은 창이 뜨며 해당 서버에 적용된 인증서를 확인할 수 있습니다.
Kubernetes 용 인증서는 개인용 인증서와 신뢰할 수 있는 루트 인증 기관 인증서이며 각각 다음과 같은 파일로 추가되어 있습니다.
[개인용 인증서]
[신뢰할 수 있는 루트 인증 기관 인증서]
갱신 또는 삭제가 필요할 경우 이를 적용하여 반영합니다.
자 인증서 적용이 완료되었으니, dashboard에 접근해 보도록 하겠습니다.
접근 URL은 위에서 확인한 cluster-info 기반 정보이며,
https://[master_ip]:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
접근 시 아래와 같이 추가한 인증서 적용 여부를 확인하게 됩니다.
확인을 누르면 아래와 같이 대시보드에 접근하게됩니다.
이후 과정은 위와 같이 kubectl proxy 방식과 동일하게 Token 키를 생성하여 접근하면됩니다.
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@guruson ~]# cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
serviceaccount/admin-user created
[root@guruson ~]# 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: kube-system
EOF
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
[root@guruson ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-qjmhg
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=admin-user
kubernetes.io/service-account.uid=0cb364d9-d6a2-420d-b79f-265d024f20b7
Type: kubernetes.io/service-account-token
Data
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXFqbWhnIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwY2IzNjRkOS1kNmEyLTQyMGQtYjc5Zi0yNjVkMDI0ZjIwYjciLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.XF3r080O0kdrYXODGSOK2qoawxZ4ZpOtLJxI1W1W0b0nVdNS_wWZaCYFakQZWfx9MEyA-TTPcGgEx2iarH9G59MUUeenFnmQfyLVi5dQbrdRCaa0_H3kNwdM4XCDe4aS9ozHSrSClz1LUX5BmzstHPDWat7OpT2moX8r5iTentqWYzNu6P1zjkEFOB90jqE-C9_eteRI7G4gwOSa1c-E4tlDPtwgeUuyax3jKm-ka-01on3-Sq6gNL6cnydMvBfNea4akOFQqunR_x2GV44ZTrED5OXHkiX6bS5_PA5fwykQ6sdxY28VTi-ooTSwLjuVj4KLLVeULW5j1GMKvLuy0Q
ca.crt: 1025 bytes
namespace: 11 bytes
[root@guruson ~]#
위 Token 값을 로그인창에 입력하면
위와 같이 대시보드에 접근할 수 있습니다.
지금까지 다양한 Kubernetes Dashboard 구성 방법에 대해 알아보았습니다. 대시보드를 통해 다양한 작업을 진행하고 모니터링할 수 있으며, 이를 통해 보다 편리한 Kubernetes 환경 구성이 가능해 졌습니다.
다음시간에는 Master Node와 연결되는 Worker Node를 생성하고 이를 Master Node와 연결하는 과정에 대해 살펴보겠습니다.
'③ 클라우드 > ⓚ Kubernetes' 카테고리의 다른 글
[Container Management] Kubernetes Pod 생성 가이드 (0) | 2019.08.04 |
---|---|
[Container Management] Kubernetes Woker Node Install & Setting (0) | 2019.08.04 |
[Container Management] Kubernetes Master Node 설치 (11) | 2019.07.24 |
[Container Management] Kubernetes 개요 (0) | 2019.07.23 |
[Pivotal vs OpenShift] Kubernetes 기반의 PaaS 비교 (3) | 2019.03.02 |
- Total
- Today
- Yesterday
- git
- JBoss
- jeus
- kubernetes
- 마이크로서비스
- MSA
- openstack tenant
- SWA
- TA
- apache
- Docker
- 아키텍처
- Da
- webtob
- k8s
- nodejs
- API Gateway
- SA
- 쿠버네티스
- JEUS7
- 오픈스택
- openstack token issue
- node.js
- 마이크로서비스 아키텍처
- JEUS6
- Architecture
- OpenStack
- aws
- aa
- wildfly
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |