2

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

在这个集群之上,我们运行了一个 kubernetes ReplicationController 和 Service for elasticsearch。为了启用负载平衡,该服务定义了一个 ClusterIP - 这也是一个私有 IP 地址:10.99.44.10(但与节点 IP 地址的范围不同)。

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

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


节点的IP地址是:

 node 1  - 192.168.77.102
 node 2  - 192.168.77.103

.

这就是使用 kubectl 时 Service、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
4

2 回答 2

2

您需要设置type您的服务。

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

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

于 2015-09-18T16:37:14.087 回答
0

您可以使用 nodeport,但也可以将 hostport 用于某些守护程序集和部署,并使用 hostnetwork 为 pod 提供总节点网络访问权限

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

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

于 2019-09-26T21:04:07.607 回答