当前位置: 首页 > 知识库问答 >
问题:

无法通过从外部私有注册表中提取图像来启动minikube中的pod

孟英锐
2023-03-14

我的笔记本电脑上安装了ubuntu。

我启动了一个私有docker注册表(支持ssl的htpasswd安全),并将其添加到覆盖网络上(因此可以从其他主机/虚拟机访问)

以下是代码(docker-compose.yaml):

version: "3"

services:
 registry:
  restart: always
  image: registry:2
  ports:
    - 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
  volumes:
    - /certs:/certs
    - ~/caas_rd/workspace/ci_cd_pipeline/registry_setup:/auth
  networks:
    - overlaynetwork
networks:
  overlaynetwork:

因此,我的注册表正在以下链接中运行(通过dns,我可以在浏览器中进行验证):https://home-thinkpad-t420s:5000/v2/_catalog

现在我在笔记本电脑上安装了“Minikube”。

我在minikube虚拟机上创建了一个文件夹“/etc/docker/certs.d”

https://docs.docker.com/engine/security/certificates/#understanding-配置

我还修改了 /etc/hosts

并通过:sudo systemctl restartdocker.service重启mini kube vm上的docker服务

在此之后,我可以通过“docker登录”在minikube虚拟机上拉取图像

然后我尝试创建一个秘密(在我的笔记本电脑上使用kubectl create-f),定义如下:

apiVersion: "v1"
kind: "Secret"
metadata:
  name: "ssl-proxy-secret"
  namespace: "default"
data:
 proxycert: "LS0..."
 proxykey: "LS0t..."
 htpasswd: "YWRt..."

并创建了一个pod(在我的笔记本电脑上使用kubectl create-f),定义如下:

apiVersion: v1
kind: Pod
metadata:
  name: private-jenkins
spec:
  containers:
  - name: private-jenkins-container
    image: home-thinkpad-t420s:5000/my-jenkins
    volumeMounts:
    - name: secrets
      mountPath: /etc/secrets
  volumes:
  - name: secrets
    secret:
       secretName: ssl-proxy-secret

但是当我尝试运行这个pod时,它会抛出错误:

未能拉取图像“home-thinkpad-t420s:5000/my jenkins”:rpc错误:代码=2描述=错误:图像my jenkins not found同步pod时出错,跳过:无法使用ErrImagePull为“private jenkins container”启动“StartContainer”:“rpc错误:代码=2描述=错误:图像my jenkins not found”

如果我能够通过curl成功地在minikube虚拟机中提取图像

共有2个答案

巫新知
2023-03-14

你能把那些双引号从秘密的凭证中删除吗。yml文件并尝试再次旋转吊舱?

章翔宇
2023-03-14

您需要创建一个分离的kubernetes注册表密码。可以使用此命令:

kubectl create secret docker-registry <secret-name> \
--docker-email=<your-email> --docker-username=<registry-user> \
--docker-password=<registry-password> --docker-server=<registry-server-domain>

之后,您可以更新pod配置,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: private-jenkins
spec:
  containers:
  - name: private-jenkins-container
    image: home-thinkpad-t420s:5000/my-jenkins
  imagePullSecrets:
    - name: <secret-name>

参考:链接

希望有帮助!

 类似资料:
  • 问题内容: 我已经建立了一个4节点kubernetes集群,该集群运行都在CoreOS上运行的多容器Pod。这些图像来自公共和私人存储库。现在,我必须登录到每个节点,并在每次更新图像时手动下拉图像。我希望能够自动将其拉出。 我试过在每台服务器上运行docker登录并将.dockercfg文件放在/ root和/ core中 我也使用.docker / config.json完成了上述操作 我已将密

  • 我正在使用OpenShift版本: 我的docker版本是: 要在我的计算机上启动本地OpenShift群集,我执行了以下步骤:https://github.com/openshift/origin/blob/master/docs/cluster_up_down.md#linux 我想部署一个Redis实例,由于没有默认的Redis模板(有20个默认模板),我从URL将其加载为JSON模板:ht

  • 我已经用自签名证书设置了一个私有docker注册表。 crt和domain.key是使用OpenSSL生成的。 若要从远程主机进行连接, 此外,我还在工作节点中执行了docker注册表步骤中的自签名证书, 给定deployment.yaml文件的imagePullSecrets中的名称。我试图在Kubernetes集群(Calico网络)中创建一个豆荚,但它无法拉图像。 deployment.ya

  • 问题内容: 我在机器上安装了docker,并且在其中安装了docker的minikube上,所以可能我有两个在不同VM上运行的docker实例 我建立一个图像并对其进行标记,然后将其推入本地注册表,并成功将其推入,我也可以从注册表中将其拉出,也可以在运行curl以获取标签列表时得到结果,这就是我所做的 以上所有步骤均正常进行,没有任何问题。 我的问题是当我运行minikube并尝试在其中的本地注册

  • 问题内容: 我正在运行kubeadm alpha版本来设置我的kubernates集群。从kubernates,我试图提取在nexus存储库中托管的docker镜像。每当我尝试创建Pod时,每次都会给出“ ImagePullBackOff”。有人可以帮我吗? 有关详细信息,请参见https://github.com/kubernetes/kubernetes/issues/41536 吊舱定义:

  • 问题内容: 我运行了一个私有Docker注册表,我想从存储库中删除除之外的所有图像。我不想删除整个存储库,仅删除其中的一些图像。该API文档不提一个办法做到这一点,但肯定这是可能的? 问题答案: 当前,您无法将注册表API用于该任务。它仅允许您删除存储库或特定标签。 通常,删除存储库意味着删除与此仓库关联的所有标签。 删除标签意味着删除图像和标签之间的关联。 以上所有都不删除单个图像。它们留在您的