加固 Docker 容器镜像

Istio 的默认镜像基于 ubuntu 添加了一些额外的工具。 也可以使用基于 Distroless 镜像的替代镜像。

使用 Distroless 时,Distroless 镜像已经不再包含非必需的可执行文件和库。

  • 减少了攻击面。尽可能少的漏洞。
  • 镜像更小了,且启动更快。

请参考官方 Distroless README 的为何选择 Distroless 镜像? 章节。

安装 Distroless 镜像

按照安装步骤配置 Istio。 添加 variant 选项以使用 Distroless 镜像

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

如果您只对将 Distroless 镜像用于注入的代理镜像感兴趣, 您还可以使用 Proxy Config 中的 image.imageType 字段。请注意,上面的 variant 标志会自动为您设置该字段。

调试

Distroless 镜像缺少所有调试工具(包括 Shell!)。 虽然对安全性有好处,但这限制了使用 kubectl exec 对代理容器进行临时调试的能力。

幸运的是,临时容器 可以在此处提供帮助。 kubectl debug 可以将临时容器附加到 Pod。 通过使用带有额外工具的镜像,我们可以像以前一样进行调试:

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

这会使用 istio/base 部署一个新的临时容器。 这与 Distroless Istio 镜像中使用的基础镜像相同,并且包含各种可用于调试 Istio 的工具。 但是,任何镜像都可以起作用。 该容器还被附加到 Sidecar 代理 (--target istio-proxy) 的进程命名空间和 Pod 的网络命名空间。