我有3台服务器:1。kubernetes Master 2. kubernetes Minion1 3. kubernetes Minion2
在kubernetes master上运行的复制控制器(带有http服务),带有4个副本(pods),群集IP 10.254.x.x
群集IP可以通过kubectl命令创建的busybox pod访问。
现在我已经在kubernetes主服务器上安装了docker
然后使用docker run命令启动容器。 那么现在我的问题是:如何在这个docker容器和kubernetes集群IP之间进行通信?
实际目标是:docker容器将充当kubernetes集群IP的反向代理
Docker container IP : 172.17.x.x
Kubernetes Pods IP : 172.17.x.x
Kubernetes cluster IP : 10.254.x.x
感谢。
答案 0 :(得分:2)
正如@Grimmy所说,我也认为这是通过使用ingress resource and an ingress controller来实现的。
例如,具有nginx和入口控制器的pod可用作Internet和pod之间的负载平衡器。
答案 1 :(得分:0)
在很大程度上取决于您如何配置kubernetes集群。
要访问在kube群集中运行的服务/容器/容器,您需要在主服务器上运行kube-proxy,并在群集使用的覆盖网络中运行非kube docker容器。
服务ClusterIPs是通过kube-proxy设置iptables规则在节点上实现的,因此,假设您有一个不错的覆盖配置,您应该不仅可以从docker访问它们,还可以访问它自己的主机(可能有一些路由/ nat根据设置解决问题)。另一个问题是服务发现,它在kube中通常通过DNS工作,而不是外部暴露,因此您需要将外部容器/进程指向不同的DNS服务器(或使用不同的服务发现方式,例如查询。 /看kubernetes api)。
您还可以使用服务通过NodePort公开您的流量,您可以在kube群集或Ingress(以及使用NodePort / LB公开的IngressController)的每个节点的固定端口上访问您的svc。
也就是说,也许您可以在kubernetes中运行此容器并强制它在主节点上进行调度(查找节点亲和性和容差)
答案 2 :(得分:0)
您可以使用类型为NodePort的服务公开容器。然后,您也可以访问网络外部的Pod。如果您已将公共IP分配给节点,那么它将公开给公众。使用该URL,您可以连接到k8s群集之外的容器。