将节点端口直接映射到 pod 中,绕过服务和入口

Map node port directly into pod, bypassing services and ingress

有没有办法将端口直接从节点映射到同一节点上的 pod 运行,绕过服务、负载均衡器和入口。所以基本上如果一个 pod 部署在节点 X 上,那么节点 X 需要监听端口 1234 并将该端口直接映射到端口 1234 上的节点 X 上的 pod 运行。所以基本上不会有跨节点连接.无论 Kubernetes 决定在哪个节点上部署 POD,该节点现在都是外部连接的新主机。

我完全知道这违背了 Kubernetes 集群的所有设计原则。但是我正在尝试托管一个旧的自定义构建云应用程序,该应用程序是为一个唯一的自定义云解决方案构建的,看看我是否可以将它托管在 Kubernetes 上,但是有状态集中的每个 POD 都需要分配一个专用的 public IP作为 public IP 发送到外部设备以将它们重定向到正确的 POD。而且该协议也是自定义的,因此不存在用于此的 Level 7 负载均衡器。所以我能想出的唯一解决方案是从节点到 POD 的直接端口映射。

您是否考虑过将 ServiceNodePort 类型一起使用?这将为您在部署 pod 的每个节点上提供一个“静态”端口。端口号会很高(30000+)但可靠。这是描述 in the narrative documentation.

您可以在 pod 规范中使用 hostNetwork: truednsPolicy: ClusterFirstWithHostNet

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 8080

这意味着 pod 将直接使用主机的网络在端口 8080 上侦听,并且可以通过 nodeip:8080 访问而无需创建 serviceingress