在Kubernetes集群中,我部署了每个节点的HTTP特定于节点的服务(使用DaemonSet)。该服务返回特定于节点的数据(否则将无法通过集群/远程API获得)。我无法使用Kubernetes服务,因为这将导致某种服务轮盘赌,因为客户端无法控制要连接(转发HTTP请求)的确切节点。由于服务需要返回特定于节点的数据,因此这将导致针对随机节点而不是客户端所需的节点返回数据。
我的怀疑是,我需要一个反向代理,该代理使用其自身URL路径的一部分将确定性的传入HTTP请求中继到客户端指示的确切节点。然后,客户端可以使用群集/远程API服务代理功能来访问此代理。
http://myservice/node1/..
-> http://node1:myservice/...
http://myservice/node2/...
-> http://node2:myservice/...
是否有可用的现成的Pod(或Helm图表)可将在所有群集节点上运行的服务映射到单个代理URL,并且某些路径组件指定了要中继其服务实例的节点?有什么方法可以限制反向代理仅中继到定义我的每节点服务的pod规范的DaemonSet中指定的那些节点?
另外,是否有一些现成的“集线器页面”可用于反向代理列表/仅链接到我的服务当前正在运行的那些节点?
或者这是我需要专门创建自己的反向代理设置的地方吗?两者之间是否有整合? Nginx和Kubernetes?
答案 0 :(得分:0)
如果使用DaemonSet,几乎是不可能的,因为您不能在DaemonSet中为Pod添加唯一的标签。如果您需要为每个节点分配一个Pod,则可以将podaffinity.与StatefulSet或Deployments.
一起使用然后为每个节点创建一个服务:
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