I'm working on docker for desktop kubernertes installation and i want to deploy a docker registry behind ingress. I already deployed a registry and if I access to the catalog api using ingress it works. But when i try to do a push i have this error:
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"This is the yaml I used fo the creation of volume, deployment and service
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-registryand this is the ingress rule i have created
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: /where dev-registry.sudoku.test.it point to the cluster ip of kubernetes. I already add the address in the insecure list of docker and if I make a get request to the url http://dev-registry.sudoku.test.it/v2/_catalog it responds correctly.
I also tried to expose the registry as a NodePort and in this case the push works correctl, so the problem is the ingress configuration. How have i to configure ingress?
I also try this https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/docker-registry but changing only the registry address it doesn't work. Any idea?
The container daemon is running outside of kubernetes. Therefore it can not use the kubernetes service to access the registry. You can either use a NodePort, as you did, or you can use a regular, externally resolveable hostname that points to your ingress. (Of course you could add a host entry to the hosts.txt file as well, but I discourage that since it can cause hard to diagnose problems, if someone is not aware of that configuration.)
Another option is to use an external docker registry of course.