首页 > 解决方案 > 在路径 `/registry` 公开 Kubernetes 集群内的私有 Docker 注册表

问题描述

Ingress我在 Kubernetes NGINX 入口控制器 0.23.0 和以下对象公开的 Kubernetes 1.13 集群中有一个私有 Docker 注册表:

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

标签: kubernetesdocker-registrykubernetes-ingress

解决方案


我现在已经得出结论,通过类似 URL 的位置(例如my-cluster/registry)而不是类似主机的位置(例如my-cluster使用可选端口)来引用 Docker 注册表是不可能的。

因此,我将保留一个单独的 IP 地址和证书registry.my-cluster并继续进行。


推荐阅读