Kubernetes - 在HA中运行负载均衡器并使用DNS访问应用程序

时间:2017-09-11 12:11:36

标签: nginx kubernetes haproxy

我在Kubernetes中的三台主机(node-A,node-B和node-C)上运行负载均衡器(LB)pod。正在由GitLab服务使用LB,该服务在端口80上运行.GitLab在节点C上运行,并且我能够使用节点B的公共IP来访问它。 node-B是我最初使用Replication Controller设置负载均衡器(HAProxy)的地方。

这里的代码段:

[root@cent-gluster-workstation service-loadbalancer]# cat rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: service-loadbalancer
  labels:
    app: service-loadbalancer
    version: v1
spec:
  replicas: 3
  selector:
    app: service-loadbalancer
    version: v1

完整的详细信息here

以下是问题:
1)我无法使用任何其他节点的公共IP访问GitLab。这是预期的吗?如果LB在所有三个节点上运行,那么不应该使用端口80上的任何节点的公共IP来访问GitLab应用程序吗?

2)我想以一种我可以使用单个'来访问它的方式配置LB. DNS名称,例如gitlab.test.com。我想知道如何做到这一点。 DNS是否会以某种方式映射到服务(如果是,如何?)或服务管理的pod?

我现在正在使用Google Cloud进行测试,但我正在寻找一种非云提供商特定的方式,因为实际的设置将在VM内部运行。如果我可以获得当前的HAProxy(或者如果HAProxy不可行则为NGinx),那将是最好的。

真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

问题是你没有使用你的haproxy集群来访问你的gitlab实例,但你直接到达gitlab。

假设您的haproxy配置正确,您需要使用Load balancer类型的服务公开它,就像您使用gitlab一样。然后,您需要将gitlab服务转换为NodePort,因为您不需要使用负载均衡器将其公开到Internet(haproxy将被公开并代理请求)。最后,请注意您需要使用负载均衡器IP地址来访问您的实例,而不是您的节点地址。 要获取IP,只需运行kubectl get svc

作为旁注,因为我想你想在集群的每个节点中运行一个haproxy实例,你可以使用DaemonSet代替适用于这个确切范围的ReplicationController。