【问题标题】:Close off an endpoint on node.js server by via Kubernetes通过 Kubernetes 关闭 node.js 服务器上的端点
【发布时间】:2018-06-21 10:15:40
【问题描述】:

我有一个运行 python 子进程的 Docker 映像,它是一个暴露端点 /checknode.js 服务器。整个东西都放在一个 Kubernetes pod 中,并使用 /check 作为 readinessProbe 端点。

现在,在某个时候,我想关闭此端点或强制失败所有来自它的请求。理想情况下,我想通过更高级别的实体(即 Kubernetes 生命周期挂钩)来做到这一点,以免触及较低级别的实现(例如打开一个新的端点 /stop 来切换一些布尔标志并强制 /check 失败)

这可能吗?如果没有,最好的选择是什么?

【问题讨论】:

  • 运行一个python子进程,这是一个node.js服务器这很奇怪
  • 通过更高级别的实体(即 Kubernetes 生命周期挂钩)来做到这一点这是什么意思?
  • 运行一个 python 子进程,它是一个 node.js 服务器 是的,但它是一个遗留设计,我试图不立即改变。它实际上运行了两个子进程,所以我猜 python 脚本只是一个方便的启动脚本
  • 通过更高级别的实体来做到这一点意味着如果可能的话,我不想深入到服务器的实际实现上。我尝试查看工具(即 Kubernetes)是否已经为此提供了解决方案

标签: python node.js docker kubernetes


【解决方案1】:

这可能吗?如果没有,最好的选择是什么?

我相信有几个:

  • 远程地址过滤
  • 神奇的标题
  • 正式的代理容器

远程地址

来自 kubernetes 的对 /check 的请求将来自节点的 SDN IP 地址(因此,如果节点的 SDN 子网是 10.10.5.0/24,则请求将来自 10.10.5.1),因此您可以允许来自 @分配给 Pod 的 /24 中的 987654323@

魔术头

httpGetreadinessProbe 允许httpHeaders:,因此您可以为/check 开启HTTP Basic 身份验证,然后将- name: Authentication value: Basic xxyyzz== 放入httpHeaders:

正式的代理容器

将第二个容器添加到运行 haproxyPod 并过滤 /check 请求以返回 401 或 404 或任何您想要的。由于 Pod 中的所有容器共享相同的网络命名空间,因此配置 haproxy 与您的 node.js 服务器对话将非常简单,并且您的 readinessProbe(以及 liveliness)可以继续使用该 URL,因为只有kubernetes 可以通过使用非 haproxy 容器的port 来访问它。要完成该循环,请将Service 指向haproxy 容器的端口。

【讨论】:

  • 代理容器似乎是最灵活的解决方案,但也是我尽量不使用的解决方案。这些建议是可靠的,但我会尝试看看我是否可以实施其中任何一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
相关资源
最近更新 更多