Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform GCP:将流量从全局HTTP负载平衡器定向到istio内部负载平衡器_Google Cloud Platform_Google Kubernetes Engine_Istio - Fatal编程技术网

Google cloud platform GCP:将流量从全局HTTP负载平衡器定向到istio内部负载平衡器

Google cloud platform GCP:将流量从全局HTTP负载平衡器定向到istio内部负载平衡器,google-cloud-platform,google-kubernetes-engine,istio,Google Cloud Platform,Google Kubernetes Engine,Istio,我在共享VPC网络上的两个区域拥有GKE集群,它们都在运行istio,我需要在它们之间实现全局负载平衡。在使用istio ilbgateway(端口80已公开)设置每个群集后,将创建一个GCP内部区域负载平衡器,并在该区域的子网上分配一个外部IP。我可以看到两个ilb网关的相应后端服务。但是,当使用新的后端服务设置全局HTTP负载平衡器并ping全局负载平衡器的IP时,它会将请求定向到群集节点之一的IP地址,而不是我所期望的内部负载平衡器的IP地址 我在这里试图实现的目标可能吗?如果是这样,上面

我在共享VPC网络上的两个区域拥有GKE集群,它们都在运行istio,我需要在它们之间实现全局负载平衡。在使用istio ilbgateway(端口80已公开)设置每个群集后,将创建一个GCP内部区域负载平衡器,并在该区域的子网上分配一个外部IP。我可以看到两个ilb网关的相应后端服务。但是,当使用新的后端服务设置全局HTTP负载平衡器并ping全局负载平衡器的IP时,它会将请求定向到群集节点之一的IP地址,而不是我所期望的内部负载平衡器的IP地址


我在这里试图实现的目标可能吗?如果是这样,上面是否缺少一个步骤

你想要达到的目标是不可能的。原因有二

  • GCP没有可以处理两个不同集群的GKE入口。这称为多群集入口,不受支持
  • GCP负载平衡器不能将另一个负载平衡器用作后端

  • 您可以在Istio上设置全局负载平衡器。但是,您无法访问由Istio入口网关自动设置的TCP负载平衡器

    这个入口网关是一个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}'
    
    现在,您可以使用集群和节点端口创建的实例组设置全局负载平衡器后端。通过这种方式,您的流量将被路由到Istio,而无需使用入口网关(->TCP负载平衡器)

    关于这两个区域,您应该有两个实例组,每个区域一个,以及两个TCP负载平衡器,每个区域一个。顺便说一下,您可以在全局负载平衡器上定义两个不同的后端,但是您不能在这两个区域之间负载平衡相同的流量。您将有两个不同的路径规则,因此有两个不同的URL条目

    更新


    经过反射后,如果您想在两个区域中路由相同的流量,则必须依赖执行这种负载平衡的动态DNS服务。大多数情况下,这种DNS服务包括运行状况检查,以验证您所在地区是否有响应。今天,谷歌全球负载平衡不允许这样做。我知道Cloudflare可以做到这一点。

    GCP有一个单独的工具可供您用来设置一个名为KubeMCI的全局入口,它需要一些手动干预,例如,在本例中,您的Istio网关路由到的服务需要作为节点端口而不是负载平衡器运行,并且在您希望其响应的每个集群上,节点端口必须完全相同

    how-to没有提到Istio只是Kubernetes服务,我认为TCP还不可用,只是HTTP(s)。请记住,它特别指出kubemci是一个临时工具,直到他们将功能构建到Kubectl中

    但是,如果您对节点端口进行相同的配置,它应该可以正常工作

    以下是官方文件:

    谢谢,@EliasH。为清楚起见,是否有解决上述第2点的推荐方法?我可以从同一子网上的虚拟机成功ping istio ilbgateway。如果全局负载平衡器将流量定向到未运行istio或未使用任何其他类型入口的VM,则该VM可以使用其子网中群集的内部负载平衡器,这是否正确,我们收到了来自GCP的一封电子邮件,其中涉及一个需要补丁的特使漏洞——临时补丁据称是istio入口网关前面的HTTP负载平衡器:“GKE的新版本(1.12.9-GKE.15,1.13.7-GKE.24)将于2019年8月19日至8月22日开始推出。您可以在GKE发行说明页面上了解这些推出的状态。同时,您可以在Istio入口前使用HTTP(S)负载平衡器来缓解HTTP/2漏洞“这是如何实现的?istio入口网关也不是后端服务。我正在使用GKE,是否可以将流量从全局http负载平衡器定向到nginx入口控制器?全局负载平衡器不需要动态DNS,因为GCLB的外部IP地址使用anycast。如果将这两个组添加到同一后端服务中,则负载平衡器将根据该后端服务中指定的平衡在它们之间切换。以这种方式配置的全局负载平衡器也会将流量路由到距离用户最近的区域(如果它们没有过载)。