본문 바로가기

Cloud/Oracle Cloud Infrastructure (OCI)

OCI상에서 ISTIO를 활용하여 구현한 Service Mesh - #4. 이스티오 데모 - 쿠버네티스 대쉬보드 설치/설정

Oracle Cloud Infrastructure (OCI) 에서 이스티오(ISTIO)를 활용한 서비스 메쉬(Service Mesh)에 대한 기술 정리 및 이를 데모로 구현한 내용을 정리합니다.

글 순서

1. Overview

2. 이스티오 작동 방식

3. 이스티오 데모 - 사전 준비

4. 이스티오 데모 - 쿠버네티스 대쉬보드 설치/설정

5. 이스티오 데모 - 이스티오 설치, 엔보이 프록시 주입

6. 이스티오 데모 - 샘플 어플리케이션 (Bookinfo) 배포

7. 이스티오 데모 - 카나리 배포

8. 이스티오 데모 - 결함 주입(Fault Injection)

9. 이스티오 데모 - 서비스 시각화 (프로메테우스)

10. 이스티오 데모 - 서비스 시각화 (그라파나)

11. 이스티오 데모 - 서비스 시각화 (키알리)

12. 이스티오 데모 - 서비스 시각화 (예거)

 

REFERENCES

아래 도서 및 사이트를 참조하여 작성한 문서입니다.

  • 도메인 주도 설계로 시작하는 마이크로 서비스 개발 (위키북스)
  • 쿠버네티스 완벽 가이드 (길벗)
  • Istio로 시작하는 서비스 메시 (에이콘)
  • Isitio Documentation

 

쿠버네티스 대쉬보드 접속

kubeconfig 설정 확인과 이후 관리 편의를 위해 쿠버네티스 대쉬보드를 사용하겠습니다.

쿠버네티스 대쉬보드 UI는 기본으로 배포되지 않습니다. 배포하려면 다음 커맨드를 실행하면 됩니다.

[opc@demo ~]$ kubectl apply -f <https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml>
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

 

쿠버네티스 대쉬보드는 내부적으로 apiserver에 접근해서 클러스터 환겨의 자원들을 가져오기 때문에 이를 위한 권한이 필요합니다. 이를 위해 서비스 어카운트 (Service Account)를 만들고 이 계정을 롤 어드민 권한으로 묶는 클러스트 롤 바인딩(ClusterRoleBinding) 생성이 필요합니다.

먼저 아래 내용으로 파일을 YAML 파일을 생성합니다. 여기에서는 “oke-admin-service-account.yaml" 라는 이름으로 파일을 만들었습니다.

[opc@demo ~]$ cat oke-admin-service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: oke-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: oke-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: oke-admin
  namespace: kube-system

 

kubectl 명령으로 생성한 파일 내용으로 서비스 어카운트와 클러스터 롤 바인딩을 생성합니다.

[opc@demo ~]$ kubectl apply -f oke-admin-service-account.yaml
serviceaccount/oke-admin created
clusterrolebinding.rbac.authorization.k8s.io/oke-admin created

 

oke-admin 서비스 어카운트에 대한 인증 토큰 값을 복사해 둡니다. 이는 쿠버네티스 대쉬보드에서 로그인할 때 필요합니다.

[opc@demo ~]$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep oke-admin | awk '{print $1}')
Name:         oke-admin-token-vg27w
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: oke-admin
              kubernetes.io/service-account.uid: c9aa90a0-d27c-4c5d-8a69-044f1e25bb46

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1285 bytes
namespace:  11 bytes
token:      eyJh______px1Q

 

kubectl 커맨드라인 도구를 이용해 다음 커맨드를 실행함으로써 대쉬보드로의 접속을 활성화할 수 있습니다.

[opc@demo ~]$ kubectl proxy

 

이제 VNC 접속 환경에서 웹 브라우저를 열어서 아래 URL로 접속합니다.

**http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login**

 

인증방법에 Token을 선택하고 앞서 복사해 둔 토큰값을 붙여넣습니다. 그리고 Sigh in을 클릭합니다.

 

아래는 로그인 후 대쉬보드의 노드 정보 화면입니다.

 

<END>