Pod无法从私有Docker注册中心提取图像

时间:2019-10-29 03:41:45

标签: kubernetes

让我的吊舱从我已设置并能够进行身份验证的私有docker注册表中提取图像时,我遇到了一些麻烦(我可以进行docker login https://my.website.com/,并且无需放置即可成功登录)在我的用户名:password中)(我可以运行docker pull my.website.com:5000/human/forum并查看所有正在下载的层。)。

我使用https://github.com/bazelbuild/rules_k8s#aliasing-eg-k8s_deploy,其中将命名空间指定为"default"

在生成"HTTPS://my.website.com:5000/V2/"密码之前,请确保将regcred(小写)放在docker config文件的auth部分中。

请注意,我在下面指定了imagePullSecrets

# deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: angular-bazel-example-prod
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: angular-bazel-example-prod
    spec:
      containers:
       - name: angular-bazel-example
         image: human/forum:dev
         imagePullPolicy: Always
         ports:
         - containerPort: 8080
      imagePullSecrets:
       - name: regcred # Notice

我确保更新我的证书颁发机构证书:

cp /etc/docker/certs.d/my.website.com\:5000/ca.crt /usr/local/share/ca-certificates/my.website.registry.com/
sudo update-ca-certificates

我看到了sudo curl --user testuser:testpassword --cacert /usr/local/share/ca-certificates/my.website.registry.com/ca.crt -X GET https://mywebsite.com:5000/v2/_catalog

> {"repositories":["human/forum"]}

我看到了sudo curl --user testuser:testpassword --cacert /usr/local/share/ca-certificates/mywebsite.registry.com/ca.crt -X GET https://mywebsite.com:5000/v2/human/forum/tags/list

> {"name":"a/repository","tags":["dev"]}

必须有一种解决方法,但我不知道如何解决。

我好奇的是

kubectl describe pod my-first-pod...
...
Volumes:
  default-token-mtz9g:
    Type:        Secret

在哪里可以找到此书卷?我无法kubectl exec进入容器,因为没有一个正在运行..因为吊舱无法拉出图像。

您对我如何解决此问题有任何想法吗?

谢谢!

Slackware

1 个答案:

答案 0 :(得分:1)

创建kubernetes机密以访问自定义存储库。一种方法是手动提供服务器,用户和密码。 Documentation link

kubectl create secret docker-registry $YOUR_REGISTRY_NAME --docker-server=https://$YOUR_SERVER_DNS/v2/ --docker-username=$YOUR_USER --docker-password=$YOUR_PASSWORD --docker-email=whatever@gmail.com --namespace=default

然后在您的Yaml中使用它

...
      imagePullSecrets:
       - name: $YOUR_REGISTRY_NAME

关于您看到已安装的默认令牌,它属于您的Pod用于与kubernetes api对话的服务帐户。您可以通过运行kubectl get sakubectl describe sa $DEFAULT_SERVICE_ACCOUNT_ID来找到服务帐户。通过运行kubectl get secretskubectl describe secret $SECRET_ID查找令牌。为了阐明此服务帐户和令牌,除非您指定它与Docker注册表无关。要将注册表包含在服务帐户中,请遵循此指南link