Raj*_*oth 2 kubernetes amazon-eks
我的后端有 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
你的追求的确切答案是:今天这是不可能的。正如您在问题和问题中正确看到的那样(两者都面临相同的情况),这可能是未来的实现。
一种可能的解决方案/解决方法是将问题委托给上层,但这基本上取决于情况,并且总是需要不同的服务。
假设您的部署是 5 个执行不同操作的不同应用程序(否则为什么是 5 个不同的部署而不是 1 个具有n副本的部署?)并假设它们是 http 应用程序,您可以使用入口资源将流量引导到正确的部署/服务(假设每个部署一项服务)。
如果您的 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
Run Code Online (Sandbox Code Playgroud)
或者,如果您的 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
等等....
创建 5 个入口或 1 个扇出应该产生相同的结果。
这种方法适用于nginx 入口控制器,但只注意两件事
nginx.ingress.kubernetes.io/rewrite-target: /完全匹配。例如,如果您想从重定向/foo到保留( to )/之后的所有 uri,您的入口重写规则应如下所示:/foo/foo/something?parameter=parameter_value/something?parameter=parameter_valueapiVersion: 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
Run Code Online (Sandbox Code Playgroud)
path: /foo/(.*)和路径:/foo/bar/(.*)其中的请求/foo/bar/something将匹配两个路径。这种行为可能很难预测,如果它按预期工作,它也不会稳定| 归档时间: |
|
| 查看次数: |
5302 次 |
| 最近记录: |