当前位置: 首页 > 知识库问答 >
问题:

从其他区域访问GCP内部负载平衡器

乐山
2023-03-14

我需要从另一个GCP区域访问运行在GKE Nginx入口服务上的内部应用程序,该服务运行在内部负载均衡器上。

我完全知道,直接使用谷歌网络是不可能的,这是一个巨大的限制(GCP功能请求)。

通过AWS的VPN隧道可以很好地访问内部负载平衡器,但我不确定在同一网络下的GCP区域之间创建这样的隧道是一个好主意。

欢迎变通方法!

共有3个答案

司马同
2023-03-14

首先,请注意,从本地位置连接任何GCP资源(在本例中是您的GKE群集)的唯一方法是通过云互连或VPN设置,实际上它们必须位于同一区域和VPC中才能相互通信

话虽如此,我知道您不喜欢在同一VPC下这样做,因此您的场景的解决方法可以是:

>

  • 创建LoadBalancer类型的服务,以便通过公开此服务可以通过和外部(公共)IP访问您的集群。例如,如果您担心安全性,您可以使用Istio来强制执行访问策略。

    或者,使用Inete创建HTTP(S)负载平衡,以便可以通过其外部(公共)IP访问您的集群。同样,出于安全目的,您可以使用GCP Cloud Armor,它实际上迄今为止仅适用于HTTP(S)负载平衡。

  • 岳良策
    2023-03-14

    另一种可能的方法是在GKE集群所在区域的计算引擎上实现ngnix反向器代理服务器,并使用计算引擎实例的内部IP与GKE的服务进行通信。

    宰父浩漫
    2023-03-14

    在GCP的发行说明中,指出:

    全局访问是内部负载平衡器服务的可选参数,允许VPC中任何区域的客户端访问内部TCP/UDP负载平衡器IP地址。

    使用以下注释为每个服务启用全局访问:
    网络。吉凯恩。io/内部负载平衡器允许全局访问:“true”。

    apiVersion: v1
    kind: Service
    metadata:
      name: ilb-global
      annotations:
        # Required to assign internal IP address
        cloud.google.com/load-balancer-type: "Internal"
        
        # Required to enable global access
        networking.gke.io/internal-load-balancer-allow-global-access: "true"
      labels:
        app: hello
    spec:
      type: LoadBalancer
      selector:
        app: hello
      ports:
      - port: 80
        targetPort: 8080
        protocol: TCP
    

    从位于不同区域的VM访问内部负载均衡器IP将不起作用。但这帮助我使内部负载均衡器全局化。

    众所周知,内部负载均衡器只不过是一个转发规则,我们可以使用gcloud命令来启用全局访问。

    >

  • 首先使用kubectl获取负载平衡器的内部IP地址,并将其IP保存如下:

    # COMMAND:
    kubectl get services/ilb-global
    
    # OUTPUT:
    NAME           TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    ilb-global     LoadBalancer   10.0.12.12   10.123.4.5    80:32400/TCP   18m
    

    请注意“EXTERNAL-IP”的值,或者只需运行以下命令即可使其更加简单:

    # COMMAND:
    kubectl get  service/ilb-global \
      -o jsonpath='{.status.loadBalancer.ingress[].ip}'
    
    # OUTPUT:
    10.123.4.5
    

    GCP为为此负载平衡器创建的转发规则提供随机生成的ID。如果有多个转发规则,请使用以下命令确定哪一个是您刚才创建的内部负载平衡器:

    # COMMAND:
    gcloud compute forwarding-rules list | grep 10.123.4.5
    
    # OUTPUT
    NAME                              REGION       IP_ADDRESS      IP_PROTOCOL  TARGET
    a26cmodifiedb3f8252484ed9d0192    asia-south1  10.123.4.5      TCP          asia-south1/backendServices/a26cmodified44904b3f8252484ed9d019
    

    注意:如果您不在Linux上工作或未安装grep,只需运行云计算转发规则列表,然后手动查找具有我们要查找的IP地址的转发规则。

    请注意转发规则的名称,并运行以下命令以使用--allow global access更新转发规则(请记住添加beta,因为它仍然是beta功能):

    # COMMAND:
    gcloud beta compute forwarding-rules update a26cmodified904b3f8252484ed9d0192 \
    --region asia-south1 --allow-global-access
    
    # OUTPUT:
    Updated [https://www.googleapis.com/compute/beta/projects/PROJECT/regions/REGION/forwardingRules/a26hehemodifiedhehe490252484ed9d0192].
    

    一切都结束了。现在,您可以从任何地区的任何实例访问此内部IP(10.123.4.5)(但VPC网络相同)。

  •  类似资料:
    • 我试图在AWS EKS集群中托管以下(部署前端)Kubernetes部署,在部署部署并创建服务和入口之后,所有的东西都成功地部署和创建了,但是当我试图从外部访问负载平衡器DNS时,这个负载平衡器是不可访问的。有人能指出原因吗? **下面的代码(deployment-2048)正在工作,负载均衡器是可访问的,但在(部署前端)**的情况下是不可访问的。

    • 我在GCP中建立了自己的Elasticsearch集群。群集已启动并运行良好。 集群包含两个客户端节点,我可以使用它们在内部访问并通过运行状况检查http://IP:9200/和

    • 我成功地基于外部负载平衡器设置了自动缩放,但我没有找到一种方法来对内部负载平衡器进行同样的设置。 是否支持此功能,如何根据内部负载均衡器自动扩展我的实例组? 问题是,当您将实例组配置为按HTTP请求扩展时,您需要一个面向internet的HTTP负载平衡器,因此,可以是内部的UDP负载平衡器不适用于此。

    • 我在GKE上有两个kubernetes集群:一个是处理与外部世界交互的公共集群,另一个是仅供内部使用的私有集群。 公共集群需要访问私有集群上的一些服务,我已经通过内部负载平衡器向公共集群的pod公开了这些服务。目前,我正在为负载平衡器指定要使用的内部IP地址,并将这些IP传递给公共POD,但我更希望负载平衡器可以选择任何可用的内部IP地址,并且我可以将其DNS名称传递给公共POD。 内部负载均衡器

    • 我们在AWS VPC中有一个面向内部的应用程序负载平衡器。运行在公用子网中的web应用程序正在访问此文件。该web应用位于自定义域url后面,并使用SSL证书进行安全保护。由于API负载平衡器未应用SSL,因此从web app到API LB的通信失败。 是否可以在AWS中为面向内部的负载平衡器获取SSL证书?

    • 通过添加节点来使集群的负载平衡。只要workder节点符合service的要求,service的task会被均匀的分配到不同的节点上。当限制service在指定类型的节点上运行时,例如指定节点CPU的个数或者内存的容量,节点如果没有达到这些指定的要求,task是不会在这样的节点上运行的。