Istio
개요
쿠버네티스에서 활용할 수 있는 대표적인 서비스 메시 툴.
어플리케이션 간 트래픽을 연결 관리하면서, 보안이나 모니터링을 용이하게 해준다.
가령 자체적으로 mTLS를 적용하거나 로드밸런싱, 트래픽 미러링 등의 작업을 할 수 있다.
전반적인 기능에 대해서는 서비스 메시#기능을 참고하자.
2017년에 처음 발표되고 CNCF에 기증되어 쿠버네티스, 프로메테우스와 비슷한 시기에 졸업 프로젝트가 됐다.
구글과 IBM이 파트너십을 체결하고 개발에 착수했으며, Envoy를 만든 Lyft팀과 결합하여 개발됐다.
이스티오의 언어적 의미는 그리스 언어로 "Sail", 즉 항해를 의미한다.
그리스어로 조타수를 의미하는 쿠버네티스와 언어적 연관성을 두는 작명이라 할 수 있겠다.
최근 다양한 CNI들이 서비스 메시적인 기능을 제공하기 시작했다.
그러나 이들이 자체 표준으로 서비스 메시를 제공하는 것은 아니며, 어떤 것을 쓸지는 선택이다.
다만 이스티오는 훨씬 성숙하고, 정제된 형태로 발전해왔으며 게이트웨이API도 실질적으로 이스티오를 전신으로 둔 채로 개발된 것이나 다름없다는 점을 생각하면 이스티오의 대안이 있다고 해서 이스티오가 가뿐히 무시될 만하다고 보기는 힘들다고 생각한다.
구조
이스티오는 1.26 버전 현재 사이드카 모드와 앰비언트 모드, 두 가지 방식의 서비스 메시 구조를 지원한다.
두 모드라고는 하지만, 거시적인 관점에서 각종 설정을 총체적으로 관리하는 컨트롤 플레인과, 데이터 플레인에 서비스들의 트래픽을 관리하는 프록시를 두는 구조 자체는 결국 똑같다.
그 세부 구현과 기능에서 어마무시한 차이가 있기는 하지만.. 서비스 메시를 처음 알게 됐다면 이러한 구조로 이뤄져있다고 알면 좋겠다.
컨트롤 플레인 - istiod
이스티오 컨트롤 플레인은 istiod라고 부르며, 이건 어떤 모드를 사용하건 간에 똑같다.
(이러한 방식 덕에, 두 모드를 동시에 사용하며 통합하는 것이 가능하다)
사이드카 모드
사이드카 모드는 서비스 메시라 할 때 아주 기본적으로 생각되던 방식이다.
무슨 말이냐, 모든 워크로드에 개별적으로 사이드카 프록시를 배치해서 메시를 구성하는 방식이다.
엔보이를 프록시로서 활용하며, 이스티오의 전반적인 모든 기능이 지원되고 있다.
자세한 내용은 문서 참고.
이스티오 관련해서 각종 정리한 내 노트들은 기본적으로 사이드카 모드를 기반으로 설명한다.
애초에 이스티오가 사이드카 모드를 전제로 설계됐고, 모든 기능을 사용할 수 있는 건 사이드카 모드이기 때문이다.
앰비언트 모드
앰비언트 모드는 22년에 새롭게 선보여진 방식으로, 24년에 GA가 됐다.
이 모드는 각 워크로드 별로 프록시를 배치하지 않고 노드 별로 프록시를 배치한다.
그러면서도 각 워크로드를 개별적으로 관리할 수 있도록 하기 위해 각종 기술들이 들어가는데, 덕분에 자원 소모량이나 속도에서 월등한 차이를 보여준다.
심지어는 이스티오를 활용하지 않는 환경보다도 레이턴시가 작다는 실험 결과도 있다.[1]
당연히 테스트 환경을 간단하게 구성했으니 가능한 거지만, 이런 결과가 나온다는 것 자체는 충분히 괄목할 만하다.
나온지 오래 되지 않아서 그런지 GA라고는 하지만 아직 기능이 제한적인 구석이 더러 있다.
커스텀 리소스
이스티오는 컨트롤 플레인에 설정을 넣기 위한 다양한 CRD 리소스를 제공하고 있다.
실제로 트래픽을 처리하는 것은 데이터플레인에 위치한 엔보이이므로, 이 리소스들에 대한 설정은 궁극적으로 엔보이에 적용된다.
이름 | aliases | noteType | created |
---|---|---|---|
Istio Telemetry |
|
knowledge | 2025-04-08 |
Istio Gateway |
|
knowledge | 2025-04-16 |
Istio ServiceEntry |
|
knowledge | 2025-04-17 |
Istio VirtualService |
|
knowledge | 2025-04-21 |
Istio DestinationRule |
|
knowledge | 2025-04-21 |
Istio EnvoyFilter |
|
knowledge | 2025-04-21 |
Istio WasmPlugin |
|
knowledge | 2025-04-21 |
Istio PeerAuthentication | - | knowledge | 2025-05-04 |
Istio RequestAuthentication | - | knowledge | 2025-05-04 |
Istio AuthorizationPolicy | - | knowledge | 2025-05-04 |
Istio Operator |
|
knowledge | 2025-05-09 |
Istio Sidecar |
|
knowledge | 2025-05-13 |
Istio ProxyConfig |
|
knowledge | 2025-05-17 |
Istio WorkloadGroup |
|
knowledge | 2025-05-26 |
Istio WorkloadEntry |
|
knowledge | 2025-05-26 |
설치
이스티오는 현재 크게 2가지의 설치 방식을 지원한다.[2]
이전에는 IstioOperator 커스텀 리소스를 이용한 오퍼레이터 패턴도 존재했으나, 현재 이 방식은 사라졌다.
istioctl을 통한 설치
istioctl은 이스티오를 관리할 때 매우 유용한 툴이다.
이걸 이용해서 이스티오를 설치하는 것도 가능한데, 이때 설정 파일은 IstioOperator 양식을 따른다.
즉 쿠버네티스의 커스텀 리소스로서 관리되는 오퍼레이터는 사라졌지만, istioctl을 이용한 설치는 여전히 해당 양식을 기반으로 한다는 것이다.
istioctl을 이용해서 설치하지 않더라도, 이 툴은 이스티오를 관리하는데 있어서는 거의 필수적인 툴이니 꼭 설치해서 사용하자.
istioctl install --set profile=demo
istioctl을 사용해 설치할 때는 이렇게 헬름 설치하는 것 마냥 세팅을 해주면 된다.
-f
를 통해 설정 파일을 넘겨서 더욱 많은 커스텀을 편리하게 설정하는 것도 가능하다.
이때 사용되는 것이 위에서 말한 istio operator 양식 파일이다.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
profile: default
hub: gcr.io/istio-testing
tag: latest
revision: 1-8-0
meshConfig:
accessLogFile: /dev/stdout
enableTracing: true
components:
egressGateways:
- name: istio-egressgateway
enabled: true
values:
...
양식은 대충 이런 식으로 작성하면 되며, 추가적인 세팅들은 profile
필드에 나온 프로필에 덮어쓰기된다.[3]
meshConfig
는 컨트롤 플레인 전반 설정, components
필드에서 각 세부 컴포넌트들을 세팅한다.
values
는 설치 시 같이 세팅되는 모니터링이나 일련의 툴들에 대한 세팅을 하는 필드인데, 사실 이건 헬름을 통해 설치할 때 사용하는 values 파일을 그대로 가져다둔 것이다.[4]
이스티오는 문서 구조가 조금 난해한 것 같아서, 핵심이 되는 문서 링크도 각주를 달아두겠다..[5]
istioctl을 이용해서 설치하는 방법의 장점은 각종 설정 양식의 검증 체크가 확실하다는 것이다.
반면 단점도 존재하는데, 상대적으로 버전 관리가 어렵다는 것이다.
하나의 여러 개의 설정 파일을 두고 하나의 이스티오를 세팅하는데 사용할 수 있는데, 이때 이 설정 파일 간 덮어씌워지는 설정은 뭐고 아닌 건 뭐고 이런 거 체크가 잘 안 된다.
그래서 isioctl로 설치한다면, 가급적 설정 파일은 하나만 사용하는 것을 추천한다.
헬름 기반 설치
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
helm install istio-base istio/base -n istio-system --set defaultRevision=default --create-namespace
helm install istiod istio/istiod -n istio-system --wait
# 게이트웨이 워크로드도 설치하고 싶다면
helm install istio-ingress istio/gateway -n istio-ingress --wait
# 앰비언트 모드라면 아래도 전부 해야 함
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml
helm install istio-cni istio/cni -n istio-system --set profile=ambient --wait
helm install ztunnel istio/ztunnel -n istio-system --wait
헬름으로 설치할 때는 위와 같이 각종 컴포넌트를 독립적으로 설치해야 한다.
먼저 CRD를 설치하고, 이후에 컨트롤 플레인을 설치하는 방식이다.
헬름을 이용한 설치는 버전 관리가 상대적으로 잘 되고 깃옵스와 궁합이 좋다는 것이 큰 장점이다.
위에 잠시 보이지만, revision 값을 세팅해서 점진적 업그레이드를 하는 것도 가능하다.
(참고로 1.26 기준으로 앰비언트는 카나리 불가.[6])
헬름을 통해 설치할 때 다양한 컴포넌트들을 독립적으로 배포하는 불편함을 메꾸고자 최근에 나온 것이 Sail Operator라는 오퍼레이터다.[7]
구체적으로는 이전의 IstioOperator을 대체하기 위해 나온 거긴 한데, 아무튼 헬름의 장점을 살리면서 설치를 간소화시키는 장점이 있다.
프로필
두 설치 방식 모두 공통적으로 등장하는 필드가 profile이다.
이스티오는 배포, 플랫폼 프로필의 개념을 이용하여 요구사항에 맞게, 환경에 맞게 설치 방식을 더 세분화시킨다.
이스티오에 필요한 세팅들을 전부 일일히 세팅하기 귀찮으니 몇 가지 템플릿을 제공하는 것이라 보면 된다.
그래서 프로필을 무조건 뭘로 해야지만 제대로 동작하고 어떤 거 하면 어떤 기능이 제한되고 이런 개념은 아니다.
배포 프로필의 종류는 이렇다.
- default - IstioOperator api를 이용한 가장 기본적인 세팅으로, 멀티 클러스터 중 기본이 되는 클러스터에 세팅하기 좋다.
- demo - 이스티오의 기능을 보여주기 위한 세팅으로, 높은 단계의 로깅과 트레이싱이 활성화돼있다.
- minimal - 기본과 동일하나 컨트롤 플레인 컴포넌트만 설치된다.
- remote - 멀티 클러스터에서 2차 클러스터를 위한 설정
- ambient - 앰비언트 모드 설정
- empty - 커스텀 설정을 넣기 위해 존재하는, 아무것도 없는 설정
- preview - 실험적 기능이 들어가는 설정
플랫폼 프로필에는 위 종류들이 있다.
하위 문서
이름 | is-folder | index | aliases | created |
---|---|---|---|---|
Istio Traffic Management | true | 0 |
|
2025-04-21 |
Istio Observability | true | 0 |
|
2025-04-28 |
Istio Security | true | 0 |
|
2025-05-04 |
Istio Extenisibility | true | 0 |
|
2025-05-26 |
pilot-agent | false | 1 | - | 2025-04-28 |
앰비언트 모드 | false | 3 |
|
2025-06-02 |
Istio Operator | false | 5 |
|
2025-05-09 |
istioctl | false | 6 | - | 2025-05-12 |
istiod | false | 7 |
|
2025-05-18 |
사이드카 모드 | false | 8 |
|
2025-05-18 |
관련 문서
EXPLAIN - 파생 문서
이름13 | related | 생성 일자 |
---|---|---|
이스티오 컨트롤 플레인 성능 최적화 | 이스티오 | 2025-05-18 02:29 |
이스티오 컨트롤 플레인 메트릭 | istiod | 2025-05-18 15:45 |
이스티오 설정 트러블슈팅하기 | 이스티오 | 2025-05-18 01:31 |
이스티오 가상머신 통합 | 이스티오 확장성 | 2025-06-01 13:32 |
이스티오 DNS 프록시 동작 | 이스티오 트래픽 관리 | 2025-06-01 12:33 |
앰비언트 모드에서 메시 기능 활용 | 앰비언트 모드 | 2025-06-07 20:56 |
앰비언트 모드 헬름 세팅 | 앰비언트 모드 | 2025-06-03 19:27 |
앰비언트 ztunnel 트래픽 경로 분석 | 앰비언트 모드 | 2025-06-07 20:36 |
deb 파일 뜯어보기 | E-이스티오 가상머신 통합 | 2025-06-01 12:27 |
이스티오에서 엔보이 기능 확장하기 | 이스티오 스케일링 | 2025-06-01 14:06 |
이스티오 메시 스케일링 | 이스티오 스케일링 | 2025-06-08 23:41 |
istio-csr 사용 실습 | E-이스티오 메시 스케일링 | 2025-06-09 00:30 |
이스티오의 데이터 플레인 트래픽 세팅 원리 | E-이스티오 가상머신 통합 | 2025-05-27 21:55 |
기타 문서
Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완이름46 | 코드 | 타입 | 생성 일자 |
---|---|---|---|
아르고 롤아웃과 이스티오 연계 | Z0 | knowledge | 2025-04-22 13:48 |
I-ztunnel이 다른 네임스페이스에서 요청 보내는 코드 분석 | Z1 | topic/idea | 2025-06-07 20:44 |
I-다른 네임스페이스 같은 포트 리스닝 서버 구현 | Z1 | topic/idea | 2025-06-07 19:39 |
T-엔보이 실습 with solo.io | Z3 | topic/temp | 2025-04-14 23:15 |
7주차 - 스케일링, 멀티 클러스터 | Z5 | project | 2025-05-18 20:04 |
25.05 테크니컬 라이팅 | Z5 | area | 2025-05-07 13:07 |
1주차 - istio 소개, 첫걸음 | Z5 | project | 2025-04-06 19:57 |
3주차 - 네트워크 복원력 | Z5 | project | 2025-04-23 21:38 |
4주차 - 이스티오 관측가능성 | Z5 | project | 2025-04-27 19:52 |
5주차 - 통신 보안 | Z5 | project | 2025-05-04 19:54 |
6주차 - 디버깅 | Z5 | project | 2025-05-11 19:50 |
P-Istio Hands-on 스터디 1기 | Z5 | project | 2025-04-03 17:52 |
스터디 내용 사전 정리 | Z5 | project | 2025-04-03 18:00 |
책 내용 정리 | Z5 | project | 2025-04-03 17:59 |
2주차 - 엔보이, 게이트웨이 | Z5 | project | 2025-04-13 20:10 |
3주차 - 트래픽 관리 | Z5 | project | 2025-04-19 15:11 |
8W - 엔보이와 iptables 뜯어먹기 | Z8 | published | 2025-06-01 12:14 |
9W - 앰비언트 모드 구조, 원리 | Z8 | published | 2025-06-07 19:17 |
1W - 서비스 메시와 이스티오 | Z8 | published | 2025-04-10 20:04 |
이스티오 스케일링 | Z8 | topic | 2025-05-18 20:01 |
엔보이에 와즘 플러그인 적용해보기 | Z8 | topic | 2025-06-09 02:29 |
1W - Gateway API를 활용한 설정 | Z8 | published | 2025-04-10 20:08 |
1W - 간단한 장애 상황 구현 후 대응 실습 | Z8 | published | 2025-04-10 20:06 |
1W - 네이티브 사이드카 컨테이너 이용 | Z8 | published | 2025-04-10 20:32 |
2W - 엔보이 | Z8 | published | 2025-04-17 22:06 |
2W - 인그레스 게이트웨이 실습 | Z8 | published | 2025-04-17 22:06 |
3W - 데스티네이션 룰을 활용한 네트워크 복원력 | Z8 | published | 2025-04-26 00:35 |
3W - 타임아웃, 재시도를 활용한 네트워크 복원력 | Z8 | published | 2025-04-26 00:41 |
3W - 버츄얼 서비스를 활용한 기본 트래픽 관리 | Z8 | published | 2025-04-22 21:56 |
3W - 서비스 엔트리와 이그레스 게이트웨이 | Z8 | published | 2025-04-22 22:01 |
3W - 트래픽 가중치 - flagger와 argo rollout을 이용한 점진적 배포 | Z8 | published | 2025-04-22 21:59 |
3W - 트래픽 미러링 패킷 캡쳐 | Z8 | published | 2025-04-22 22:00 |
4W - 이스티오 메트릭 확인 | Z8 | published | 2025-05-03 22:15 |
4W - 이스티오 메트릭 커스텀, 프로메테우스와 그라파나 | Z8 | published | 2025-05-03 22:16 |
5W - 이스티오 JWT 인증 | Z8 | published | 2025-05-11 00:03 |
5W - 이스티오 mTLS와 SPIFFE | Z8 | published | 2025-05-11 00:01 |
6W - 이스티오 설정 트러블슈팅 | Z8 | published | 2025-05-18 01:31 |
6W - 이스티오 컨트롤 플레인 성능 최적화 | Z8 | published | 2025-05-18 02:29 |
4W - 번외 - 트레이싱용 심플 메시 서버 개발 | Z8 | published | 2025-05-03 22:48 |
4W - 오픈텔레메트리 기반 트레이싱 예거 시각화, 키알리 시각화 | Z8 | published | 2025-05-03 22:49 |
5W - 이스티오 인가 정책 설정 | Z8 | published | 2025-05-11 00:04 |
7W - 이스티오 메시 스케일링 | Z8 | published | 2025-06-09 02:04 |
7W - 엔보이 필터를 통한 기능 확장 | Z8 | published | 2025-06-09 02:30 |
8W - 가상머신 통합하기 | Z8 | published | 2025-06-01 12:11 |
9W - 앰비언트 헬름 설치, 각종 리소스 실습 | Z8 | published | 2025-06-07 19:27 |
Istio 1기 - Istio Hands-on | Z8 | published | 2025-04-03 17:55 |