我在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),那将是最好的。
真的很感激任何帮助。
答案 0 :(得分:0)
问题是你没有使用你的haproxy集群来访问你的gitlab实例,但你直接到达gitlab。
假设您的haproxy配置正确,您需要使用Load balancer类型的服务公开它,就像您使用gitlab一样。然后,您需要将gitlab服务转换为NodePort
,因为您不需要使用负载均衡器将其公开到Internet(haproxy将被公开并代理请求)。最后,请注意您需要使用负载均衡器IP地址来访问您的实例,而不是您的节点地址。
要获取IP,只需运行kubectl get svc
。
作为旁注,因为我想你想在集群的每个节点中运行一个haproxy实例,你可以使用DaemonSet
代替适用于这个确切范围的ReplicationController。