일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- thread
- 스프링
- mysql
- Stream
- K8s
- 자바 ORM 표준 JPA 프로그래밍
- list
- Stack
- 보조스트림
- Kotlin
- GC
- Java
- MSA
- 백준
- jvm
- 쿠버네티스
- OS
- Collection
- spring
- SpringBoot
- 자바
- 이스티오
- redis
- 토비의 스프링 정리
- 토비의 스프링
- 스트림
- JPA
- IntellJ
- Real MySQL
- gradle
- Today
- Total
인생을 코딩하다.
[k8s] Docker에서 k8s Service mesh parttern 의 구현체인 Istio 설치 본문
안녕하세요. 오늘은 docker에서 k8s istio를 설치하는 것에 관해 글을 작성해보도록 하겠습니다.
배경
현재, 저는 스프링 클라우드(스프링 부트 + 넷플릭스 OSS) 적용에 사용되는 컴포넌트 중 하나인 Eureka를 사용하고 있습니다.
하지만, 스프링 클라우드(스프링 부트 + 넷플릭스 OSS)를 이용한 경우에는 스프링 클라우드로 각 서비스를 먼저 구축하고 마이크로서비스 애플리케이션 자체도 코드 내부에 스프링 클라우드 사용을 위한 클라이언트 코드가 탑재되어야 합니다. 또한 Eureka는 현재 deprecated되었기도 하구요.
하지만, eureka가 아닌, k8s Service mesh parttern 의 구현체인 Istio를 적용하는 경우에는 마이크로 서비스마다 함께 배포되는 사이드카 프락시에 운영 관리를 위한 기능이 별도로 담겨있기 때문에 마이크로서비스는 순수 비즈니스 로직에 집중할 수 있습니다. 따라서 erueka -> istio로 리팩토릭 하기롤 결정하였습니다.
eureka와 istio에 관해서는 아래의 두 글을 참고하여 주시면 감사하겠습니다.
Docker desktop 준비사항
1. 먼저 docker desktop의 설정 버튼을 누르고 resource 에서 CPU 4cpu 이상, RAM 할당을 8G 로 늘려줍니다.
2. 그 다음으로 Enable kubernetes를 체크하고 apply를 클릭하면 Kubrenetes가 download 되고 활성화됩니다.
3. 터미널에서 kubectl get nodes 명령어로 클러스터가 잘 활성화 돼었는지 확인해봅니다.
istioctl 설치
터미널에서 brew install istioctl 명령어를 입력하여 설치 후 , istioctl version 명령어로 설치가 잘 되었는지 확인해봅니다.
istio sample 예제 clone
git clone https://github.com/istio/istio.git 를 터미널에 입력하고 clone한 후에, cd istio를 입력하여 줍니다.
istio 설치
istio 를 활성화한 kubenetes cluster 에 설치해보겠습니다.
istioctl operator init 명령어를 입력하여 설치해줍니다.
IstioOperator apply
ingress gateway 를 활성화 하기 위해서 demo profile로 IstioOperator 를 apply 합니다.
kubectl create ns istio-system 명령어를 입력해줍니다. 만약 이미 존재한다면, kubectl apply -f - <<EOF 입력해줍니다.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: example-istiocontrolplane
spec:
profile: demo # profile demo로 하면 컴포넌트들을 설치합니다.
components:
pilot:
k8s:
resources:
requests:
memory: 3072Mi # pilot 에는 메모리를 넉넉하게 할당하였다.
egressGateways:
- name: istio-egressgateway # 외부로 나가는 트래픽을 egressgateway를 통하도록 활성화 합니다.
enabled: true
EOF
위의 예시로 설치하면 다음과 같은 컴포넌트들이 설치가 됩니다..
- istio-egressgateway
- istio-ingressgateway
- istiod
istio-ingressgateway
envoy 로 되어 있으며 들어오는(ingress) 트래픽을 전달하는 역할을 수행합니다.. istio 가 없을 때 ingress controller (주로 nginx 로 구동되는)가 이 역할을 수행합니다. (경우에 따라 nginx ingress controller + envoy istio ingress gateway 조합으로도 구성하기도 합니다.)
istio-egressgateway
마찬가지로 envoy 로 동작하며 밖으로 나가는(egress) 트래픽을 제어하는 역할을 수행합니다. 클러스터 외부에 있는 인프라에서 제한된 ACL 을 필요로 할 때 egress-gateway 가 구동되는 위치를 일부 node들로 제한하고 이 Node 들에 대해서만 ACL 을 열어주는 용도로 사용될 수 있습니다.
istiod
istio 의 컨트롤 플랜 (pilot - discovery , citadel - certification, galley - configuration management)입니다.
추가 컴포넌트 설치
이전 버전에서는 demo 프로필로 설치하면 kiali, 등등의 컴포넌트가 많이 설치되었는데 최신버전에서는 추가 컴포넌트는 따로 설치해줘야 합니다.
이렇게 변경된 이유는 kiali, zipkin, Prometheus와 같은 컴포넌트는 istio 의 core 컴포넌트가 아니고 이 컴포넌트들은 버전업이 빨라서 demo profile 에 같이 포함시켰더니 버전업 대응하기가 어려웠다고 합니다.. 따라서 그 때그때 필요한 사람들이 add components 하라고 안내하고 있습니다.
cd istio/samples/addons 명령어를 입력하여 addons 경로에서
- kubectl apply -f prometheus.yaml
- kubectl apply -f kiali.yaml
- kubectl apply -f grafana.yaml
- kubectl apply -f jaeger.yaml
위의 네 가지 명령어를 입력해줍니다.
설치 확인
Service
kubectl get svc -n istio-system 를 입력하여 service가 잘 설치가 되었는지 확인해봅니다.
Pods
kubectl get pod -n istio-system를 입력하여 Pod가 잘 설치가 되었는지 확인해봅니다.
네임스페이스에 istio-injection 라벨 추가
사이드카를 활성화할 default namespace 에 istio-injection=enable 라벨을 적용합니다.
kubectl label namespace default istio-injection=enabled
작성 중..
'Infra' 카테고리의 다른 글
[M1 MAC] M1 Mac에서 docker로 mysql 설치하기 (0) | 2021.12.15 |
---|---|
[쿠버네티스] 쿠버네티스(k8s) 서비스 메시 패턴의 구현체인 Istio란? (0) | 2021.11.02 |
SAML(Security Assertion Markup Language)기반 SSO(Single Sing-On)에 대한 이해 (0) | 2021.10.28 |
nGrinder를 이용해 Login API 성능 테스트 후 Scale-Up을 적용하여 성능 개선 - (2) (0) | 2021.08.26 |
리눅스 서버에 ngrinder 설치하기 (0) | 2021.08.09 |