gpt4 book ai didi

docker - 如何对Kubernetes Pod进行动态代理?

转载 作者:行者123 更新时间:2023-12-02 21:01:46 25 4
gpt4 key购买 nike

我想创建一个可以做某种动态代理回Kubernetes Pods的服务。基本上,我将有数百个K8s Pod运行相同的应用程序,它们映射到主机上的随机端口(如10456)。但是,每个Pod都是唯一的,我希望流量根据主机名定向到特定的Pod。因此,当收到abc123.app.com的请求时,我将拥有一个代理层,该代理层在数据库中进行查找以查找该域正在运行的主机和端口(例如10.0.0.5:10456),然后将请求转发至该位置。是否有支持此服务的服务?我之前曾与Nginx进行过很多合作,但尚不清楚它是否可以支持此查找功能。

有没有人建过这样的东西?构建可以进行类似查找的代理层的最佳方法是什么?当Pod从一台主机移动到另一台主机时,我将如何更新数据库?

提前致谢!

编辑:

我本应该是第一次把它放在那儿,但是去这些 pods 的流量类型是RPC流量和点对点流量

最佳答案

您正在描述的内容与kubernetes ingress定义对http流量的作用非常相似。

入口定义将ingress controller配置为将对主机名的请求指向serviceservice通过label selectors选择端点(荚)。当 pods 移动时,kubernetes会自动更新服务。

您的工作只是通过API clients之一将配置更改从数据库中推送到kubernetes,而不是直接代理。如果您的环境非常动态,需要始终进行重新配置,或者需要动态决定流量的流向,则可能需要继续查看自定义代理或istioopenresty

听起来您已经将独特的部署部署到了kubernetes,因此除此以外还包括服务和入口定义。

一个简单的示例,在 pods 上包含标签,即使用该标签的服务。然后使用服务定义入口。

apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
app: host-abc123
spec:
containers:
- name: host-abc123
image: me/my-app:1.2.1
ports:
- containerPort: 10456
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: host-abc123
spec:
rules:
- host: abc123.bar.com
http:
paths:
- backend:
serviceName: host-abc123
servicePort: 80
apiVersion: v1
kind: Service
metadata:
name: host-abc123
spec:
ports:
- protocol: TCP
port: 80
targetPort: 10456

单个入口定义可以包括所有主机,但是我不确定kubernetes和入口 Controller 将如何定期替换它。

也有基于 nginx的入口 Controller 。最终,每个入口/主机定义都有一个nginx server配置。

关于docker - 如何对Kubernetes Pod进行动态代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60144717/

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