我正在尝试将映像部署到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设置身份验证。
答案 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
进行更改。