containerd2.x配置Harbor私有倉庫實(shí)踐
containerd 2.x 配置 Harbor 私有倉庫,推薦兩種方式:
方式一(推薦):certs.d方式(containerd 1.5+ / 2.x 推薦)
這種方式不用改 config.toml,更干凈。
假設(shè) Harbor 地址:
192.168.30.221
1. 創(chuàng)建目錄
sudo mkdir -p /etc/containerd/certs.d/192.168.30.221
2. 創(chuàng)建hosts.toml
sudo vi /etc/containerd/certs.d/192.168.30.221/hosts.toml
內(nèi)容:
如果是 HTTP(內(nèi)網(wǎng)常用)
server = "http://192.168.30.221" [host."http://192.168.30.221"] capabilities = ["pull", "resolve", "push"] skip_verify = true
排錯
出現(xiàn)錯誤
HTTP/1.1 308 Permanent Redirect
Location: https://10.2.2.240:443/v2/
說明 Harbor 強(qiáng)制 HTTP 跳轉(zhuǎn) HTTPS,不是純 HTTP,需要將 hosts.toml 改為
server = "https://192.168.30.221" [host."https://192.168.30.221"] capabilities = ["pull", "resolve", "push"] skip_verify = true
最后現(xiàn)象
root@master:/etc/containerd# sudo ctr images pull \ --hosts-dir /etc/containerd/certs.d \ --user admin:Aa12345 \ 192.168.30.221/library/mysql:latest 192.168.30.221/library/mysql:latest saved └──manifest (88b1423f0c31) complete |++++++++++++++++++++++++++++++++++++++| ├──config (2c5440daffa8) complete |++++++++++++++++++++++++++++++++++++++| ├──layer (4ea0fa0ace0c) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (9effc86d91a3) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (500d7b2546c4) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (fc5138e88017) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (b534c7c08c95) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (5525b1bd2d5d) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (fc3e1c37f699) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (a1bcea418c7c) extracted |++++++++++++++++++++++++++++++++++++++| ├──layer (30e3c68e682c) extracted |++++++++++++++++++++++++++++++++++++++| └──layer (50786f9db9d5) extracted |++++++++++++++++++++++++++++++++++++++| application/vnd.docker.distribution.manifest.v2+json sha256:88b1423f0c3138fc488828126472b669fb6e442c2f9080701e18478a3b3a8171 Completed pull from OCI Registry (192.168.30.221/library/mysql:latest) elapsed: 56.4s total: 262.8 (4.7 MiB/s) root@master:/etc/containerd# sudo ctr images ls REF TYPE DIGEST SIZE PLATFORMS LABELS 192.168.30.221/library/mysql:latest application/vnd.docker.distribution.manifest.v2+json sha256:88b1423f0c3138fc488828126472b669fb6e442c2f9080701e18478a3b3a8171 262.8 MiB linux/amd64 -
如果是 HTTPS + 自簽名證書
server = "https://192.168.30.221" [host."https://192.168.30.221"] capabilities = ["pull", "resolve", "push"] ca = "/etc/containerd/certs.d/192.168.30.221/ca.crt" skip_verify = true
然后把 Harbor CA 放進(jìn)去:
sudo cp ca.crt /etc/containerd/certs.d/192.168.30.221/
3. 重啟 containerd
sudo systemctl restart containerd
4. 拉取測試
sudo ctr images pull \ --user admin:Aa12345 \ 192.168.30.221/library/mysql:latest
方式二:修改config.toml
先生成默認(rèn)配置(如果沒有):
sudo containerd config default > /etc/containerd/config.toml
編輯:
sudo vi /etc/containerd/config.toml
找到:
[plugins."io.containerd.grpc.v1.cri".registry]
改成:
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.30.221"]
endpoint = ["http://192.168.30.221"]
保存后:
sudo systemctl restart containerd
驗(yàn)證配置是否生效
查看:
sudo ctr version
測試:
sudo ctr images pull --user admin:Aa12345 192.168.30.221/library/mysql:latest
成功會看到:
unpacking linux/amd64 sha256:... done
推薦你用哪個?
你的環(huán)境是:
- Harbor 用 IP:
192.168.30.221 - 證書報 IP SAN 錯誤
- 內(nèi)網(wǎng)
建議直接用 方式一(certs.d + http):
server = "http://192.168.30.221"
最快,最穩(wěn),不折騰證書。
kubelet
- ctr:靠 --hosts-dir 成功
- kubelet:直接走 HTTPS → x509 報錯
在config.toml里加
- 方案 1(推薦:最簡單
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.30.221".tls]
insecure_skip_verify = true
- 方案 2(mirror 方式)
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.30.221"] endpoint = ["https://192.168.30.221"]
你這個環(huán)境必須注意: 你 Harbor 是 HTTP -> 308 -> HTTPS 所以 必須走 HTTPS,但跳過證書驗(yàn)證
- 修改后必須執(zhí)行
sudo systemctl restart containerd sudo systemctl restart kubelet
- 驗(yàn)證 kubelet 是否生效
crictl pull 192.168.30.221/library/mysql:latest # 或者 kubectl run test --image=192.168.30.221/library/mysql:latest
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
理解k8s控制器DaemonSet創(chuàng)建及使用場景
這篇文章主要為大家介紹了k8s控制器DaemonSet創(chuàng)建及使用場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪問控制
這篇文章主要為大家介紹了Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪問控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Kubernetes調(diào)度管理優(yōu)先級和搶占機(jī)制詳解
這篇文章主要為大家介紹了Kubernetes調(diào)度管理優(yōu)先級和搶占機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
IoT?邊緣集群Kubernetes?Events告警通知進(jìn)一步配置詳解
這篇文章主要為大家介紹了IoT?邊緣集群Kubernetes?Events告警通知進(jìn)一步配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Kubernetes?安裝flannel組件的過程(本地?kube-flannel.yml?文件)
文章介紹了如何在無法直接訪問raw.githubusercontent.com的情況下,通過科學(xué)上網(wǎng)或下載kube-flannel.yml文件源碼來部署Flannel網(wǎng)絡(luò)插件的方法,感興趣的朋友一起看看吧2025-03-03

