티스토리 뷰

DevOps

[NBP] K8S Dashboard(ingress) 구성

김한성 2020. 10. 30. 14:47

□ 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이 올라옵니다.

 

kubernetes dashboard

□ 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
댓글
«   2024/12   »
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 31