使Kubernetes服务在外部可访问

时间:2015-09-17 17:45:21

标签: docker kubernetes coreos google-kubernetes-engine flannel

我们有一个私有kubernetes集群在裸机CoreOS集群上运行(带有Flannel用于网络覆盖),带有私有地址。

在这个集群的顶部,我们为elasticsearch运行kubernetes ReplicationController和Service。要启用负载平衡,此服务已定义ClusterIP - 它也是专用IP地址:10.99.44.10(但与节点IP地址的范围不同)。

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

我们怎样才能做到这一点?

节点的IP地址为:

 node 1  - 192.168.77.102
 node 2  - 192.168.77.103

这就是服务,RC和Pod与kubectl一起出现的方式:

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

2 个答案:

答案 0 :(得分:1)

您需要设置服务的type

http://docs.k8s.io/v1.0/user-guide/services.html#external-services

如果您使用的是裸机,则表明您没有集成LoadBalancer。您可以使用NodePort获取每个VM上的端口,然后设置用于负载平衡的任何内容,以瞄准任何节点上的该端口。

答案 1 :(得分:0)

您可以使用nodeport,但也可以将hostport用于某些后台驻留程序和部署以及hostnetwork,以使Pod可以对节点进行总的网络访问

IIRC,如果您的kubernetes足够新,那么每个节点都可以将流量转发到内部网络,因此,如果在客户端/交换机中创建正确的路由,则可以通过将以下TCP / IP程序包传递到一个节点。然后,该节点将收到该软件包,并将SNAT +转发到clusterIP或podIP。

最后,准系统现在可以将MetalLB用于kubernetes负载均衡器,它主要是以更自动和冗余的方式使用最后一个功能