kubeadm 对接本地 Harbor 私有镜像仓库(imageRepository)
操作环境:内网 Harbor harbor.local:8443(自签 HTTPS),项目 k8s 中已推送全部组件镜像。
对接原理:kubeadm 拉取组件镜像时以 imageRepository 为前缀拼接镜像名;把它指向 Harbor 项目路径,并让 containerd 信任 Harbor 证书,即可全程走内网仓库。
详细步骤:
bash
暗色
复制
# 1. 全部节点:containerd 信任 Harbor 自签证书
mkdir -p /etc/containerd/certs.d/harbor.local:8443
cp ca.crt /etc/containerd/certs.d/harbor.local:8443/
cat > /etc/containerd/certs.d/harbor.local:8443/hosts.toml <<'EOF'
server = "https://harbor.local:8443"
[host."https://harbor.local:8443"]
capabilities = ["pull", "resolve"]
ca = "/etc/containerd/certs.d/harbor.local:8443/ca.crt"
EOF
# 确认 config.toml 已启用:
# [plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d"
systemctl restart containerd
# 2. Harbor 上准备镜像(联网端推送或离线 ctr 导入后 push)
# 命名形如 harbor.local:8443/k8s/kube-apiserver:v1.28.15
# 3. kubeadm-config.yaml 指定仓库前缀
yaml
暗色
复制
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.15
imageRepository: harbor.local:8443/k8s
networking:
podSubnet: 10.244.0.0/16
bash
暗色
复制
# 4. 预检确认镜像可拉
crictl pull harbor.local:8443/k8s/kube-apiserver:v1.28.15
kubeadm init --config=kubeadm-config.yaml
验证流程:
bash
暗色
复制
crictl images | grep harbor.local # 组件镜像全部来自 Harbor
kubectl get pods -n kube-system # Running,无 ImagePullBackOff
排错:ImagePullBackOff + x509 unknown authority → hosts.toml 未生效,确认 containerd ≥1.7 且 config_path 配置正确并重启;coredns 拉取 404 → Harbor 中 coredns 镜像路径须保留 coredns/coredns 子路径(harbor.local:8443/k8s/coredns/coredns:v1.10.1)。