注册表中存在容器映像,但pod显示“ ErrImagePull”

时间:2018-07-30 12:52:44

标签: kubernetes ibm-cloud

我正在尝试将映像部署到IBM Cloud kubernetes实例中。

首先,我创建并推送了一张图片...

$ ic cr images
Listing images...

REPOSITORY                                    NAMESPACE     TAG      DIGEST         CREATED          SIZE     VULNERABILITY STATUS   
registry.ng.bluemix.net/my_namespace/my_app   my_namespace  latest   123456789012   56 minutes ago   264 MB   Vulnerable   

OK

然后...

$ ic cs cluster-config my_cluster
$ export KUBECONFIG=/Users/me/.bluemix/plugins/container-service/clusters/my_cluster/kube-config-mil01-my_cluster.yml

$ kubectl run my_app --image=registry.ng.bluemix.net/my_namespace/my_app \
          --port=8080 --generator=run/v1
replicationcontroller/my_app created

然后...

$ kubectl get pods
NAME          READY     STATUS         RESTARTS   AGE
my_app-zvqwq  0/1       ErrImagePull   0          38s

尽管我的地区是us-south ...

$ ic target

API endpoint:      https://api.ng.bluemix.net   
Region:            us-south   
User:              me@email.com   

...有趣的是,集群是在米兰创建的...

$ ic cs clusters
OK
Name          ID               State    Created          Workers   Location   Version   
my_cluster    xxxxxxxxxxxxxx   normal   55 minutes ago   1         mil01      1.9.9_1520 

更新感谢Bloodysock,这里提供了更多调试信息:

  

无法提取图像“ registry.ng.bluemix.net/my_namespace/my_app”:rpc错误:代码=未知desc =来自守护程序的错误响应:获取https://registry.ng.bluemix.net/v2/my_namespace/my_app/manifests/latest:未经授权:需要认证

但是,在docs中,我看不到如何为IBM Container Registry设置身份验证。

1 个答案:

答案 0 :(得分:3)

消息unauthorized: authentication required提示您的Pod没有用于美国南部(ng)注册中心的有效ImagePullSecret。由于您的集群是在米兰创建的,因此,IKS在创建集群时安装的秘密很可能是针对欧盟中央(eu-de)注册中心的,而不是美国南方的。

如果您能够查看群集中的机密,则可以通过运行kubectl get secret bluemix-default-secret-regional -o yaml | grep .dockercfg: | awk '{print $2}' | base64 --decode来检查自动安装的ImagePullSecret的内容。此命令获取称为bluemix-default-secret-regional的密钥,提取.dockercfg字段,然后解码base64编码的密钥值。

您可以创建其他ImagePullSecrets并将其添加到默认的ServiceAccount中,以便群集自动使用它们。有关说明,请参见here

顺便说一句,如果您的ic cs插件针对IKS的欧盟中部地区,则可能是在米兰创建了集群。您可以使用ic cs region查看正在使用的IKS区域,并使用ic cs region-set进行更改。