在kubernetes中从私人注册表中提取图像时出现问题

时间:2017-09-26 05:44:30

标签: registry kubernetes private docker-registry

我想创建一个私有注册表,我想在其中推送我的docker镜像并使用这些图像创建部署。 我使用KOPS在AWS中创建了一个kubernetes集群,其中有一个主集对象。 我点了这个链接:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/registry 创建一个注册表服务并在从属节点上公开它。

然后我构建一个docker镜像并将其作为localhost:5000 /推送到注册表中,如此链接中所示。

现在,当我尝试使用此图像创建部署时,出现错误:

无法提取图像“localhost:5000 / postgres-sdl”:rpc错误:代码= 2 desc =拉图像时出错:获取http://localhost:5000/v1/repositories/postgres-sdl/images:拨打tcp [:: 1]:5000:getsockopt:connection拒绝

构建docker镜像后,我用以下名称标记并推送图像:localhost:5000 / postgres-sdl

我的部署yaml看起来像这样:

      image: localhost:5000/postgres-sdl

2 个答案:

答案 0 :(得分:0)

问题是主机端口无法正常使用CNI(请参阅this issue)。

您需要安装portmap插件并创建.conflist文件。所有这些都取决于您如何设置kubernetes集群。

我使用了以下步骤:

  • /opt/cni/bin
  • 中设置portmap插件(通过containernetworking/plugins v0.6.0下载)
  • 我正在使用运河,所以我的网络配置如下:

    {
    "name": "canal",
    "cniVersion": "0.3.0",
    "plugins": [{
            "type": "flannel",
            "delegate": {
                "type": "calico",
                "etcd_endpoints": "https://10.128.0.3:2379",
                "etcd_key_file": "/opt/calicoctl/etcd-key",
                "etcd_cert_file": "/opt/calicoctl/etcd-cert",
                "etcd_ca_cert_file": "/opt/calicoctl/etcd-ca",
                "log_level": "info",
                "policy": {
                    "type": "k8s"
                },
                "kubernetes": {
                    "kubeconfig": "/root/cdk/kubeconfig"
                }
            }
        },
        {
            "type": "portmap",
            "capabilities": {
                "portMappings": true
            },
            "snat": true
        }
    ]}
    

    确保文件以.conflist结尾。我将此文件保存在/etc/cni/net.d中。有关这方面的更多信息,请访问Container Networking Interface Specification

  • 重新创建代理窗格。

答案 1 :(得分:-1)

我建议不要在kubernetes上使用本地注册表! 当然它在配置文件中为您提供了与使用minikube进行测试时相同的localhost:5000地址,但它实际上很危险。

如果群集死亡,您将丢失所有图像。

只需使用amazon docker注册表,这是一种安全的正确方法。