gpt4 book ai didi

kubernetes - 单个服务中的多个部署

转载 作者:行者123 更新时间:2023-12-02 00:14:53 25 4
gpt4 key购买 nike

我的后端有 5 个不同的部署,每个部署都在特定端口处理请求。

前端服务使用必要的详细信息联系后端服务。后端服务应该能够决定所需的 pod(来自 5 个部署之一)来满足请求。

不是创建 5 个不同的服务,是否可以将单个服务链接到多个部署?

Kubernetes 版本:1.12使用的云:Amazon EKS

PS:我的要求和https://github.com/kubernetes/kubernetes/issues/24875不一样类似的问题没有答案:"Wire" multiple Deployments to one Service in Kubernetes

最佳答案

您的问题的确切答案是:今天不可能。正如您在 issue 中正确看到的那样在question (都面临同样的情况)这可能是 future 的实现。

一个可能的解决方案/解决方法是将问题委托(delegate)给上层,但这基本上取决于情况,并且总是需要不同的服务。

假设您的部署是 5 个不同的应用程序,它们做不同的事情(否则为什么是 5 个不同的部署而不是 1 个具有 n 副本?)并假设它们是 http 应用程序,您可以使用 ingress resource将流量路由到正确的部署/服务(假设每个部署一项服务)。

如果您的 5 个部署是一起创建/更新/管理的(例如:都在同一个 helm 部署中),您可以创建一个扇出入口:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: simple-fanout-example
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
backend:
serviceName: service1
servicePort: 4200
- path: /bar
backend:
serviceName: service2
servicePort: 8080
- path: /aaaa
backend:
serviceName: service3
servicePort: 4200
- path: /bbbbb
backend:
serviceName: service4
servicePort: 8080
- path: /ccc
backend:
serviceName: service5
servicePort: 8080

或者,如果您的 5 个部署是分开的,您可以使用相同的想法创建 5 个不同的入口服务:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-for-app-1
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
backend:
serviceName: service1
servicePort: 4200

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-for-app-1
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /bar
backend:
serviceName: service2
servicePort: 8080

等等....

创建 5 个入口或 1 个扇出应该产生相同的结果。

此方法适用于 nginx ingress controller但只注意两件事

  • path match: with the nginx controller version > 0.22 nginx.ingress.kubernetes.io/rewrite-target:/为精确匹配。例如,如果您想从 /foo 重定向到 / 保留 /foo 之后的所有 uri (/foo/something ?parameter=parameter_value/something?parameter=parameter_value)你的入口重写规则应该是这样的:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-for-app-1
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/$1"
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo/(.*)
backend:
serviceName: service1
servicePort: 4200
  • 冲突路由:避免路由冲突,例如 path:/foo/(.*) 和 path: /foo/bar/(.*) 其中请求/foo/bar/something 将匹配这两个路径。该行为可能难以预测,如果它按预期工作,它也不会稳定

关于kubernetes - 单个服务中的多个部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324932/

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