Kubernetes Dashboard 배포 Istio domain 설정
Kubernetes Dashboard 배포
Kubernetes Dashboard는 클러스터 리소스를 시각적으로 관리하고 모니터링할 수 있는 웹 UI입니다. Kubernetes Dashboard를 배포하는 방법은 아래와 같습니다.
1. Kubernetes Dashboard 설치
- Helm으로 배포하기
- 먼저 공식 Kubernetes Dashboard Repo로 이동하여 최신 버전으로 설치를 진행하겠습니다. Helm을 사용하여 대시보드를 설치합니다. 아래 명령어로 설치할 수 있습니다.
- https://github.com/kubernetes/dashboard/releases/tag/kubernetes-dashboard-7.8.0
helm repo add kubernetes-dashboard <https://kubernetes.github.io/dashboard/>
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
# Kong에서 8444 관련 에러 발생 시
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard --set kong.admin.tls.enabled=false
이 명령어는 Kubernetes Dashboard 관련 모든 리소스(Deployment, ServiceAccount, RoleBinding 등)를 클러스터에 배포합니다.
- Dashboard 상태 확인
- 설치 후, Dashboard가 제대로 동작하는지 확인합니다.
kubectl get pods -n kubernetes-dashboard
kubernetes-dashboard 네임스페이스에서 대시보드 관련 Pod들이 실행 중인지 확인합니다.
2. Service Account와 ClusterRoleBinding 설정
Kubernetes Dashboard에 접근하기 위해서는 적절한 권한을 가진 Service Account가 필요합니다. 다음 명령어로 admin-user Service Account를 만들고, 해당 계정에 클러스터 관리자 권한을 부여합니다.
- admin-user Service Account 생성
- 먼저 admin-user Service Account와 ClusterRoleBinding을 설정하는 YAML 파일을 만듭니다.
# dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
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: kubernetes-dashboard
- Service Account 적용
- 위 YAML 파일을 클러스터에 적용합니다.
kubectl apply -f dashboard-admin.yaml
3. 토큰(Token) 발급
Dashboard에 접속할 때 사용될 인증 토큰을 발급받습니다. 다음 명령어로 admin-user의 토큰을 확인할 수 있습니다.
kubectl -n kubernetes-dashboard create token admin-user
이 명령어는 인증에 사용할 토큰을 출력합니다. 이 토큰은 Dashboard에 로그인할 때 필요합니다.
4. Kubernetes Dashboard 접근
Kubernetes Dashboard는 기본적으로 클러스터 내부에서만 접근이 가능합니다. 외부에서 접근하려면 kubectl proxy 명령어를 사용해야 합니다.
- kubectl proxy 명령어 실행
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 30443:443
2. 웹 브라우저에서 Dashboard 열기
웹 브라우저에서 다음 URL로 대시보드에 접근합니다.
<http://localhost:30443>
3.토큰 인증
로그인 화면에서 발급받은 토큰을 입력하고 로그인합니다.
5. 외부 접근 설정(Optional)
Dashboard에 외부에서 접근하려면 NodePort나 Ingress 설정을 추가해야 합니다. 기본적으로는 클러스터 내부 보안을 위해 kubectl proxy를 사용하는 것이 권장됩니다.
Istio 활용해서 도메인으로 배포하기
1. Service 설정
- 80:8000 포트로 설정
spec:
clusterIP: 10.110.207.132
clusterIPs:
- 10.110.207.132
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: kong-proxy-tls
port: 443
protocol: TCP
targetPort: 8443
- name: kong-proxy
port: 80
protocol: TCP
targetPort: 8000
2. Deployment 설정하기
spec:
automountServiceAccountToken: false
containers:
- env:
...
- name: KONG_PORT_MAPS
value: 80:8000
...
- name: KONG_PROXY_LISTEN
value: 0.0.0.0:8000 http2, [::]:8000 http2
---
name: proxy
ports:
- containerPort: 8443
name: proxy-tls
protocol: TCP
- containerPort: 8000
name: proxy
protocol: TCP
3. VirtualService 설정하기
spec:
gateways:
- default/cluster-gateway
hosts:
- kubernetes-dashboard.ABC.com
http:
- corsPolicy:
allowHeaders:
- authorization
- content-Type
- accept
allowMethods:
- POST
- GET
- DELETE
- PUT
- OPTIONS
allowOrigins:
- regex: .*
exposeHeaders:
- authorization
- location
maxAge: 24h
match:
- uri:
prefix: /
route:
- destination:
host: kubernetes-dashboard-kong-proxy.kubernetes-dashboard.svc.cluster.local
port:
number: 80
4. Gateway 설정하기
spec:
selector:
istio: ingressgateway
servers:
- hosts:
...
- kubernetes-dashboard.ABC.com
port:
name: https
number: 443
protocol: HTTPS
tls:
credentialName: istio-system/ABC-cert
mode: SIMPLE
5. Certificate 설정하기
spec:
commonName: ABC.com
dnsNames:
...
- kubernetes-dashboard.ABC.com
duration: 2160h
isCA: true
issuerRef:
kind: ClusterIssuer
name: letsencrypt-prod-istio
renewBefore: 360h
secretName: ABC-cert
6. 도메인으로 접속하기