如何从K8 Pod向同一集群中的NodePort服务发出HTTP请求

时间:2019-06-29 01:01:29

标签: kubernetes

我需要在K8 pod中提供服务,以便能够对下游服务进行HTTP调用,这些服务由NodePort在同一群集和名称空间内进行负载均衡。

我的约束是这些:

  • 我只能通过操纵部署和服务来做到这一点 实体(没有入口。我没有该级别的访问权限, 群集)
  • 我无法添加任何K8插件
  • NodePort公开的端口必须是随机的,而不是硬编码的
  • 这整个过程必须自动化。我无法使用的字面值设置部署 裸露的端口。它需要通过某种变量来设置,或者 类似的过程。

这是否可能?如果可以,怎么办?

1 个答案:

答案 0 :(得分:3)

这也许可以完成,但并非一帆风顺,您可能必须添加一些自定义自动化。 NodePort服务应由群集外部的实体使用。

对于集群间通信,常规服务(带有ClusterIP)将按设计工作。您的服务可以使用DNS service discovery获得另一项服务。例如。 svc-name.mynamespace.svc.cluster.local将是svc-name名称空间中mynamespace的DNS条目。

如果只能执行一个NodePort,而这实际上是K8s节点上的端口,则可以创建另一个Deploymentnginx之类的haproxy或Pod。然后,通过具有ClusterIP的常规K8s服务来为该部署提供服务。然后让nginx或haproxy指向Kubernetes集群中所有节点上的NodePort。另外,对其进行配置,使其仅通过某种健康检查转发到侦听的NodePort。

以上似乎是一个额外的必要步骤,但是如果您需要集群中的NodePort(出于某种原因),它应该可以解决问题。