You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CKAD实验中Kubernetes无法从本地非安全镜像仓库拉取镜像求助

解决Kubernetes从非安全本地镜像仓库拉取镜像失败的问题

问题场景

在Linux基金会CKAD认证课程(LFD259)的Lab 3.2实验中,搭建了仅支持HTTP的本地非安全镜像仓库,尝试让Kubernetes拉取仓库中的simpleapp镜像时失败。

创建Deployment前,组件状态正常:

student@master:~$ curl 10.97.82.186:5000/v2/_catalog
{"repositories":["simpleapp"]}
student@master:~$ k get deploy
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
nginx      1/1     1            1           118m
registry   1/1     1            1           118m
student@master:~$ k get pod
NAME                       READY   STATUS    RESTARTS      AGE
nginx-6488f757bc-cf4q4     1/1     Running   1 (51m ago)   118m
registry-d4cf9fd7d-qj6tn   1/1     Running   1 (51m ago)   118m
student@master:~$ sudo podman images
REPOSITORY                   TAG         IMAGE ID      CREATED      SIZE
localhost/simpleapp          latest      bb19ffc6050a  2 hours ago  943 MB
10.97.82.186:5000/simpleapp  latest      bb19ffc6050a  2 hours ago  943 MB
docker.io/library/python     3           e285995a3494  8 days ago   943 MB
10.97.82.186:5000/tagtest    latest      9c6f07244728  6 weeks ago  5.83 MB
student@master:~$ echo $repo
10.97.82.186:5000

创建Deployment后出现镜像拉取失败,错误核心为:

student@master:~$ k describe pod try1-5f97db4fb8-j9csw |grep Failed
  Warning  Failed     11s                kubelet            Failed to pull image "10.97.82.186:5000/simpleapp": rpc error: code = Unknown desc = failed to pull and unpack image "10.97.82.186:5000/simpleapp:latest": failed to resolve reference "10.97.82.186:5000/simpleapp:latest": failed to do request: Head https://10.97.82.186:5000/v2/simpleapp/manifests/latest: http: server gave HTTP response to HTTPS client
  Warning  Failed     11s                kubelet            Error: ErrImagePull
  Warning  Failed     10s (x2 over 11s)  kubelet            Error: ImagePullBackOff

错误显示Kubernetes使用HTTPS请求访问仅支持HTTP的镜像仓库,导致拉取失败。

当前配置问题

已修改的/etc/containers/registries.conf.d/registry.conf仅对Podman生效,而Kubernetes使用的containerd并未正确配置允许该非安全仓库的HTTP访问。现有containerd配置仅添加了镜像源,但未配置跳过TLS验证或允许HTTP访问。

student@master:~$ diff -U3 /etc/containerd/config.toml /etc/containerd/config.toml.orig
--- /etc/containerd/config.toml 2022-09-21 21:22:37.032171446 +0000
+++ /etc/containerd/config.toml.orig    2022-09-22 03:35:37.032007211 +0000
@@ -152,9 +152,6 @@

       [plugins."io.containerd.grpc.v1.cri".registry.mirrors]

-      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."*"]
-        endpoint = ["10.97.82.186:5000"]
-
     [plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
       tls_cert_file = ""
       tls_key_file = ""

解决方案

1. 正确配置containerd允许非安全仓库访问

编辑/etc/containerd/config.toml,在[plugins."io.containerd.grpc.v1.cri".registry]区块下添加针对目标仓库的TLS配置:

[plugins."io.containerd.grpc.v1.cri".registry]
  # 保留原有mirrors配置,添加以下configs部分
  [plugins."io.containerd.grpc.v1.cri".registry.configs]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."10.97.82.186:5000".tls]
      insecure_skip_verify = true  # 跳过TLS验证,适用于HTTP或自签名证书仓库
      # 若仓库完全使用HTTP,可替换为:plain_http = true

2. 重启containerd和kubelet服务

sudo systemctl restart containerd
sudo systemctl restart kubelet

3. 重新创建Deployment

删除之前失败的Deployment,重新创建以应用新配置:

k delete deployment try1
k create deployment try1 --image=$repo/simpleapp

4. 验证Pod状态

等待片刻后检查Pod状态,确认镜像拉取成功:

k get pods

内容的提问来源于stack exchange,提问作者mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:26:11