Registry 从kubernetes中的私有注册表中提取图像时出现问题

Registry 从kubernetes中的私有注册表中提取图像时出现问题,registry,kubernetes,private,docker-registry,Registry,Kubernetes,Private,Docker Registry,我想创建一个私有注册表,在其中我想推送我的docker映像并使用这些映像创建部署。 我使用KOPS在AWS中创建了一个kubernetes集群,其中有一个主集群和一个从集群。 我点击了这个链接: 创建注册表服务并在从属节点上公开它 然后我构建一个docker映像,并将其作为localhost:5000/推送到注册表中,如此链接中所示 现在,当我尝试使用此映像创建部署时,出现以下错误: 拉取映像“localhost:5000/postgres sdl”失败:rpc错误:code=2 desc=拉取

我想创建一个私有注册表,在其中我想推送我的docker映像并使用这些映像创建部署。 我使用KOPS在AWS中创建了一个kubernetes集群,其中有一个主集群和一个从集群。 我点击了这个链接: 创建注册表服务并在从属节点上公开它

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

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

拉取映像“localhost:5000/postgres sdl”失败:rpc错误:code=2 desc=拉取映像时出错:Get:dial tcp[::1]:5000:getsockopt:连接被拒绝

构建docker映像后,我标记并推送具有以下名称的映像:localhost:5000/postgres sdl

我的部署yaml如下所示:

{
"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
    }
]}

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

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


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

问题在于主机端口不能与CNI正常工作(请参阅)

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

我使用了以下步骤:

  • /opt/cni/bin
  • 我正在使用canal,因此我的网络配置如下所示:

    {
    "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
    中。有关这方面的更多信息,请访问

  • 重新创建代理吊舱


注册表似乎没有运行。您创建了服务和注册表代理吊舱了吗?是的,kube注册表吊舱和kube注册表代理吊舱正在运行,kube注册表服务正在运行。错误消息说,您搜索了
postgres sdl
图像,但您写了,您上载了图像
管理
。是否存在映像不匹配?在我的例子中,注册表服务似乎工作正常,因为我可以使用服务ip地址访问它,推送映像并创建部署。不过,代理似乎存在一些问题。代理应该在内部将对localhost:5000的请求转换为服务ip:port。但这似乎不起作用。