Istio 서비스 메시를 쓰면 Pod을 띄울 때 Istio Proxy가 사이드카 형태, 그러니까 메인 컨테이너 옆에 별도의 컨테이너로 뜨고 모든 트레픽이 이 Istio Proxy를 타고 나가고 들어오는 형태가 됩니다.
최근 sidecar없는 형태로 서비스 메시를 구현하는게 추세이긴 하지만 sidecarless가 나온지 오래되진 않았기 때문에 Istio도 사이드카 형태로 되어 있습니다.(ambient mode라고 sidecar 없는 버전을 준비 중입니다.)
사이드카 형태는 리소스를 추가로 먹는 등 불편함도 있긴 하지만 사용할 때 은근 불편한 부분이 메인 컨테이너가 죽어도 사이드카 컨테이너가 죽지 않으면 팟이 내려가지 않는 문제입니다. 이는 어찌 보면 팟안에 여러 컨테이너를 쓸 수 있기 때문에 사이드카 패턴에서는 자연스런(?) 행동일 수도 있지만 istio 측면에서 보면 이게 문제가 되곤 합니다.
둘의 생명주기를 관리하기 어렵기 때문에 istio proxy가 먼저 죽거나 나중에 실행되면 메인 컨테이너가 잘 떠있더라도 통신을 제대로 할 수 없는 문제가 생기기도 하고 잠시 실행후 내려가는 Job 형태의 팟 같은 경우에는 Job 실행이 끝난 뒤에도 istio proxy가 살아있기 때문에 팟이 내려가지 않습니다. 당연히 istio proxy를 빼면 되긴 하지만 이때는 서비스 메시의 혜택을 받지 못합니다.
istio 측에서도 이문제를 해결하기 위해 많은 노력을 한 것 같지만 제대로 해결하긴 어려웠는데 다행히도 Kuberenetes에서 이 문제를 해결하기로 결정해서 1.28 버전(현재 최신 버전)에서는 SidecarContainers라는 기능이 추가되었습니다. 이 기능을 사용하면 istio proxy가 initContainers로 실행되기 때문에 항상 먼저 실행되고 컨테이너가 죽으면 자동으로 사이드카 컨테이너도 내려가게 됩니다.
아직은 알파 기능이라 1.28에서도 피처케이트를 켜주어야 사용할 수 있습니다.
https://istio.io/latest/blog/2023/native-sidecars/