Docker 컨테이너 이미지 강화하기

Docker 컨테이너 이미지 강화하기 (Harden Docker Container Images)

Istio의 기본 이미지는 추가 도구가 포함된 ubuntu 기반으로, 그 대안으로 distroless 이미지 기반 이미지도 사용할 수 있어요. 이 페이지에서는 distroless 이미지로 Istio의 공격 표면을 줄이는 방법을 배워요.

출처: Istio 문서

본문

Istio의 기본 이미지는 일부 추가 도구가 포함된 ubuntu를 기반으로 해요. distroless 이미지 기반의 대안 이미지도 제공돼요.

이 이미지들은 필수가 아닌 실행 파일과 라이브러리를 모두 제거해서 다음과 같은 이점을 제공해요.

  • 가능한 가장 작은 취약점 집합을 포함하므로 공격 표면(attack surface)이 줄어들어요.
  • 이미지가 더 작아서 더 빠른 시작이 가능해요.

공식 distroless README의 Why should I use distroless images? 섹션도 참고하세요.

distroless 이미지 설치

설치 단계를 따라 Istio를 설정하세요. distroless 이미지를 사용하려면 variant 옵션을 추가하세요.

$ istioctl install --set values.global.variant=distroless

주입된 프록시 이미지에만 distroless 이미지를 사용하고 싶다면 Proxy Config의 image.imageType 필드를 사용할 수도 있어요. 위의 variant 플래그는 이 값을 자동으로 설정해준다는 점을 기억하세요.

디버깅

Distroless 이미지에는 모든 디버깅 도구(쉘조차!)가 없어요. 보안에는 좋지만 kubectl exec로 프록시 컨테이너에 접속해서 임시 디버깅하는 능력은 제한돼요.

다행히 Ephemeral Containers가 여기 도움이 돼요. kubectl debug는 파드에 임시 컨테이너를 붙일 수 있어요. 추가 도구가 있는 이미지를 사용하면 예전처럼 디버깅할 수 있어요.

$ kubectl debug --image istio/base --target istio-proxy -it app-65c6749c9d-t549t
Defaulting debug container name to debugger-cdftc.
If you don't see a command prompt, try pressing enter.
root@app-65c6749c9d-t549t:/# curl example.com

이는 istio/base를 사용하는 새 임시 컨테이너를 배포해요. 이는 non-distroless Istio 이미지에서 사용하는 것과 같은 기본 이미지로, Istio 디버깅에 유용한 다양한 도구를 포함해요. 하지만 어떤 이미지든 작동해요. 또한 이 컨테이너는 sidecar 프록시의 프로세스 네임스페이스(--target istio-proxy)와 파드의 네트워크 네임스페이스에도 연결돼요.

더 알아보기 (Learn more)