我有一个Kubernetes 1.13集群内的私有Docker注册表,由Kubernetes NGINX入口控制器0.23.0和以下Ingress
对象公开:
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-secret
这允许我拉出现有图像,如下所示:
docker image pull my-cluster/my-image
我现在不会更改设置,以便在my-cluster/registry
公开注册表。怎么能这样做,甚至可能吗?
将path
改为/registry/?(.*)
并没有成功。 docker login my-cluster/registry
现在生成以下错误消息,docker image pull my-cluster/registry/my-image
也不起作用。我目前对根本原因的猜测是注册表还使用前缀registry
(在Ingress
中配置)作为其内部重定向。如果适用,如何配置(最好也在Ingress
中)?
Error response from daemon: login attempt to https://my-cluster/v2/ failed with status: 404 Not Found
我现在已经得出结论,通过类似URL的位置引用Docker注册表(例如my-cluster/registry
)而不是类似主机的位置(例如带有可选端口的my-cluster
)是不可能的。
因此,我将为registry.my-cluster
保留一个单独的IP地址和证书,然后继续。
我有一个类似的问题,我试图在/注册表路径上使用nginx ingress公开registryui。
首先,我成功地用这个配置暴露了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: 8080
另一方面,当我尝试使用路径公开服务时,我只有主页可用,当我尝试在子页面(图像的页面)中导航时,我有404错误。
spec:
tls:
- hosts:
- host.com
secretName: letsencrypt-staging
rules:
- host: host.com
http:
paths:
- path: /registry
backend:
serviceName: registry-ui
servicePort: 8080
我想知道你是如何得出结论,主机/注册链接不可能工作?
亲切地谢谢你