I have a private Docker registry inside a Kubernetes 1.13 cluster exposed by a Kubernetes NGINX ingress controller 0.23.0 and the following Ingress object:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: my-name
namespace: my-namespace
spec:
rules:
- host: my-domain
http:
paths:
- backend:
serviceName: registry
servicePort: 5000
path: /?(.*)
tls:
- hosts:
- my-domain
secretName: my-secretThis allows me to pull an existing image as follows:
docker image pull my-cluster/my-imageI would not now change the setup such that the registry is exposed at my-cluster/registry. How can this be done, and is it even possible?
Changing path to /registry/?(.*) did not do the trick. docker login my-cluster/registry now produces the following error message and docker image pull my-cluster/registry/my-image also does not work. My current guess as to the root cause is that the registry also also use the prefix registry (as configured in the Ingress) for its internal redirects. If applicable, how can this be configured (preferably in the Ingress too)?
Error response from daemon: login attempt to https://my-cluster/v2/ failed with status: 404 Not Foundi have a similar issue, i'm trying to expose the registryui with nginx ingress on a /registry path.
first, I succeeded to expose with this configuration nginx :
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: registry-ingress
namespace: devops
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
certmanager.k8s.io/cluster-issuer: letsencrypt-staging
kubernetes.io/tls-acme: 'true'
spec:
tls:
- hosts:
- registry.host.com
secretName: letsencrypt-staging
rules:
- host: registry.host.com
http:
paths:
- path: /
backend:
serviceName: registry-ui
servicePort: 8080on the other hand when I try expose the service with a path, I only have the home page that works, as I try to navigate in a sub page (a page of an image) I have a 404 error.
spec:
tls:
- hosts:
- host.com
secretName: letsencrypt-staging
rules:
- host: host.com
http:
paths:
- path: /registry
backend:
serviceName: registry-ui
servicePort: 8080i wanted to know how did you come to the conclusion that it's impossible to have a host/regitry links working?
cordially thank you
I have now concluded that referring to a Docker registry by a URL-like location (such as my-cluster/registry) as opposed to a host-like location (such as my-cluster with an optional port) is not possible.
So I'll reserve a separate IP address and certificate for registry.my-cluster and proceed with that.