GCP内部负载均衡全局访问(Beta)注释无效?

8

我尝试使用以下注释在内部创建负载均衡器,如此文档所述:

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

我尝试从不同地区的虚拟机访问负载均衡器,但是虚拟机无法到达终点。根据此文档,我在创建的转发规则上运行了以下命令(GCP为所有负载均衡器创建具有随机名称的转发规则,可以使用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问题,他们很快就解决了,并且已经更新了公共文档(2020年1月15日),以明确要求使用GKE 1.16才能使全局访问功能正常工作。
1个回答

9

这是可以预料的,但公共文档中并没有解释这种行为的原因。事实上,“全局访问”功能与GKE 1.16集群配合使用。

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

  • 有两个不同的全局访问功能:一个用于ILB,另一个专门针对GKE。
  • GKE的全局访问功能于12月23日推出。
  • 从GKE 1.16开始,全局访问功能适用于GKE,但似乎没有在文档中提到。
  • 我们的测试是在GKE 1.13.11-gke.14集群上完成的。
  • 需要创建一个GKE 1.16集群并再次进行测试。

话虽如此,我想通知您,公共信息中的这种不匹配已经得到了正确团队的处理,并正在处理中,以更新可用的公共文档here,以防止未来的混淆。您可以通过关注更新here来跟踪此过程。

如何验证上面提供的信息?以下是一个简要的过程,您可以按照以下步骤进行:
测试1:
- 在europe-west4中创建GKE 1.16集群(此区域/区域不是强制性的)。 - 创建Deployment。 - 通过编写服务配置文件,使用注释“networking.gke.io/internal-load-balancer-allow-global-access:“true”创建内部TCP负载均衡器。 - 进入Network Services > Load Balancing > Advanced菜单(底部):全局访问应启用。 - SSH VM在europe-west1。 - 运行命令$curl -v:您应该收到HTTP / 1.1 200 OK。
测试2:
- 删除服务配置文件中的注释“networking.gke.io/internal-load-balancer-allow-global-access:“true”。 - 运行命令$kubectl apply -f更新我的服务 - 进入Network Services > Load Balancing > Advanced菜单(底部):全局访问应禁用。 - SSH VM在europe-west1。 - 运行命令$curl -v:您应该收到超时错误消息。

1
感谢您的解释。您提供的这个 链接 到 GCP Bug 报告是我自己创建的 :) 我已经按照问题中提供的 YAML,在 GKE 1.16(使用 --release-channel=rapid)上进行了尝试,它可以正常工作,无需手动运行 gcloud 命令。 - Amit Yadav
内部应用负载均衡器是否也可以实现相同的功能?在我的情况下,我们使用Ingress创建了负载均衡器(因为我们需要一个内部应用负载均衡器),而不是使用服务。我尝试了相同的方法,但没有成功。任何帮助将不胜感激,谢谢! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接