将图像推送到kubernetes和ingress内的docker注册表时出错

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

我正在使用docker进行桌面kubernertes安装,我想在入口处部署一个docker注册表。我已经部署了一个注册表,如果我使用ingress访问目录api就行了。但当我尝试推动时,我有这个错误:

error parsing HTTP 404 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx/1.15.11</center>\r\n</body>\r\n</html>\r\n"

这是用于创建卷,部署和服务的yaml IS

kind: PersistentVolume
apiVersion: v1
metadata:
  name: dev-registry-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/host_mnt/c/docker-registry/dev-registry"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: dev-registry-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: dev-registry
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: dev-registry
    spec:
      containers:
        - name: dev-registry
          image: registry:2
          ports:
            - name: http-port
              containerPort: 5000
          volumeMounts:
            - name: docker-data
              mountPath: /var/lib/registry
      volumes:
        - name: docker-data
          persistentVolumeClaim:
            claimName: dev-registry-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: dev-registry
spec:
  ports:
    - port: 5000
      targetPort: 5000   
  selector:
    app: dev-registry

这是我创建的入口规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: sudoku-ingress
  namespace: default
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
spec:
  rules:
    - host: dev-registry.sudoku.test.it
      http:
        paths:
          - backend:
              serviceName: dev-registry
              servicePort: 5000
            path: /

其中dev-registry.sudoku.test.it指向kubernetes的集群ip。我已经在不安全的docker列表中添加了地址,如果我向url http://dev-registry.sudoku.test.it/v2/_catalog发出get请求,它会正确响应。

我还尝试将注册表公开为NodePort,在这种情况下,push工作正确,因此问题是入口配置。我如何配置入口?

我也尝试这个https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/docker-registry但只更改注册表地址它不起作用。任何的想法?

kubernetes docker-registry
1个回答
0
投票

容器守护程序在kubernetes之外运行。因此,它不能使用kubernetes服务来访问注册表。您可以像使用NodePort一样使用NodePort,也可以使用指向入口的常规外部可解析主机名。 (当然你也可以在hosts.txt文件中添加一个主机条目,但我不鼓励它,因为如果有人不知道那个配置,它会导致很难诊断问题。)

另一种选择当然是使用外部docker注册表。

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