11

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

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

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

欢迎解决方法!

4

3 回答 3

7

在 GCP 的发行说明中指出:

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

使用以下注释为每个服务启用全局访问:
networking.gke.io/internal-load-balancer-allow-global-access: "true"。

更新:以下服务适用于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 将不起作用。但这帮助使内部负载均衡器全球化。

我们知道内部负载均衡器不过是一个转发规则,我们可以使用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,因为它仍然是 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 网络)中的任何实例访问此内部 IP ( 10.123.4.5 )。

于 2020-01-09T07:02:50.727 回答
0

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

于 2019-08-21T15:01:07.693 回答
-1

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

话虽如此,我看到您不喜欢在同一个 VPC 下这样做,因此您的方案的解决方法可能是:

于 2019-04-26T22:37:24.320 回答