Kubernetes / nginx - 如何识别来自集群内另一个服务的 http 请求

Kubernetes / nginx - 如何识别来自集群内另一个服务的 http 请求

我在 Google Cloud 上运行 Kubernetes,并且有一项服务连接到带有 Nodejs 服务器的 pod,另一项服务连接到带有 NGINX 的 pod。在 NGINX pod 中,我有一个位置块,我想全局拒绝它,除非它来自 Nodejs pod。

在我的 NGINX conf 文件中执行此操作的正确方法是什么?

下面的内容始终被位置块拒绝...我正在使用 Nodejs 服务的环境变量,该变量在创建 NGINX pod 时会自动添加到其中。

location /target {

  deny all;
  allow 1.2.3.4; #NODEJS_SERVICE_HOST;

  return 200;
}

答案1

从 Kubernetes 的角度来看,这似乎不是最好的方法,限制通过Pod 的IP 地址不能保证规则的持久性,一旦特定 Pod 被重新调度,其网络 IP 地址可能会根据 Kubernetes 规则更改。网络模型概念。

您可以考虑使用DNS 发现机制,以便在 K8s Pod 和其对应的服务之间建立名称解析功能。但是,我不确定这是否是有效的解决方案,因此 Nginx 需要提供额外的模块,表演DNS 查找 A 记录,这会严重影响 Pod 的性能。

基本上,Kubernetes 带来了网络策略,完成这些任务。我鼓励你回顾一下相关的例子在网络中采用网络策略基于标签更直接的限制方式。

相关内容