containerd-主機(jī)目錄模式匹配倉(cāng)庫(kù)地址與認(rèn)證信息
注:Containerd >= v1.5.0 必須使用主機(jī)目錄模式 (傳統(tǒng)config.toml直配模式已棄用)
生產(chǎn)環(huán)境必須啟用TLS加密認(rèn)證, 避免 skip_verify = true 降低安全性
匹配機(jī)制?
containerd 通過(guò) ?域名路徑映射? 動(dòng)態(tài)匹配鏡像倉(cāng)庫(kù)地址:
-
?域名解析規(guī)則?:
- 拉取鏡像時(shí),containerd 解析鏡像域名(如
docker.io),自動(dòng)匹配/etc/containerd/certs.d/下的同名目錄。 - ?匹配路徑?:
鏡像域名 → /etc/containerd/certs.d/<域名>/hosts.toml。 - ?示例?:
nginx:latest(默認(rèn)docker.io/library/nginx)→ 匹配/etc/containerd/certs.d/docker.io/hosts.toml。harbor.example.com/app:v1→ 匹配/etc/containerd/certs.d/harbor.example.com/hosts.toml。
- 拉取鏡像時(shí),containerd 解析鏡像域名(如
-
?目錄命名要求?:
?鏡像地址? ?配置文件路徑? docker.io/etc/containerd/certs.d/docker.io/hosts.toml192.168.1.100:5000/etc/containerd/certs.d/192.168.1.100:5000/hosts.toml?關(guān)鍵點(diǎn)?:目錄名需與鏡像地址的 ?完整域名或 IP + 端口? 嚴(yán)格一致(含端口號(hào))。
?? ?配置步驟?
1. ?啟用主機(jī)目錄模式?
編輯 /etc/containerd/config.toml,添加:
[plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d" # 指定配置根目錄 重啟服務(wù)生效:
systemctl restart containerd
2. ?創(chuàng)建倉(cāng)庫(kù)配置目錄與文件?
以私有倉(cāng)庫(kù) harbor.example.com 為例:
# 創(chuàng)建目錄(目錄名嚴(yán)格匹配倉(cāng)庫(kù)地址) mkdir -p /etc/containerd/certs.d/harbor.example.com # 創(chuàng)建配置文件 touch /etc/containerd/certs.d/harbor.example.com/hosts.toml
3. ?配置 hosts.toml 文件?
-
?基礎(chǔ)模板(HTTPS 倉(cāng)庫(kù))?:
server = "https://harbor.example.com" # 倉(cāng)庫(kù)主地址 [host."https://harbor.example.com"] # 端點(diǎn)聲明 capabilities = ["pull", "push", "resolve"] # 操作權(quán)限 -
?增強(qiáng)安全配置(TLS 證書(shū))?:
[host."https://harbor.example.com"] capabilities = ["pull", "push"] ca = "/path/to/ca.crt" # CA 證書(shū)路徑 client = [ # 客戶(hù)端證書(shū)(可選) ["/path/to/client.crt", "/path/to/client.key"] ] -
?HTTP 非安全倉(cāng)庫(kù)?:
[host."http://192.168.1.100:5000"] # 顯式聲明 http 協(xié)議 capabilities = ["pull", "push"] skip_verify = true # 跳過(guò) TLS 驗(yàn)證(生產(chǎn)環(huán)境慎用)
4. 驗(yàn)證配置效果
#使用 crictl 測(cè)試?yán)$R像
crictl pull harbor.example.cn/app:v1
# 查看containerd 日志排查錯(cuò)誤
journalctl -u containerd | grep -i "failed to resolved"
關(guān)鍵排查點(diǎn):
- 目錄名是否與鏡像余名 嚴(yán)格一致(區(qū)分大小寫(xiě))
- hosts.toml 中 server 地址是否包含協(xié)議頭部 (https:// 或 http://)
- TLS證書(shū)文件權(quán)限是否可讀 (建議 chmod 644 *.crt)
?? ?注意事項(xiàng)?
- ?協(xié)議聲明強(qiáng)制要求?:
- HTTP 倉(cāng)庫(kù)必須在 URL 中顯式指定
http://,否則默認(rèn)嘗試 HTTPS。
- HTTP 倉(cāng)庫(kù)必須在 URL 中顯式指定
- ?調(diào)試技巧?:
- 拉取失敗時(shí),檢查日志:
journalctl -u containerd --since "5 min ago",排查 TLS/認(rèn)證錯(cuò)誤。
- 拉取失敗時(shí),檢查日志:
- ?多倉(cāng)庫(kù)優(yōu)先級(jí)?:
- containerd 優(yōu)先匹配目錄路徑,未匹配時(shí)回退默認(rèn)行為(如直連 Docker Hub)。
? ?驗(yàn)證配置?
bashCopy Code
# 拉取鏡像測(cè)試 ctr image pull harbor.example.com/library/nginx:latest # 查看鏡像 ctr images ls | grep nginx ?成功標(biāo)志?:鏡像拉取無(wú)報(bào)錯(cuò),且出現(xiàn)在本地鏡像列表613。
?生產(chǎn)建議?:
- 優(yōu)先使用 ?HTTPS + 證書(shū)認(rèn)證? 確保傳輸安全;
- HTTP 僅限內(nèi)網(wǎng)測(cè)試環(huán)境,并設(shè)置
skip_verify = true明確忽略 TLS
時(shí)間是個(gè)偉大的作者,必將給出完美的答案。

浙公網(wǎng)安備 33010602011771號(hào)