我在共享的VPC网络上的2个区域中都有GKE群集,它们都在运行istio,因此我需要在它们之间进行全局负载平衡。在每个集群都设置了带有istio-ilbgateway且端口80暴露的情况之后,将创建一个GCP内部区域负载均衡器,并在该区域的子网中分配一个外部IP。我可以看到两个ilb-gateway的相应后端服务。但是,当使用新的后端服务设置全局HTTP负载平衡器并ping全局负载平衡器的IP时,请求将其定向到群集节点之一的IP地址,而不是内部负载平衡器的ip地址。预期。
这是我想要实现的目标吗?如果是这样,上面是否还缺少步骤?
您试图实现的目标是不可能的。有两个原因。
您可以在Istio的顶部设置全局负载均衡器。但是,您无法访问由Istio Ingress Gateway自动设置的TCP负载平衡器。
此Ingress网关是公开NodePort的K8S服务。您可以使用以下命令获取它们:
# For HTTP
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'
# For HTTPS
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'
现在您可以使用群集和NodePort创建的实例组来设置全局负载均衡器后端。通过这种方式,您的流量将被路由到Istio,而无需使用Ingress网关(-> TCP Loadbalancer)。
关于2个区域,您应该有2个实例组,每个区域1个,两个TCP负载均衡器,每个区域1个。顺便说一句,您可以在Global Load Balancer上定义2个不同的后端,但不能在2个区域之间对相同的流量进行负载平衡。您将有2个不同的路径规则,因此2个不同的URL条目