0

我在 AWS 上使用 kops v1.8.1 和 Kubernetes v1.10.0 来构建我的基础设施。

我按照以下链接中的过程创建了一个外部纯 HTTP docker 注册表: https ://docs.docker.com/registry/deploying/#run-a-local-registry

然后,我使用 kops 创建了一个集群,并在集群规范清单中添加了以下几行:

docker: 
  insecureRegistry: <hostnameofregistry> 
  logDriver: ""

集群已创建,但在尝试 docker push 到不安全的注册表时,它失败了

我期望能够从不安全的注册表中推送或拉取图像,而无需在主节点或节点上添加任何配置

我还尝试使用钩子向主节点和节点授予对不安全注册表的访问权限(基于以下过程https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry)。

我在集群规范清单中添加了以下钩子:

hooks:
  - execContainer:
  command:
    - sh
    - -c
    - echo 35.155.193.162 <hostnameofregistry> >> /rootfs/etc/hosts &&
      echo { '"insecure-registries":["<hostnameofregistry>:5000"] } >> /rootfs/etc/docker/daemon.json &&
      /usr/bin/systemctl daemon-reload &&
      /usr/bin/systemctl restart docker.service
  image: busybox

该挂钩确实会修改 /etc/hosts 并在主节点和节点上创建 /etc/docker/daemon.json 但我仍然需要手动执行守护程序重新加载并重新启动 docker 以便主节点和节点能够访问不安全的注册表。

一般来说,我对 Docker 和 Kubernetes 比较陌生,所以不确定我错过了什么或做错了什么。任何帮助或评论都会有所帮助。

谢谢

4

2 回答 2

0

就我而言,它只是通过做

  1. "kops edit cluster": docker: insecureRegistry: 100.0.0.0/24 (非常一般的规则,ips 在集群更新后改变) logDriver: ""

  2. “kops 更新集群——是”

  3. “kops 滚动更新集群——是”
于 2020-06-13T02:15:20.007 回答
0

首先,关于您的本地注册表,当您在一个 AWS 节点上创建注册表并尝试从其他节点访问它时,您可能在防火墙中遇到问题,但您可能尚未打开注册表节点上的端口到您的网络,这可能是它失败的原因。

一般来说,Amazon Elastic Container Registry对您来说是一个很好的解决方案。您的基础设施已经在 AWS 上,所以最好的方法是使用 AWS 的组件而不是一些奇怪的 hack。

如果您使用AWS ECR,您只需将 IAM 角色添加到您的 Kubernetes 节点即可访问注册表。

于 2018-04-17T10:41:16.310 回答