Openshift Origin 运行-app against insecure registry yields stuck pod with "Error while pulling image"

Openshift Origin run-app against insecure registry yields stuck pod with "Error while pulling image"

我在 Docker 容器中使用 Openshift Origin,并使用以下方法从 Docker 注册表(同一 RHEL 主机 VM 上的容器)中提取图像:

oc new-app --insecure-registry=true --docker-image=mtl-vm375:5000/jenkins:1.0

那个命令当时似乎工作正常。但是,pod 保持为 "ContainerCreating" 并且 kubectl 的结果 describe pods:

OPENSHIFT_DEPLOYMENT_NAME:        jenkins-1
OPENSHIFT_DEPLOYMENT_NAMESPACE:   default
 Conditions:
  Type          Status
  Ready         False
Volumes:
  deployer-token-3bls9:
Type:       Secret (a volume populated by a Secret)
  SecretName: deployer-token-3bls9
Events:
  FirstSeen     LastSeen        Count   From                    SubobjectPath   Type            Reason          Message
  ---------     --------        -----   ----                    -------------   --------        ------          -------
  2h            4m              33      {kubelet mtl-vm375}                     Warning         FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "Error while pulling image: Get https://index.docker.io/v1/repositories/openshift/origin-pod/images: dial tcp 10.230.22.20:443: connection refused"

2h    6s      652     {kubelet mtl-vm375}             Warning FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"openshift/origin-pod:v1.1.5\""

有一个错误表明它正在尝试使用 https,我猜(但不确定)是错误,因为我还没有正确设置 https 证书:

根据 Whosebug 上的其他建议,我已将这些环境变量添加到 Origin 图像中: KUBE_ENABLE_INSECURE_REGISTRY=真 EXTRA_DOCKER_OPTS=--不安全的注册表

我也有类似的结果: KUBE_ENABLE_INSECURE_REGISTRY=真\ EXTRA_DOCKER_OPTS="--不安全注册表 10.230.22.20"

版本信息:

[root@mtl-vm375 origin]# oc version 
oc v1.1.5-52-gd58f979 kubernetes v1.2.0-36-g4a3f9c5

[root@mtl-vm375 ~]# docker version
Client:
 Version:      1.8.2-el7.centos
 API version:  1.20
 Package Version: docker-1.8.2-10.el7.centos.x86_64
 Go version:   go1.4.2
 Git commit:   a01dc02/1.8.2
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.2-el7.centos
 API version:  1.20
 Package Version:
 Go version:   go1.4.2
Git commit:   a01dc02/1.8.2
 Built:
 OS/Arch:      linux/amd64

提前致谢,

约翰

这是我为使用来自另一个 Docker 注册表(甚至在我的集群之外)的图像而执行的步骤。

我的注册表:

https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000

我将项目(在 OS 中)创建到我想要推送的位置。

$ oc new-project test

我在项目中,我将创建一个秘密,以便我的 openshift 能够访问我的注册表:

$ oc secrets new-dockercfg mysecret --docker-server=https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000 --docker-username=testuser --docker-password=testpassword --docker-email=any@mail.com

向服务帐户添加密码

$ oc secrets add serviceaccount/default secrets/mysecret --for=pull    
$ oc secrets add serviceaccount/builder secrets/mysecret

导入图像流

$ oc import-image --insecure ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000/test/name-of-image:1 --confirm

现在您可以创建一个

oc new-app --insecure-registry <image-stream-name>:tag

更好的方法是将图像推送到 OpenShift 注册表。无需创建秘密并执行 oc import。 您可以公开注册表(安全注册表),以便您可以从集群外部访问注册表以推送图像。

如果您在通过重新发布(重新导入)更新导入 :tag 后遇到 Openshift Builder 问题

  • 您的 OpenShift 构建似乎没有使用您通过 oc import-image 发布的最新图像标签..

    1. 打开"Builder-Configuration of your app",
    2. 转到第 "Image Configuration"
    3. 部分
    4. 并将 "Build From" 值从 "Docker Image Repository" 切换为 "Image Stream Tag"
    5. 和select那里的命名空间、图像流和标签。

生成器配置概述:

  • 将新值设置为 "Docker Image Repository" 没有帮助。
  • 在 "Always pull the build..." 处设置复选框也没有帮助。

改变这个...

到这个...