Docker 使Kubernetes服务可从外部访问

Docker 使Kubernetes服务可从外部访问,docker,kubernetes,coreos,google-kubernetes-engine,flannel,Docker,Kubernetes,Coreos,Google Kubernetes Engine,Flannel,我们有一个私有kubernetes集群,它运行在一个带有私有地址的纯金属CoreOS集群上(网络覆盖为法兰绒) 在这个集群上,我们运行kubernetes ReplicationController和elasticsearch服务。为了实现负载平衡,此服务定义了一个ClusterIP,它也是一个专用IP地址:10.99.44.10(但与节点IP地址的范围不同) 我们面临的问题是,我们希望能够从集群外部连接到此集群。据我们所知,这个专用IP无法与我们专用网络中的其他机器联系 我们如何才能做到这一点

我们有一个私有kubernetes集群,它运行在一个带有私有地址的纯金属CoreOS集群上(网络覆盖为法兰绒)

在这个集群上,我们运行kubernetes ReplicationController和elasticsearch服务。为了实现负载平衡,此服务定义了一个ClusterIP,它也是一个专用IP地址:10.99.44.10(但与节点IP地址的范围不同)

我们面临的问题是,我们希望能够从集群外部连接到此集群。据我们所知,这个专用IP无法与我们专用网络中的其他机器联系

我们如何才能做到这一点


节点的IP地址为:

 node 1  - 192.168.77.102
 node 2  - 192.168.77.103

这就是kubectl的服务、RC和Pod的显示方式:

NAME            LABELS          SELECTOR              IP(S)           PORT(S)
elasticsearch   <none>          app=elasticsearch     10.99.44.10     9200/TCP


CONTROLLER     CONTAINER(S)    IMAGE(S)       SELECTOR            REPLICAS
elasticsearch  elasticsearch   elasticsearch  app=elasticsearch   1


NAME                       READY     STATUS    RESTARTS   AGE
elasticsearch-swpy1         1/1       Running   0          26m
名称标签选择器IP端口
elasticsearch应用程序=elasticsearch 10.99.44.10 9200/TCP
控制器容器映像选择器副本
elasticsearch elasticsearch elasticsearch应用程序=elasticsearch 1
名称就绪状态重新启动
elasticsearch-swpy1 1/1运行0 26m

您需要设置服务的
类型


如果您使用的是裸机,则没有集成负载平衡器。您可以使用NodePort在每个VM上获得一个端口,然后设置用于负载平衡的任何设备,以瞄准任何节点上的该端口。

您可以使用NodePort,但也可以对某些守护程序和部署使用hostport,并使用hostnetwork提供pod总节点网络访问

IIRC,如果您最近有足够多的kubernetes,每个节点都可以将流量转发到内部网络,因此如果您在客户端/交换机中创建了正确的路由,您可以通过将这些TCP/IP包传递到一个节点来访问内部网络。然后节点将接收包并将SNAT+转发到clusterIP或podIP


最后,barebone现在可以用于kubernetes loadbalancer,这主要是以更自动和冗余的方式使用最后一个功能

感谢您的响应。当你说“任何节点上的端口”-你的意思是将LB指向所有节点吗?那么,如果接收流量的节点没有运行该特定服务,会发生什么情况?它会使用kube proxy将其重定向到正确的节点吗?对不起,“该端口”是指为您的服务端口分配的节点端口。这将是我们内部分配的一个新端口号(以便您可以在每台机器上拥有相同的端口号)。这将被困在kube代理中,并将重定向到服务,而不管是哪个节点。非常感谢tim(很抱歉回复太晚)。我们通过在RC配置文件
type:NodePort
NodePort:30222
中设置一个静态节点端口号来实现这一点。然后,我们将haproxy指向两个节点(在端口30222上),以实现高可用性。