我尝试在docker-registry控制器后面的Kubernetes群集中设置nginx-ingress
问题是,当我尝试将映像推送到私有注册表时,它告诉我:


获取https ://registry.local/v2/:x509:证书仅对ingress.local有效,而不对Registry.local有效。 。

这里是入口清单:

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: docker-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:
  - hosts: [ 'registry.local' ]
  - secretName: registry
  rules:
  - host: registry.local
    http:
      paths:
      - backend:
          serviceName: docker-registry
          servicePort: 5000
        path: /


这是docker-registry清单: >

另外,nginx-inress和docker-registry可以正常工作,但不能一起使用。 >

评论

我知道这似乎很明显,但是证书确实存在吗?

多德,谢谢您的回复。但是它们确实存在。否则,它不会告诉证书有效。...关于它们的唯一一件事是,它们是自签名的。

@acd证书对ingress.local有效,而不是Registry.local表示使用默认的伪入口证书。您必须添加一个有效的证书,即与FQDN匹配并由受信任的CA颁发的证书。

@ 030谢谢您的建议,但这无关紧要。因为我生成的证书(本地)是专门颁发给Registry.local地址的。而且,如上所述,使用相同的cert docker注册表,而前面没有nginx可以正常工作。并且,与此相同,另一个Web服务可以在同一个Nginx之后正常工作。问题出在nginx + docker。

#1 楼

首先404错误是kubernetes中的资源错误。这意味着您的容器中的容器不是您的第一个脚本创建的。即使已创建它并且可以看到它,但是在第二个脚本中您的标签也不正确。

我建议您检查两个YAML脚本的匹配标签。所以在您的情况下,我可以在第一个脚本的spec部分中看到matchlabel是docker-registry,但是在第二个脚本中我看不到任何docker-registry。我相信在您的元数据中,入口脚本的一部分应为“ name = docker-registry”,而不是“ name = docker-ingress”。