dashboard 배포하기
1. dashboard 설치하기
kubectl apply -f <https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml>
맨 밑의 참고사이트를 보면 공식문서가 존재한다. 공식문서에서 yaml파일을 제공해주므로 이를 통해 dashboard를 설치한다.
2. 서비스 돌아가는지 확인하기
kubectl get svc -n kubernetes-dashboard
위와 같이 kubernetes-dashboard가 있다면 제대로 돌아가고 있는 것이다.
3. 외부접속을 위해 NodePort 설정하기
위에서 service의 목록을 보았을 때 type이 clusterIp였다. 이는 클러스터 안에서만 접속을 할 수 있다는 뜻이다. 외부 ip에서 대시보드에 접속할 수 있도록 type을 NodePort로 변경해야 한다.
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
위와 같은 명령어를 치면 맨 밑에서 세번째 줄에서 type부분이 나온다. 나의 경우 미리 바꿔놓았기 때문에 Nodeport로 뜨는 것이다.
💡 바꾸지 않았다면 ClusterIp → Nodeport로 변경한다.
위의 명령어를 다시 쳐서 type이 제대로 변경되었는지 확인해준다.
4. type 변경 유무 확인하기
kubectl get svc -n kubernetes-dashboard
제대로 변경됨을 확인할 수 있다.
5. 대시보드 접속하기
대시보드에 접속하기 위해서 ip와 NodePort를 url에 입력하여 접속해준다.
<materIp>:<kubernetes-dashboard port>
나는 처음에 ip와 port번호만 쳐서 접속이 안 되었다. 아래와 같이 나오면서 접속이 안 되었다.
위의 말은 말 그대로 https로 해서 보내고 있으니 https로 접속하라는 말이다.
https://<materIp>:<kubernetes-dashboard port>
위와 같이 수정하여 브라우저에 접속하면 또 접속이 안된다고 뜨는데 아래쪽에 보면 고급 버튼이 있다. 고급 버튼을 눌러 안전하지 않음 버튼 클릭하여 접속한다. 그러면 아래와 같이 대시보드가 제대로 뜨게 된다.
인증서가 없어서 주의요함이라고 뜨는 것이므로 이를 무시하고 접속해준다.
6. 토큰 만들기
여기서 뻘짓 많이 해서 통달했다. 구글링한 블로그에서 따라하라는 대로 했는데 안 됐다..
1) 서비스 계정 만들기
token을 생성하려면 role과 account가 필요하다. 아래의 두 개의 명령어를 따라 쳐서 이를 서비스 계정을 생성해준다.
kubectl -n kubernetes-dashboard create serviceaccount admin-user
kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user
만약 위의 command를 쳤는데 안 된다면 밑의 참고 사이트에 해당 yaml파일이 있으니 수동으로 만드는 것을 추천한다.
만약 위의 command가 안될 때
kubectl -n kubernetes-dashboard create token admin-user
2) 서비스 계정의 이름 가져오기
kubectl -n kubernetes-dashboard get serviceaccount admin-user -o=jsonpath='{.secrets[0].name}'
해당 명령어로 서비스 계정과 할당되어진 보안 sercet의 이름을 추출한다.
3) secret에서 토큰 가져오기
kubectl -n kubernetes-dashboard get secret <SECRET_NAME> -o=jsonpath='{.data.token}' | base64 --decode
위에서 나온 sercet이름을 <SECRET_NAME>과 교체해준다.
그리고 나면 이를 토큰으로 추출할 수 있다. 토큰이 매번 바뀌므로 이를 자동화해줄려면 shell 파일로 만들어 생성해주는 것도 하나의 방법이다.
🪄중요
shell 파일로 한번에 토큰 생성하기
1) sh 파일 만들기
vim create_token.sh
하나의 파일을 만들어 아래의 내용을 넣어준다.
#!/bin/bash
# Create service account
kubectl -n kubernetes-dashboard create serviceaccount admin-user
# Get the name of the secret
SECRET_NAME=$(kubectl -n kubernetes-dashboard get serviceaccount admin-user -o=jsonpath='{.secrets[0].name}')
# Get the token from the secret and decode it
TOKEN=$(kubectl -n kubernetes-dashboard get secret $SECRET_NAME -o=jsonpath='{.data.token}' | base64 --decode)
echo "Token: $TOKEN"
2) 권한 부여하기
chmod +x create_token.sh
파일을 읽을 수 있도록 권한을 부여해준다.
3) 실행시키기
./create_token.sh
해당 파일을 실행시켜 토큰을 만들어준다.
대시보드 토큰 제한시간 변경하기
다른 작업을 하다가 대시보드를 다시 들어가볼려고 하면 토큰의 제한시간으로 인하여 처음 화면으로 돌아가 있고, 401 에러까지 떠 있는 것을 확인할 수 있다. 그 때마다 토큰을 다시 넣기가 귀찮으므로 이의 제한 시간을 무제한으로 만들어준다.
kubectl edit -n kubernetes-dashboard deployments.apps kubernetes-dashboard
spec:
containers:
- args:
- --auto-generate-certificates
- --namespace=kubernetes-dashboard
- --token-ttl=0 # <-- 추가
image: kubernetesui/dashboard:v2.6.0
👇🏻 참고 사이트
https://kindloveit.tistory.com/124
https://park-hw.tistory.com/entry/대시보드-토큰-발행
https://kubernetes.io/ko/docs/tasks/access-application-cluster/web-ui-dashboard/