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

Mir*_*iro 7 kubernetes google-kubernetes-engine google-cloud-internal-load-balancer

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

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

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

解决方法受到欢迎!

Ami*_*dav 7

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

全局访问是内部负载均衡器服务的可选参数,它允许来自您 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
Run Code Online (Sandbox Code Playgroud)

对于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
    
    Run Code Online (Sandbox Code Playgroud)

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

    # COMMAND:
    kubectl get  service/ilb-global \
      -o jsonpath='{.status.loadBalancer.ingress[].ip}'
    
    # OUTPUT:
    10.123.4.5
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

    注意:如果您不在 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].
    
    Run Code Online (Sandbox Code Playgroud)

它已经完成了。现在,您可以从任何区域(但相同的VPC 网络)中的任何实例访问此内部 IP ( 10.123.4.5 )。


小智 -2

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

\n\n

话虽如此,我发现您\xe2\x80\x99不喜欢在同一 VPC 下执行此操作,因此您的场景的解决方法可能是:

\n\n\n