如何将 Kubernetes 服务指定为 Google 云任务的 HTTP 目标?

How do I specify a Kubernetes service as HTTP target for a Google Cloud task?

我在 Google Kubernetes Engine 上有一个 nodejs express 服务器 运行,在某个 IP(比如 10.0.20.20)上公开为 NodePort 服务。

我想将此 nodejs 服务用作 Google 云任务的处理程序,因此我创建了以下任务(使用 Python 库):

task = {
    'http_request': {
        'http_method': 'POST',
        'url': 'http://10.0.20.20/myendpoint',
        'body': payload
    }
}

任务创建成功,但随后卡在队列中永远重试。如何设置我的服务以便可以从 Google 云任务访问它?

根据您想要实现的场景,建议在 GKE 级别使用服务公开。

由于您使用的是 RFC-1918 IP,因此我假设您想从与 GKE 集群节点位于同一网络上的实例连接到该 nodejs 服务。

A nodeport 只能使用(按照现在)30000 到 32767 的范围。

You can specify your own nodePort value in the 30000--32767 range. However, it's best to omit the field and let Kubernetes allocate a nodePort for you. This avoids collisions between Services.

因此,您正在使用的url:

http://10.0.20.20/myendpoint

默认使用端口 80/tcp,而不是我之前提到的节点端口范围之一(30000 到 32767),因此失败。

如果您只想使用同一 VPC 和区域上其他实例的内部传递,请使用服务类型 loadbalancer, if you want an intermediate services that handles HTTPS for you instead of your backend, use an internal ingress but keep in mind that this is still on beta and that you would need to provide your own SSL certificates,因为这与 Google 托管证书目前不兼容.

提醒一下,假设您使用的是稳定的 GKE 版本集群,内部负载均衡器服务类型被视为区域资源,这意味着您只能在创建它们的同一子网中使用它们,VPN 除外 and/or 互连到相同的 VPC 和子网区域,此行为从版本 1.16 及更高版本开始是可选的。