加固 Docker 容器镜像
Istio 的默认镜像基于 ubuntu
添加了一些额外的工具。 也可以使用基于 Distroless 镜像的替代镜像。
使用 Distroless 时,Distroless 镜像已经不再包含非必需的可执行文件和库。
- 减少了攻击面。尽可能少的漏洞。
- 镜像更小了,且启动更快。
请参考官方 Distroless README 的为何选择 Distroless 镜像? 章节。
安装 Distroless 镜像
按照安装步骤配置 Istio。 添加 variant
选项以使用 Distroless 镜像 。
$ istioctl install --set values.global.variant=distroless
如果您只对将 Distroless 镜像用于注入的代理镜像感兴趣, 您还可以使用 Proxy Config 中的 image.imageType
字段。请注意,上面的 variant
标志会自动为您设置该字段。
调试
Distroless 镜像缺少所有调试工具(包括 Shell!)。 虽然对安全性有好处,但这限制了使用 kubectl exec
对代理容器进行临时调试的能力。
幸运的是,临时容器 可以在此处提供帮助。 kubectl debug
可以将临时容器附加到 Pod。 通过使用带有额外工具的镜像,我们可以像以前一样进行调试:
$ 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
部署一个新的临时容器。 这与 Distroless Istio 镜像中使用的基础镜像相同,并且包含各种可用于调试 Istio 的工具。 但是,任何镜像都可以起作用。 该容器还被附加到 Sidecar 代理 (--target istio-proxy
) 的进程命名空间和 Pod 的网络命名空间。