티스토리 뷰
□ Kubernetes는 서버에 직접 붙어서 및 CLI로 대부분 작업이 가능하지만 실시간으로, 직관적으로 상황을 한눈에 보기 위해서는 GUI만 한것이 없습니다.
□ kubectl 명령어로 아래처럼 kubernetes dashboard를 deploy 해줍니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
정상적으로 kubernetes dashboard namespace가 만들어지고 아래처럼 pod, service, deployment, replicaset이 올라옵니다.
□ deployment를 edit해서 아래처럼 옵션을 바꿔줍니다. 참고로 kubernetes dashboard를 설치하면 https가 모두 활성화가 되는데 dashboard가 프록시 뒤에 제공되는 경우 프록시에 자체 인증이 활성화가 되어 있으면 인증을 활성화 할 필요가 없습니다. 즉, https를 비활성화 하는 옵션을 추가해주는것이며, dashboard 로그인창에 token 입력창 없이 SKIP 버튼을 누르면 바로 들어갈 수 있습니다. 그래서 SKIP 버튼을 아예 없애는 옵션을 추가해줍니다.
- --enable-skip-login=false: dashboard 로그인창 토큰 입력창 없이 SKIP 버튼 없애기
- --enable-insecure-login=true: 이 옵션이 HTTP 통신
trouble shooting: 지금 현재 NBP Load Balancer 뒤에 k8s node들이 구성되어 있으므로 자체 인증이 활성화 되어 있는 상황에서 위의 옵션 중 enable-insecure-login 옵션을 true로 준 상태에서 scheme를 https로 설정한 다음 deploy 했을때 CrashLoopBackOff에러가 발생했습니다.. 즉, k8s node 앞에 proxy 서버가 존재한다면 insecure-login 옵션을 true로 주고 scheme를 HTTP로 설정해 주시면 됩니다.
spec:
containers:
- args:
- --enable-skip-login=false
- --enable-insecure-login=true
- --namespace=kubernetes-dashboard
- --token-ttl=3600
image: kubernetesui/dashboard:v2.0.3
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 9090
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 30
name: kubernetes-dashboard
ports:
- containerPort: 9090
protocol: TCP
resources: {}
□ 9090 port 를 사용하기 위해서 service를 수정해줍니다.
kubectl edit -n kubernetes-dashboard service/kubernetes-dashboard
spec:
clusterIP: 172.18.172.89
ports:
- port: 9090
protocol: TCP
targetPort: 9090
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
□ 외부에서 접근할 수 있도록 dashboard ingress를 작성합니다. servicePort는 위의 service에서 9090으로 했기때문에 ingress에서 9090으로 설정하고 host를 지정해줍니다.
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: kubernetes-dashboard
name: kubernetes-dashboard
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: kubernetes-dashboard.analytics.hskim.io
http:
paths:
- backend:
serviceName: kubernetes-dashboard
servicePort: 9090
□ 작성한 ingress도 deploy 해줍니다.
kubectl apply -f kubernetes-dashboard-ingress.yaml
아래와 같이 정상적으로 dashboard에 접근할 수 있습니다.
□ dashboard에 토큰값을 가지고 접근할 수 있습니다. 관리자 토큰을 생성하기 위해 아래 yaml 파일을 작성합니다. 대부분의 경우 cluster-admin role을 부여하고 ClusterRoleBinding을 생성합니다.
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
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
□ 아래 명령어로 kubectl apply 진행합니다.
kubectl apply -f kuebernetes-dashboard-service-account.yaml
□ 이제 아래 명령어로 admin-user로부터 토큰을 생성하고 생성된 토큰으로 dashboard에 접근합니다.
[hskim@cloud-analytics-bastion script]$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-p6x6k
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: c123123bb21-123-4990-90a9-520c89284399
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI69I87nRN5Wk313d13Zx4Q1I1Yk82YX132dUaWhyeWxPVEVNQzgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXpnNTg5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmZmFiYzU0NC1jYjMyLTQ4MmUtOTU3ZC1iZGFmY2FlOTA3MDIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.TJu1VrRy6JzvneV6kPZbv-Yf91-d1DC5YyHcKwpEqq9n-i-Lw4dmzWCzylw_vaF9IadnMKcjLSBQj5Sc215y5Tl_ZWLMBW_Ayr9IEtyXCDCTFbio1pZhF8CKBtQsXS_PFEEYgVnM_whFzSO8eVSmvuWrNaIWMW-MU0sWydK9_Zjak_4P665re31pOVtBabdvLcgG4DMyZwFpkQDmEGLIDpLHasiQkPkXHA_BE0a_eoBgJVhM9j3yEzNfMrzaKnmcuX0fWZTiEn2sbWN8ZuQyYBLC4WVs_dc1p8sSomhw3heEQDEdZn-EFjUi912VdBaJF9AZaVzz78pm4DhGbJocPQ
□ 아래처럼 토큰을 입력하면 dashboard에 접근이 가능한 모습을 볼 수 있습니다.
□ 참고로 k8s에서는 namespace마다 token을 부여할 수 있습니다. 또한 특정 namespace마다 viewer, admin 등 권한을 다르게 token을 생성할 수 있습니다.
'DevOps' 카테고리의 다른 글
[GCP] K8S kubespary 구성 (1) | 2020.10.31 |
---|---|
[GCP] 메타데이터 / SSH 접속 (0) | 2020.10.31 |
[NBP] Python Flask API docker image build (0) | 2020.08.19 |
Docker UUID Error (0) | 2020.06.15 |
Spring boot Thread Pools 에러 (0) | 2020.06.03 |