加強 Docker 容器映像檔
Istio 的預設映像檔基於 ubuntu
,並新增了一些額外的工具。也提供基於無容器映像檔的替代映像檔。
這些映像檔會移除所有非必要的執行檔和程式庫,提供以下優點
- 由於它們包含最小的漏洞集,因此減少了攻擊面。
- 映像檔較小,可以加快啟動速度。
另請參閱官方無容器 README 中的為什麼我應該使用無容器映像檔?章節。
安裝無容器映像檔
按照安裝步驟設定 Istio。新增 variant
選項以使用無容器映像檔。
$ istioctl install --set values.global.variant=distroless
如果您只對使用注入 Proxy 映像檔的無容器映像檔感興趣,您也可以使用 Proxy 設定中的 image.imageType
欄位。請注意,上述 variant
標誌會自動為您設定此值。
偵錯
無容器映像檔缺少所有偵錯工具(包括 Shell!)。雖然這對安全性很有幫助,但這限制了使用 kubectl exec
進入 Proxy 容器進行臨時偵錯的能力。
幸運的是,臨時容器(Ephemeral Containers)可以在這裡提供幫助。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
部署一個新的臨時容器。這與非精簡版(non-distroless) Istio 映像中使用的基礎映像相同,其中包含各種用於除錯 Istio 的實用工具。但是,任何映像都可以使用。此容器還會附加到 Sidecar 代理的進程命名空間 (--target istio-proxy
) 以及 Pod 的網路命名空間。