google-kubernetes-engine - 如何将 Kubernetes 服务指定为 Google Cloud 任务的 HTTP 目标?
问题描述
我有一个在 Google Kubernetes Engine 上运行的 nodejs express 服务器,在某个 IP(比如 10.0.20.20)上作为 NodePort 服务公开。
我想将此 nodejs 服务用作 Google Cloud 任务的处理程序,因此我创建了以下任务(使用 Python 库):
task = {
'http_request': {
'http_method': 'POST',
'url': 'http://10.0.20.20/myendpoint',
'body': payload
}
}
该任务已成功创建,但是,它会卡在队列中,永远重试。如何设置我的服务,以便可以从 Google Cloud 任务访问它?
解决方案
根据您想要在此处实现的方案,建议使用 GKE 级别的服务公开。
我假设您想从与 GKE 集群节点位于同一网络上的实例连接到该 nodejs 服务,因为您使用的是 RFC-1918 IP。
一个节点端口只能使用(按照现在)从 30000 到 32767 的范围。
您可以在 30000--32767 范围内指定自己的 nodePort 值。但是,最好省略该字段,让 Kubernetes 为您分配一个 nodePort。这避免了服务之间的冲突。
因此,您正在使用的网址:
默认情况下使用端口 80/tcp,而不是我之前提到的 nodePort 范围之一(30000 到 32767),因此失败。
如果您只想在同一 VPC 和区域上的其他实例内部使用直通,请使用服务类型loadbalancer,如果您想要为您而不是后端处理 HTTPS 的中间服务,请使用内部入口但保留在请注意,这仍处于测试阶段,您需要提供自己的SSL 证书,因为这目前与 Google 托管证书不兼容。
提醒一下,假设您使用的是稳定的 GKE 版本集群,内部负载均衡器服务类型被视为区域资源,这意味着您只能在您创建它们的同一子网中使用它们,少数例外是 VPN 和/或互连到同一 VPC 和子网区域,从1.16及更高版本开始,此行为将是可选的。
推荐阅读
- azure - Azure 通知中心方法没有响应的问题
- sql - SQL时间戳插入添加额外的零
- asp.net-core - ASP.NET Core 3.1 使用 tinymce 上传图片
- python - 邮件被发送,然后陷入尝试发送电子邮件的无限循环
- python-3.x - 将日期字符串转换为另一种日期字符串格式
- python - 如何在熊猫中创建固定长度的滚动窗口?
- javascript - nodeList.style.display = 'flex' 不工作
- javascript - 使用 vue 和元素 UI 库单选按钮的自定义标签
- flutter - Flutter:右溢出 35 像素
- javascript - 未捕获的类型错误:无法在笔记网站中读取 HTMLButtonElement 处的 null 属性“推送”