ㅡ.ㅡ

[K8S] Kubernetes Dashboard 본문

Observabillity

[K8S] Kubernetes Dashboard

ekwkqk12 2021. 1. 30. 12:56

Nginx 컨트롤러 생성

설치 파일

wget -O aws_nlb_nginx_ingress_controller.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/deploy.yaml

프라이빗 서브넷에 로드밸런서 생성 설정 추가

프라이빗 서브넷 태그 추가
KEY : kubernetes.io/role/elb Value : 1,
KEY : kubernetes.io/role/internal-elb Value : 1

퍼블릭 서브넷에 생성 시 service.beta.kubernetes.io/aws-load-balancer-internal: "true" 항목 제거

271 # Source: ingress-nginx/templates/controller-service.yaml
272 apiVersion: v1
273 kind: Service
274 metadata:
275  annotations:
276   service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
277   service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: 'true'
278   service.beta.kubernetes.io/aws-load-balancer-type: nlb
279   service.beta.kubernetes.io/aws-load-balancer-internal: "true" # 추가

설치 및 확인

ktl apply -f aws_nlb_nginx_ingress_controller.yaml
ktl get svc -n ingress-nginx

대시보드, 매트릭 서버 생성

설치 파일

wget -O metric.yaml https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
wget -O dashboard.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.5/aio/deploy/recommended.yaml

대시보드 세션 타임 변경

containers:
    - name: kubernetes-dashboard
      image: 'kubernetesui/dashboard:v2.0.0'
      args:
        - '--auto-generate-certificates'
        - '--namespace=kubernetes-dashboard'
        - --token-ttl=43200 # 추가

설치 및 확인

ktl apply -f dashboard.yaml,metric.yaml
ktl get deploy -n kubernetes-dashboard

로드밸런서에 대한 룰셋(Ingress) 생성

설치 파일

cat > ingress-dashboard.yaml << EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dashboard
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(/dashboard)$ $1/ redirect;
  namespace: kubernetes-dashboard
spec:
  rules:
  - http:
      paths:
      - path: /dashboard(/|$)(.*)
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443
EOF

설치 및 확인

kubectl apply -f ingress-dashboard.yaml
ktl get ingress -n kubernetes-dashboard

eks-admin 서비스 계정 및 클러스터 역할 바인딩 만들기

설치 파일

cat > eks-admin-service-account.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: eks-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: eks-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: eks-admin
namespace: kube-system
EOF

설치 및 접근 토큰 값 확인

ktl apply -f eks-admin-service-account.yaml
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')

대시보드 접속

ktl get svc -n ingress-nginx 명령어로 주소 확인 후 https://주소값/dashboard/를 주소에 접속하여 확인한 토큰 값을 통해 로그인

)