我在一个共享的VPC网络上有两个区域的GKE集群,两者都在运行istio,我需要在它们之间实现全球负载平衡。在每个集群设置了带有端口80的ilbgateway后,将创建一个GCP内部区域负载均衡器,并在该区域的子网上分配一个外部IP。我可以看到相应的后端服务为两个ilb-网关。但是,当使用新的后端服务设置全局HTTP负载均衡器并敲击全局负载均衡器的IP时,请求将被发送到集群的一个节点的IP地址,而不是我所期望的内部负载均衡器的ip地址。
我在这里想要达到的目标有可能吗?如果是的话,上面有没有遗漏一步?
发布于 2019-10-25 11:15:56
您可以在Istio之上设置一个全球负载平衡器。但是,您无法到达由自动设置的TCP负载均衡器。
这个入侵网关是一个公开K8S的NodePorts服务。您可以使用以下命令获取它们:
# 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,而无需使用侵入网关(->,TCP负载均衡器)。
关于这两个区域,您应该有两个实例组,每个区域一个,以及两个TCP负载均衡器,每个区域一个。顺便说一句,您可以在您的全局负载均衡器上定义两个不同的后端,但是您不能在这两个区域之间负载平衡相同的流量。您将有两个不同的路径规则,因此有两个不同的URL条目
更新
经过反思后,如果您想在这两个区域中路由相同的流量,则必须依赖执行这种负载平衡的动态DNS服务。大多数情况下,这种DNS服务包括一个健康检查,以验证您的区域是否响应。今天,谷歌全球负载平衡不允许这样做。我知道Cloudflare会这么做。
发布于 2019-10-24 03:00:30
你想要达到的目标是不可能的。有两个原因。
。
发布于 2020-01-05 20:56:50
GCP有一个单独的工具,您可以使用它来设置一个名为KubeMCI的全局入口,它需要一些手动干预,例如,在这种情况下,您的Istio网关需要作为节点端口运行,而不是负载均衡器,并且在您希望它响应的每个集群上,节点端口都需要完全相同。
“如何- to”没有引用Istio只是Kubernetes服务,而且我认为TCP还不能只提供HTTP。考虑到这一点,它明确表示,在将功能构建到Kubectl之前,kubemci是一个临时工具。
但是,如果您对节点端口进行相同的配置,那么它应该能很好地工作。
这是官方文档:https://cloud.google.com/kubernetes-engine/docs/how-to/multi-cluster-ingress
https://stackoverflow.com/questions/58528770
复制相似问题