gpt4 book ai didi

用于节点特定服务的 Kubernetes 反向代理 pod?

转载 作者:行者123 更新时间:2023-12-02 02:48:52 26 4
gpt4 key购买 nike

在 Kubernetes 集群中,我部署了一个针对每个节点的 HTTP 节点特定服务(使用 DaemonSet)。该服务返回特定于节点的数据(否则无法通过集群/远程 API 获得)。我无法使用 Kubernetes 服务,因为这会导致某种服务轮盘赌,因为客户端无法控制要连接(转发 HTTP 请求)的确切节点。由于服务需要返回特定于节点的数据,这将导致为随机节点返回数据,而不是为客户端想要的节点返回数据。

我怀疑我需要一个反向代理,它使用自己的 URL 路径的一部分来确定性地将传入的 HTTP 请求中继到客户端指定的节点。然后,该代理又可以由使用集群/远程 API 服务代理功能的客户端访问。

  • http://myservice/node1/.. --> http://node1:myservice/...
  • http://myservice/node2/... --> http://node2:myservice/...
  • ...

是否有现成的 pod(或 Helm chart)可以将在所有集群节点上运行的服务映射到单个代理 URL,并使用一些路径组件指定其服务实例要中继到的节点?有什么方法可以限制反向代理仅中继到定义我的每节点服务的 pod 规范的 DaemonSet 中指定的那些节点?

此外,是否有一些现成的“中心页面”可用于反向代理列表/仅链接到我的服务当前正在运行的那些节点?

或者这是我需要专门创建自己的反向代理设置的地方吗?之间是否有一些整合,例如nginx 和 Kubernetes?

最佳答案

如果使用DaemonSet 几乎是不可能的,因为在DaemonSet 中无法为pod 添加唯一的label。如果您需要为每个节点分发一个 pod,您可以使用 podaffinity.StatefulSetDeployments.

然后为每个节点创建一个服务:

kind: Service
apiVersion: v1
metadata:
name: svc-for-node1
spec:
selector:
nodename: unique-label-for-pod-on-node
ports:
- protocol: TCP
port: 80
targetPort: 9376

最后的设置 Ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /svc-for-node1
backend:
serviceName: svc-for-node1
servicePort: 80
- path: /svc-for-node2
backend:
serviceName: svc-for-node2
servicePort: 80

关于用于节点特定服务的 Kubernetes 反向代理 pod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53073074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com