我有一个带有http负载平衡器的gke群集,该群集使用RATE
平衡模式作为per the docs。
我正在尝试使用内部负载平衡器将此群集上的工作负载公开给App Engine。两种服务都位于同一区域的同一网络上。
但是,当我尝试创建负载均衡器时,它会因该错误而失败。
Error creating load balancer (will retry): failed to ensure load balancer for service default/internal-es-lb: googleapi: Error 400: Validation failed for instance 'projects/PROJECT-NAME/zones/us-central1-a/instances/gke-staging-default-pool-85830c52-g6tg': instance may belong to at most one load-balanced instance group., instanceInMultipleLoadBalancedIgs
有几件事很奇怪。
1.内部LB今天早些时候工作。
2. http负载均衡器正在抛出与内部LB相同的错误,即使它是集群上唯一的负载均衡器
3.当我使用服务Yaml创建LB时,它会创建一个比目标池新的/不同的实例组
这是我的服务Yaml:
apiVersion: v1
kind: Service
metadata:
name: internal-es-lb
annotations:
cloud.google.com/load-balancer-type: "Internal"
labels:
app: internal-es-lb
spec:
type: LoadBalancer
loadBalancerIP: 10.128.0.4
loadBalancerSourceRanges: [0.0.0.0/0]
ports:
- port: 80
targetPort: 9200
protocol: TCP
name: http-es-lb
selector:
app: elastic-master
我认为我理解错误是指只能有一个实例组,因此可以在Yaml中指定实例组吗?或者,还有其他解决方案吗?谢谢!
更新:由于我尚未实现http(s)LB,所以内部LB今天早些时候可以工作。在http(s)lb到位的情况下,这些操作将失败。因为文档不是很清楚,所以想知道如何使所有这些都一起工作。
更新到更新:如果我先创建内部LB,然后再将HTTP LB应用于新实例组,则它可以正常工作。一切都已正确路由和加载,但是Google控制台抛出了很多错误,所以我不知道这是否是推荐的方法。
答案 0 :(得分:0)
创建HTTP(S)LB时,可能会创建使用托管实例组(MIG)的后端。在任何给定时间,实例(包括GKE节点)只能是单个MIG的一部分。
通过GKE创建ILB服务时,后端都是非托管实例组,因此可以重复使用这些实例。
解决此问题的推荐方法是使用Kubernetes Ingress而不是GCE L7LB,因为Ingress还将使用非托管实例组。