GCP 内部负载均衡器全局访问(测试版)注释不起作用?

GCP internal load balancer Global access (Beta) annotation does not work?

我尝试使用 this documentation 中提到的以下注释创建内部负载平衡器:

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

这是完整的清单:

apiVersion: v1
kind: Service
metadata:
  name: ilb-global
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
    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 访问负载均衡器,但 VM 无法访问端点。

但是根据 this documentation 我 运行 对创建的转发规则执行以下命令(GCP 为所有负载均衡器创建一个带有 运行dom 名称的转发规则可以使用 gcloud compute forwarding-rules list 命令检索)以更新全局访问权限:

gcloud beta compute forwarding-rules update abcrandomnamehehe --region [REGION-NAME] --allow-global-access

在 运行 执行上述命令并手动更新负载均衡器后,可以从所有区域访问端点。 运行 gcloud 命令的这个手动步骤是否必要?

如果是,那么注解有什么用呢?我也使用最新可用的 GKE 版本 (1.15.4-gke.22) 进行注释,但如果不使用 gcloud 命令进行更新则无法使用。是我遗漏了什么还是 GCP 中的错误?

编辑:我还打开了 GCP 的 this 问题,很快就得到了解决,他们更新了 public 文档(2020 年 1 月 15 日),特别提到 GKE 1.16 对全球访问功能的要求。

这是预料之中的,但 public 文档中根本没有解释这种行为的原因。事实上,'Global Access' 功能适用于 GKE 1.16 集群。

到目前为止,我可以与您分享以下要点:

  • 关于全局访问有 2 个不同的功能:1 个用于 ILB,1 个专门用于 GKE。
  • GKE 的全球访问功能已于 12 月 23 日推出。
  • GKE 的全局访问功能从 GKE 1.16 开始工作,但似乎没有在文档中提及。
  • 我们的测试是使用 GKE 1.13.11-gke.14 集群完成的。
  • 需要创建GKE 1.16集群再测试

话虽这么说,我想通知您,public 信息中的这种不匹配已由正确的团队妥善解决,并且正在处理以更新 public 文档可用 here to prevent future confusion. You can keep track of this process by following updates here

您如何验证以上提供的信息?这里有一个您可以遵循的简短过程:

测试 1:

  • 在 europe-west4 中创建 GKE 1.16 集群(这 region/zone 不是强制性的)。
  • 创建部署。
  • 通过编写服务配置文件创建带有注释“networking.gke.io/internal-load-balancer-allow-global-access: "true" 的内部 TCP 负载平衡器。
  • 进入网络服务 > 负载平衡 > 高级菜单(在底部)>:应该启用全局访问。
  • europe-west1 中的 SSH 虚拟机。
  • 运行 命令 $curl -v :您应该收到 HTTP/1.1 200 OK.

测试 2:

  • 删除注释“networking.gke.io/internal-load-balancer-allow-global-access: "true" 在服务配置文件中。
  • 通过 运行 命令更新我的服务 $kubectl apply -f
  • 进入网络服务 > 负载平衡 > 高级菜单(在底部)>:应该禁用全局访问。
  • europe-west1 中的 SSH 虚拟机。
  • 运行 命令 $curl -v :您应该收到超时错误消息。