5

我尝试使用本文档中提到的以下注释创建内部负载均衡器:

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 无法到达端点。

但是,根据此文档,我在创建的转发规则上运行以下命令(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 打开了这个问题,这个问题很快得到了解决,他们更新了公共文档(2020 年 1 月 15 日),特别提到了 GKE 1.16 要求全球访问功能正常工作。

4

1 回答 1

6

这是意料之中的,但公共文档中根本没有解释这种行为的原因。事实上,“全球访问”功能适用于 GKE 1.16 集群。

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

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

话虽如此,我想通知您,公共信息中的这种不匹配已由正确的团队妥善解决,并且正在处理中,以更新此处提供的公共文档,以防止将来出现混淆。您可以通过在此处关注更新来跟踪此过程

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

测试 1:

  • 在 europe-west4 中创建 GKE 1.16 集群(此区域/地区不是强制性的)。
  • 创建部署。
  • 通过编写服务配置文件创建一个带有注释“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 :您应该收到超时错误消息。
于 2020-01-10T15:28:26.870 回答