GCP 内部负载平衡器

GCP internal load balancer

我正在尝试从我在 GAE 中的项目访问 GKE 上的 elasticsearch 集群 - 灵活。由于我不需要外部负载平衡器,因此我遵循本指南: https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing GKE和GAE都部署在同一个region,但是调用elasticsearch集群一直超时。有没有人做过这件事并且可以分享一些技巧,将不胜感激!

我的 service.yaml 文件如下所示:

apiVersion: v1
kind: Service
metadata:
  name: internalloadbalancerservice
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app.kubernetes.io/component: elasticsearch-server
    app.kubernetes.io/name: elasticsearch  #label selector service
spec:
  type: LoadBalancer
  loadBalancerSourceRanges:   # restrict access
  - xxxxxxxx
  ports:
  - name: myport
    port: 9000
    protocol: TCP # default; can also specify UDP
  selector:
    app.kubernetes.io/name : elasticsearch # label selector for Pods
    app.kubernetes.io/component: elasticsearch-server

假设 GAE 应用程序和 GKE 集群位于同一区域,并且位于同一 VPC 网络中,我建议确保您已经创建了 Ingress allow firewall rules 并将其应用于 GKE 节点作为目标GAE 应用虚拟机作为来源。

记住进入 VM 被隐含的拒绝进入规则拒绝。因此,除非您创建 Ingress 允许防火墙规则,否则您将无法将数据包发送到任何 VM。要使用 Internal Load Balancing (ILB),客户端和后端 VM 必须位于同一位置:
- 地区
- VPC 网络
- 项目

为了避免其他人遇到类似情况,我将分享我无法从 GAE 连接到我的 GKE 应用程序的原因。 GAE 位于 europe-west 区域,而 GKE 位于 europe-west-4a 区域。我以为那会是同一个地区。但是将 GKE 区域更改为 europe-west-1b 有效。不是很明显,但是在阅读文档时,GAE 区域 europe-west 和 GKE 区域 europe-west-1b 都在比利时。

GCP 现在具有内部负载平衡器的 beta Global Access 功能,这将允许从同一网络内的任何区域访问内部负载平衡器。

这对您的情况也有帮助。如果两个服务使用内部 IP 地址暴露但位于不同区域。

更新

全局访问功能现已稳定(对于 GKE 1.16.x 及更高版本),可以通过以下方式启用将以下注释添加到您的服务中。

networking.gke.io/internal-load-balancer-allow-global-access: "true"

例如:下面的清单将使用内部 IP 地址创建您的 internalloadbalancerservice LoadBalancer,并且可以访问该 IP来自同一 VPC 内的任何区域。

apiVersion: v1
kind: Service
metadata:
  name: internalloadbalancerservice
  annotations:
    cloud.google.com/load-balancer-type: "Internal"

    # Required to enable global access
    networking.gke.io/internal-load-balancer-allow-global-access: "true"

  labels:
    app.kubernetes.io/component: elasticsearch-server
    app.kubernetes.io/name: elasticsearch  #label selector service
spec:
  type: LoadBalancer
  loadBalancerSourceRanges:   # restrict access
  - xxxxxxxx
  ports:
  - name: myport
    port: 9000
    protocol: TCP # default; can also specify UDP
  selector:
    app.kubernetes.io/name : elasticsearch # label selector for Pods
    app.kubernetes.io/component: elasticsearch-server

这适用于 GKE 1.16.x 及更高版本。对于较旧的 GKE 版本,您可以参考 this answer.