无法从 k8s 中的本地注册表拉取镜像

问题描述 投票:0回答:1

我已经设置了一个使用 MinIO 作为存储后端的本地注册表。

设置功能正常(这就是我没有在此处粘贴部署等的原因),我可以使用以下方式连接到注册表:

sudo docker login proj.name.registry:5045

然后推送图像:

sudo docker run hello-world
sudo docker tag hello-world proj.name.registry:5045/hello-world
sudo docker push proj.name.registry:5045/hello-world

然后我可以使用以下命令在浏览器中查看推送的图像:

https://proj.name.registry:5045/v2/_catalog

或通过提供IP:

https://XX.XXX.XXX.32:5045/v2/_catalog

此外,命令:

curl -k https://proj.name.registry:5045/v2/_catalog

回归

{"repositories":["hello-world"]}

然后我创建了一个部署,尝试使用(秘密、卷等正确)从本地注册表中提取映像:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: registry-test
  namespace: ches
  labels:
    app: registry-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: registry-test
  template:
    metadata:
      labels:
        app: registry-test
    spec:
      containers:
      - name: registry-test
        image: proj.name.registry:5045/hello-world
      imagePullSecrets:
        - name: ches-registry-secret

我收到以下错误:

无法拉取镜像“proj.name.registry:5045/hello-world”:rpc错误: code = 未知 desc = 无法提取和解压镜像 “proj.name.registry:5045/hello-world:latest”:解析失败 参考“proj.name.registry:5045/hello-world:latest”:失败 要求: 头 “https://proj.name.registry:5045/v2/hello-world/manifests/latest”: 拨打 tcp XX.XXX.XXX.120:5045: 连接:连接被拒绝

我已经在/etc/hosts中添加了:

XX.XXX.XXX.32 慈善机构.ches.registry

我认为错误在这里:

dial tcp XX.XXX.XXX.120
。正确的 IP 应为 XX.XXX.XXX.32.

我尝试创建一个服务:

apiVersion: v1
kind: Service
metadata:
  name: ches-registry
  namespace: ches
spec:
  selector:
    app: ches-registry   #this selector to match the labels of my Deployment
  ports:
    - protocol: TCP
      port: 5045
      targetPort: 5045
  externalIPs:
    - XX.XXX.XXX.32

但是没有成功。

有人知道我做错了什么吗?

docker kubernetes yaml docker-registry
1个回答
0
投票

在您的命名空间中创建 dockerconfig 密钥

apiVersion: v1
kind: Secret
metadata:
  name: <your-secret-name>
  namespace: <your-namespace>
data:
  .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

然后编辑您的部署,告诉 kubernetes 将使用存储在机密中的哪些凭据来验证和拉取您的映像:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: registry-test
  namespace: ches
  labels:
    app: registry-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: registry-test
  template:
    metadata:
      labels:
        app: registry-test
    spec:
      imagePullSecrets:
        - name: <your-secret-name>
      containers:
      - name: registry-test
        image: proj.name.registry:5045/hello-world
      imagePullSecrets:
        - name: ches-registry-secret

© www.soinside.com 2019 - 2024. All rights reserved.