Kubernetes 单个服务中的多个部署
我的后端有5个不同的部署,每个部署在一个特定的端口中为请求提供服务 前端服务与后端服务联系,提供必要的详细信息。后端服务应该能够决定为请求提供服务所需的pod(来自5个部署中的一个) 是否可以将单个服务链接到多个部署,而不是创建5个不同的服务 Kubernetes版本:1.12 正在使用的云:Amazon EKS 附言:我的要求与你的不同Kubernetes 单个服务中的多个部署,kubernetes,amazon-eks,Kubernetes,Amazon Eks,我的后端有5个不同的部署,每个部署在一个特定的端口中为请求提供服务 前端服务与后端服务联系,提供必要的详细信息。后端服务应该能够决定为请求提供服务所需的pod(来自5个部署中的一个) 是否可以将单个服务链接到多个部署,而不是创建5个不同的服务 Kubernetes版本:1.12 正在使用的云:Amazon EKS 附言:我的要求与你的不同 类似的问题没有得到回答:对你的追求的确切答案是:今天不可能。 正如您在和中正确看到的(都面临相同的情况),这可能是未来的实现 一种可能的解决方案/解决方法是将
类似的问题没有得到回答:对你的追求的确切答案是:今天不可能。 正如您在和中正确看到的(都面临相同的情况),这可能是未来的实现 一种可能的解决方案/解决方法是将问题委托给上层,但基本上取决于情况,并且始终需要不同的服务 假设您的部署是5个执行不同操作的不同应用程序(否则,为什么5个不同的部署而不是1个具有
n
replica?),并且假设它们是http应用程序,您可以使用将流量分配到正确的部署/服务(假设每个部署一个服务)
如果您的5个部署一起创建/更新/管理(例如:都在同一个头盔部署中),您可以创建扇出入口:
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
等等
创建5个入口或1个扇出应产生相同的结果
这种方法适用于a,但只需注意两件事
- 路径匹配:与nginx控制器版本>0.22
完全匹配。例如,如果您想从nginx.ingres.kubernetes.io/rewrite-target://
重定向到/foo
//code>在
之后保留所有uri(/foo
到/foo/something?parameter=parameter\u value
),您的入口重写规则应该是这样的:/something?parameter=parameter\u value
- 冲突路由:避免冲突路由,例如
和路径:路径:/foo/(.*)
,其中对/foo/bar/(.*)
的请求将匹配这两条路径。这种行为可能很难预测,如果它像预期的那样起作用,它就不会稳定/foo/bar/something
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
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