kubernetes 无法拉取镜像 docker 私有注册表

时间:2021-03-28 03:02:45

标签: docker ssl kubernetes

我尝试在 kubernetes 中部署“部署”,这是从私有注册表中拉取 docker 映像(我不知道是谁进行了此设置),但是在通过 kubernetes 进行“docker pull 映像”期间,我收到以下错误

node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  85s                default-scheduler  Successfully assigned default/trusted-enc-assettag1-deployment-8467b74958-6fbp7 to k8s-node
  Normal   BackOff    24s (x2 over 61s)  kubelet, k8s-node  Back-off pulling image "10.105.168.81:5000/simplehttpserverenc:enc_v1"
  Warning  Failed     24s (x2 over 61s)  kubelet, k8s-node  Error: ImagePullBackOff
  Normal   Pulling    12s (x3 over 82s)  kubelet, k8s-node  Pulling image "10.105.168.81:5000/simplehttpserverenc:enc_v1"
  Warning  Failed     0s (x3 over 62s)   kubelet, k8s-node  Failed to pull image "10.105.168.81:5000/simplehttpserverenc:enc_v1": rpc error: code = Unknown desc = Error response from daemon: Get https://10.105.168.81:5000/v2/: net/http: TLS handshake timeout
  Warning  Failed     0s (x3 over 62s)   kubelet, k8s-node  Error: ErrImagePull
[root@k8s-master ~]# docker pull 10.105.168.81:5000/simplehttpserverenc:enc_v1

ImagePullBackOff 和 net/http:TLS 握手超时错误。

最初在 docker pull 中也观察到了这个“net/http: TLS 握手超时”错误。我提到了一些答案和

<块引用>

配置的证书(/etc/docker/certs.d//ca.crt)和 代理(/etc/systemd/system/docker.service.d/proxy.conf)

之后可以从私有镜像执行 docker pull。

[root@k8s-master ~]# docker pull 10.105.168.81:5000/simplehttpserverenc:enc_v1
enc_v1: Pulling from simplehttpserverenc
54fec2fa59d0: Pull complete
cd3f35d84cab: Pull complete
a0afc8e92ef0: Pull complete
9691f23efdb7: Pull complete
6512e60b314b: Pull complete
a8ac6632d329: Pull complete
68f4c4e0aa8c: Pull complete
Digest: sha256:0358708cd11e96f6cf6f22b29d46a8eec50d7107597b866e1616a73a198fe797
Status: Downloaded newer image for 10.105.168.81:5000/simplehttpserverenc:enc_v1
10.105.168.81:5000/simplehttpserverenc:enc_v1
[root@k8s-master ~]#

但仍然无法通过 kubernetes 执行此 docker pull。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您在 k8s 中使用 docker 作为容器引擎,AFAIK 与 Understand the configuration 相同。因为镜像拉取是由容器引擎进行的,它依赖于每个证书的专有配置。在 k8s 中的工作节点上拉相同的图像怎么样?有没有可能拉一个没有错误?

答案 1 :(得分:1)

因为您的 dockerconfigjson 工作不正常。试试这个方法:

kubectl create secret docker-registry regcred --docker-server=10.105.168.81:5000 --docker-username=<your-name> --docker-password=<your-pword>

在 Kubernetes 清单中:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: 10.105.168.81:5000/simplehttpserverenc:enc_v1
  imagePullSecrets:
  - name: regcred

我已经遇到过很多次了,当时我忘记配置这些秘密了。此外,如果您有任何其他命名空间,则必须为这些命名空间中的每一个分别生成秘密,将 -n <your-ns> 传递到 kubectl create secret

以上

编辑:因为你不能从工作节点拉取图像。

  1. 确保将 docker-registry ca.crt 复制到 /etc/docker/certs.d/ca.crt

然后尝试docker pull