목차
- 서비스 메시는 무엇일까?: https://malwareanalysis.tistory.com/280
- Istio아키텍처: https://malwareanalysis.tistory.com/304
- envoy proxy 체험: https://malwareanalysis.tistory.com/305
- Istio envoy 동적설정 원리: https://malwareanalysis.tistory.com/306
- istio설치: https://malwareanalysis.tistory.com/297
- istio-operator: https://malwareanalysis.tistory.com/298
- istion injecton: https://malwareanalysis.tistory.com/299
- Istio트래픽 흐름과 설정 이해: https://malwareanalysis.tistory.com/307
- istio keycloak 인증 연동: https://malwareanalysis.tistory.com/310
안녕하세요. 이 글은 sidecar 패턴을 사용하여 envoy proxy를 파드에 injection하는 방법을 설명합니다.
1. istio가 sidecar 패턴을 이용하는 방법
이전 포스트(https://malwareanalysis.tistory.com/280)에서 설명한 istio 구조 기억나시나요? istio는 각 파드에 envoy proxy를 설치하여 서비스 메시를 관리합니다.
envoy proxy를 어떻게 설치하냐가 관건인데, istio는 sidecar 패턴을 사용했습니다. pod안에 메인 컨테이너가 있고 side로 컨테이너를 실행하는 방법입니다.
큰 구조를 보면 아래와 같습니다.
2. istio가 sidecar를 배포할지 결정하는 방법
한가지 문제가 생겼습니다. 모든 pod에 envoy proxy를 설치하지 않고 원하는 pod만 envory proxy를 설치하고 싶은 겁니다. 객체지향 DI(Dependency Injection)처럼 Istio도 Sidecar Injection을 지원합니다. 공식문서(https://istio.io/latest/docs/setup/additional-setup/sidecar-injection/)에서도 따로 문서로 정리될만큼 중요한 개념입니다.
Istio Injection은 두가지 방법이 존재하는데요!. ①명령어로 수동으로 하는 방법과 ②라벨로 설정하는 방법이 있습니다. 이 글에서는 라벨로 설정하는 방법을 다룹니다. 명령어는 istio공식문서를 참고하시길 바랍니다.
3. namespace에 속한 모든 pod Injection
namespace라벨을 설정하여 namespace에 속한 모든 pod에 envoy proxy를 injection할 수 있습니다. namespace라벨을 "istio-injection=enabled"로 하면 설정 끝입니다.
3.1 예제 배포
injection이전에 공식문서에서 제공하는 예제를 배포해보겠습니다.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.13/samples/sleep/sleep.yaml
컨테이너 갯수를 확인하면 총 1개가 있습니다.
kubectl get po | grep sleep
3.2 injection 설정
default namespace에 라벨을 설정하여 injection을 허용합니다.
kubectl label namespace default istio-injection=enabled --overwrite
istio-injection이 허용된 namespace를 조회하려면 -L을 사용합니다.
kubectl get namespace -L istio-injection
3.3 pod 재실행
기존에 실행되고 있는 pod를 삭제하여 재실행합니다.
kubectl delete pod -l app=sleep
pod를 조회하면 컨테이너 갯수가 총 2개입니다. 메인 컨테이너와 envoy proxy컨테이너가 실행되고 있어서 2개입니다.
kubectl get po | grep sleep
4. 특정 pod에 injection 제외
namespace에 injection이 설정되어 있는 상황에서 특정 pod만 injetion을 제외시킬 수 있습니다. pod라벨에 "sidecar.istio.io/inject: False"로 설정하면 됩니다.
[챕터 3.1]에서 배포했던 deployment를 수정합니다.
kubectl edit deploy sleep
# pod라벨 추가
sidecar.istio.io/inject: "false"
pod를 확인하면 컨테이너가 총 1개입니다. namespace에 injection이 설정되었음에도 불구하고 특정 pod에 envoy project가 실행되지 않았습니다.
kubectl get po | grep sleep
'전공영역 공부 기록' 카테고리의 다른 글
istio 공식샘플 - book application (0) | 2022.03.23 |
---|---|
쿠버네티스 노드당 pod갯수 제한확인 (0) | 2022.03.21 |
istio operator (0) | 2022.03.21 |
istio 설치 (0) | 2022.03.21 |
쿠버네티스 네트워크 스터디 부록: cililum 클라이언트 명령어 정리 (0) | 2022.03.01 |