我想创建一个私有注册表,我想在其中推送我的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
答案 0 :(得分:0)
问题是主机端口无法正常使用CNI(请参阅this issue)。
您需要安装portmap插件并创建.conflist文件。所有这些都取决于您如何设置kubernetes集群。
我使用了以下步骤:
/opt/cni/bin
我正在使用运河,所以我的网络配置如下:
{
"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注册表,这是一种安全的正确方法。