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

时间:2019-04-20 21:34:17

标签: kubernetes google-kubernetes-engine google-cloud-internal-load-balancer

我需要从另一个GCP区域访问运行在Internal Load Balancer上的GKE Nginx Ingress服务上运行的内部应用程序。

我完全知道,无法使用直接的Google联网,这是一个巨大的限制(GCP Feature Request)。

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

欢迎解决方法!

3 个答案:

答案 0 :(得分:6)

GCP的发行说明中指出:

Global access是内部LoadBalancer Services的可选参数,它允许VPC中任何区域的客户端访问内部TCP / UDP负载均衡器IP地址。

使用以下注释按服务启用全局访问:
networking.gke.io/internal-load-balancer-allow-global-access:“真”。

更新:以下服务适用于 GKE v1.16.x 和更高版本:

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

对于 GKE v1.15.x 和更低版本:

无法从位于其他区域的VM访问内部负载平衡器IP。但是this帮助我将内部负载均衡器设置为全局。

我们知道内部负载均衡器不过是forwarding rule,因此可以使用gcloud命令启用全局访问。

  1. 首先使用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
    
  2. 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,只需运行gcloud compute forwarding-rules list并手动查找具有我们IP地址的转发规则正在寻找。

  3. 记下转发规则的名称,然后运行以下命令以-allow-global-access 更新转发规则(请记住添加 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].
    

就完成了。现在,您可以从任何区域(但同一个VPC network)中的任何实例访问此内部IP( 10.123.4.5 )。

答案 1 :(得分:1)

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

话虽如此,我看到您不希望在同一VPC上执行此操作,因此,针对您的方案的解决方法可能是:

答案 2 :(得分:0)

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