【问题标题】:OpenShift docker registry can't pull an image from registry-1.docker.ioOpenShift docker registry 无法从 registry-1.docker.io 拉取镜像
【发布时间】:2019-02-14 02:45:22
【问题描述】:

我正在使用 OpenShift 版本:

oc v3.10.0+dd10d17
kubernetes v1.10.0+b81c8f8
features: Basic-Auth GSSAPI Kerberos SPNEGO

Server https://127.0.0.1:8443
openshift v3.10.0+e3465d0-44
kubernetes v1.10.0+b81c8f8

我的 docker 版本是:

Client:
  Version:           18.06.1-ce
  API version:       1.38
  Go version:        go1.10.3
  Git commit:        e68fc7a
  Built:             Tue Aug 21 17:24:56 2018
  OS/Arch:           linux/amd64
  Experimental:      false

Server:
  Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:23:21 2018
  OS/Arch:          linux/amd64
  Experimental:     false

要在我的计算机上启动本地 OpenShift 集群,我按照以下步骤操作:https://github.com/openshift/origin/blob/master/docs/cluster_up_down.md#linux

我想部署一个 Redis 实例,由于没有默认 Redis 模板(有 20 个默认模板),我将其作为 JSON 模板从 URL 加载:https://github.com/openshift/origin/blob/master/examples/db-templates/redis-ephemeral-template.json

从该模板创建应用时,Redis pod 无法启动并发出以下错误信号:

无法提取图像“172.30.1.1:5000/openshift/redis@sha256:0cf7163e0589baab918b1d70cd1ed4c711e2430c618c672b9121f1fd35cf562a”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应:未知:无法从 docker.io/redis/提取清单-32-centos7:latest: 获取https://registry-1.docker.io/v2/: net/http: 请求在等待连接时取消(Client.Timeout 在等待标头时超出)

当我通过提供 docker 映像 openshiftroadshow/parksmap-katacoda:1.0.0 来部署应用程序时 - 它已被成功拉取并部署。

我已经登录到在 172.30.1.1:5000 发布的容器,该容器托管了 OpenShift 的 docker 注册表,并且在解析 registry-1.docker.io 域时显然存在问题:

bash-4.2$ nslookup registry-1.docker.io
;; connection timed out; no servers could be reached

如果我指定8.8.8.8 DNS,一切都很好:

bash-4.2$ nslookup registry-1.docker.io 8.8.8.8
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   registry-1.docker.io
Address: 52.22.67.152
....

所以我查看了/etc/resolv.conf 文件,这是它的内容:

bash-4.2$ cat /etc/resolv.conf 
nameserver 172.30.0.2
search default.svc.cluster.local svc.cluster.local cluster.local home
options ndots:5

我的问题是:

  1. OpenShift 是否使用了一些内部 DNS 解决方案?如果是这样,我应该调整它的配置吗?
  2. 谁(以及在哪里)负责配置resolv.conf 文件的内容?
  3. 我使用的 Redis 模板有什么问题吗?
  4. 逐个添加缺失的模板是否是一种好习惯,是否可以一次添加大量缺失的有用模板?
  5. 我应该怎么做才能使我的示例正常工作?

非常感谢您的帮助和时间!

【问题讨论】:

  • 该模板默认需要redis 图像存在于openshift 项目中。你是把它导入到那个项目中,还是你自己的并覆盖了它期望从中提取的名称空间?
  • @GrahamDumpleton,你怎么知道模板期望redis 图像存在于openshift 项目中?我没有更改模板。此外,我没有在内部 docker 注册表中添加或删除任何图像。我使用带有 ODK 3.10 的 minishift 测试了相同的场景,并且在内部 docker 注册表中找不到图像后,该图像是从 docker.io 注册表中提取的。如果找不到图像,内部 docker 注册表是否应该访问外部 docker 注册表(如 docker.io),或者我是否负责将必要的图像推送到内部 docker 注册表?
  • 哦,我使用的是 Ubuntu 16.04。 ODK 3.10 是否应该毫无问题地在其上运行?

标签: docker redis openshift docker-registry openshift-origin


【解决方案1】:

行的模板:

有:

    {
        "description": "The OpenShift Namespace where the ImageStream resides.",
        "displayName": "Namespace",
        "name": "NAMESPACE",
        "value": "openshift"
    },

并在以下位置使用NAMESPACE 值:

与:

                        "from": {
                            "kind": "ImageStreamTag",
                            "name": "redis:${REDIS_VERSION}",
                            "namespace": "${NAMESPACE}"
                        },

因此,默认情况下,模板期望 redis 图像的 ImageStream 位于 openshift 项目中。这个模板本身通常通过以下方式加载到openshift项目中:

在创建时已加载到openshift 集群中。

因此检查redis 图像的图像流定义是否实际上已加载到openshift 项目中,使用:

oc get is/redis -n openshift --as system:admin

或:

oc login -u system:admin
oc get is/redis -n openshift

这取决于oc cluster up 的设置方式。默认情况下,第一个可能不起作用。

因此首先确定redis 的图像流是否存在。

【讨论】:

  • 我检查了redis 图像流是在openshift 项目中定义的,在调用oc describe is/redis -n openshift 之后我可以看到它链接到docker.io/centos/redis-32-centos7@sha256:0cf7163e0589baab918b1d70cd1ed4c711e2430c618c672b9121f1fd35cf562a。部署配置可以看到映像流,因为部署会立即启动,但由于我的 docker 映像中没有 redis 映像,因此 openshift 会尝试从 docker.io 中提取它,这就是我遇到问题的地方跨度>
  • 这显然与我的 DNS 有关。我将/etc/resolv.conf 更改为nameserver 8.8.8.8 + nameserver 8.8.4.4 + search home,现在通过图像流从docker.io 中提取图像。在更改之前,我的 DNS 设置为 nameserver 127.0.1.1 + search home,因为我启用了 dnsmasq。你知道从 OpenShift 管理的 docker 容器中使用 DNS 的典型方法是什么吗?
猜你喜欢
  • 2021-06-02
  • 2021-03-13
  • 2019-08-23
  • 2023-02-01
  • 2023-02-10
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
相关资源
最近更新 更多