OpenShift和hostnetwork = true

时间:2017-10-13 21:17:01

标签: kubernetes openshift redhat

我已经部署了两个POD-s,其中hostnetwork设置为true。当POD-s部署在同一个OpenShfit节点上时,一切正常,因为它们可以使用节点IP发现彼此。

当POD-s部署在不同的OpenShift节点上时,他们无法发现彼此,如果我想使用节点IP将一个POD指向另一个POD,我就没有到主机的路由。如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

uswitch / kiam(https://github.com/uswitch/kiam)服务是一个用例的好例子。

它具有在所有工作程序节点的主机网络上运行的代理进程,因为它修改了防火墙规则以拦截(从主机上运行的容器)对AWS api的API请求。

它还具有一个服务器进程,该进程在主机网络上运行以访问AWS api,因为AWS api位于仅对主机网络可用的子网中。

最后...该代理使用GRPC与服务器进行对话,该服务器直接连接到查找kiam服务器时返回的IP地址之一。

因此,您有在节点A的主机网络上运行的代理部署的pod,试图连接到在节点B的主机网络上运行的kiam服务器...。这是行不通的。

此外,这是一项私人服务...不应从网络外部使用。

答案 1 :(得分:0)

如果您希望两个容器共享同一个物理机器并利用环回来进行快速通信,那么最好将它们一起定义为具有两个容器的单个Pod。

如果两个容器要在较大的群集上浮动并且松散耦合,那么我建议利用Kubernetes中的Service构造(在OpenShift下)并使用它来进行适当的发现。

服务记录在https://kubernetes.io/docs/concepts/services-networking/service/,并与内部DNS服务(如果实施 - 在Kubernetes 1.4及更高版本中通用)一起提供了一种方法,让Kubernetes管理事物的位置,更新内部DNS条目。 <servicename>.<namespace>.svc.cluster.local的形式。例如,如果您使用名为&#34; backend&#34;的服务设置Pod。在默认命名空间中,另一个Pod可以将其引用为backend.default.svc.cluster.local。有关DNS部分的Kubernetes文档可在https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

获得

这也避免了&#34; hostnetwork = true&#34;复杂化,让OpenShift(或特别是Kubernetes)管理网络。

答案 2 :(得分:0)

如果必须绝对使用主机网络,则应创建路由器,然后使用这些路由器在pod之间进行通信。你可以在opeshift中创建基于ha代理的路由器,参考这里 - https://docs.openshift.com/enterprise/3.0/install_config/install/deploy_router.html