쿠버네티스 공식 홈페이지 yml로 서비스 설치를 수행한다.
root@master:~# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard unchanged
serviceaccount/kubernetes-dashboard unchanged
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf configured
Warning: resource secrets/kubernetes-dashboard-key-holder is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
secret/kubernetes-dashboard-key-holder configured
configmap/kubernetes-dashboard-settings unchanged
role.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
deployment.apps/kubernetes-dashboard configured
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper configured
설치후 정상적으로 서비스가 떠있는지 확인한다.
root@master:~# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.110.137.126 <none> 8000/TCP 9m30s
kubernetes-dashboard ClusterIP 10.97.19.146 <none> 443/TCP 10m
외부 접속을 위해 NodePort 설정
기존적으로 Service type이 ClusterIP로 되어있다. 노드 외부에서 접속이 가능하도록 Type을 NodePort로 바꾸어준다. 그리고 NodePort가 랜덤으로 생성되면 관리가 어려우므로 특정 Port를 지정해준다.
root@master:~# kubectl edit svc kubernetes-dashboard -n 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: "2023-12-26T07:55:00Z"
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
resourceVersion: "496361"
uid: 227af817-5a33-4ce8-a3dd-adb43030d376
spec:
clusterIP: 10.97.19.146
clusterIPs:
- 10.97.19.146
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- nodePort: 31000 -> 추가한다.
port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: NodePort -> 수정한다.
status:
loadBalancer: {}
정상적으로 수정을 완료하면 아래와 같이 완료 메세지가 나온다. 만일 공백 대신에 탭 등으로 띄워쓰기를 하면 잘못된 yaml로 판단하여 에러가 발생하고 상단 주석에 어떤 원인으로 Edit가 거절되었는지 명시가 된다.
root@master:~# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
service/kubernetes-dashboard edited
변경 후 다시 확인해보면 NodePort로 서비스 타입이 정상 변경 되었음을 볼 수 있다.
root@master:~# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.110.137.126 <none> 8000/TCP 18m
kubernetes-dashboard NodePort 10.97.19.146 <none> 443:31000/TCP 19m
NodeIP + 대쉬보드 NodePort 조합으로 url을 브라우저에 입력하면 아래와 같이 대쉬보드 메인으로 진입한다.
Access Token 발급 방법
token 생성을 위해서 아래와 같이 role 과 account를 생성한다.
clusterRoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
serviceAccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
위 role과 account 를 생성하였으면 아래와 같이 token 을 발급받는다.
root@DESKTOP-GH94F8C:/home/kindlove/k8s# kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6IllTSkp5SnhSd0ZCOVZMakI5MDhWWHMwcUZXdGFBUWxrcGtBa2lZYmpMdzQifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzA0NTYyMzc4LCJpYXQiOjE3MDQ1NTg3NzgsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiOTc5NTQ0NWYtYTgxMC00NTk4LTkyODgtY2NiNjIzZDAyZjAwIn19LCJuYmYiOjE3MDQ1NTg3NzgsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.JGFwqgMdESGWScXBO-FwgJRAJrPV0n_OoVoYFok5k3zWPC4Lo9kMffR0KHJnZPggv4cyDYV3gDy4YsRM32PuDlSokPjcq_31sPNKY07ILKeqDeKuIZl_eRpi_3iarQ_iWe-CCjKKp1jRSGZnEwID0hsBz9bmKCClukA455uU4QVdoQ8s5b9MbCNwi4mMGuMXzIZMrGZ6yRSnD2r5_oiOAl_YiCPIY-j3P20rLXFQoTHZrvSB3DHVIz0p8Np0g69o4dxTWzvOEQT-89yXFL8olGz74OaMoxJgF0XRPuNM14oNnQb9rkCr2yEZgluoLTJIlzxKhtUYLsSqwGKYOOLDGQ
위 발급 받은 토큰으로 로그인 하면 아래와 같이 현재 연결된 Workloads를 볼수 있는 대쉬보드 화면을 볼 수 있게 된다.
"NET::ERR_CERT_INVALID" 로 로그인 화면 진입이 되지 않는 경우
아래 Article을 참조한다. (https://1week.tistory.com/10)
아래 yaml로 cert-manager를 다운로드 받아서 설치한다.
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
대쉬보드 진입시 namespace 조회 권한이 없어서 에러 발생시 임시 조치 방법
다음 Article을 참조한다. (https://devpress.csdn.net/k8s/62fcf766c6770329308026a9.html)
결론은 아래 명령을 수행하여 admin 권한을 부여한다. 단, 보안에 취약해지기 때문에 학습용도로 제시된 방법임을 숙지한다.
kubectl create clusterrolebinding serviceaccounts-cluster-admin \
--clusterrole=cluster-admin \
--group=system:serviceaccounts
-- The end --
'Devops > Kubernetes' 카테고리의 다른 글
[Kubernetes] jenkins Kubernetes 에 설치 및 배포하기 (1) | 2023.12.31 |
---|---|
[Kubernetes] ingress 설정 (1) | 2023.12.26 |
[Kubernetes] apt-get 시 public key is not available: NO_PUBKEY 에러 수정 (1) | 2023.12.21 |
[Kubernetes] 쿠버네티스 Service 개념 - ClusterIP, NodePort (0) | 2022.01.23 |
[Kubernetes] Controller - Replicaset (0) | 2022.01.22 |