GKE内部负载均衡器无法创建

时间:2018-07-31 22:14:14

标签: google-app-engine google-cloud-platform google-compute-engine google-kubernetes-engine

我有一个带有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控制台抛出了很多错误,所以我不知道这是否是推荐的方法。

1 个答案:

答案 0 :(得分:0)

创建HTTP(S)LB时,可能会创建使用托管实例组(MIG)的后端。在任何给定时间,实例(包括GKE节点)只能是单个MIG的一部分。

通过GKE创建ILB服务时,后端都是非托管实例组,因此可以重复使用这些实例。

解决此问题的推荐方法是使用Kubernetes Ingress而不是GCE L7LB,因为Ingress还将使用非托管实例组。