Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 单个服务中的多个部署_Kubernetes_Amazon Eks - Fatal编程技术网

Kubernetes 单个服务中的多个部署

Kubernetes 单个服务中的多个部署,kubernetes,amazon-eks,Kubernetes,Amazon Eks,我的后端有5个不同的部署,每个部署在一个特定的端口中为请求提供服务 前端服务与后端服务联系,提供必要的详细信息。后端服务应该能够决定为请求提供服务所需的pod(来自5个部署中的一个) 是否可以将单个服务链接到多个部署,而不是创建5个不同的服务 Kubernetes版本:1.12 正在使用的云: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>在
    /foo
    之后保留所有uri(
    /foo/something?parameter=parameter\u value
    /something?parameter=parameter\u value
    ),您的入口重写规则应该是这样的:
  • 冲突路由:避免冲突路由,例如
    路径:/foo/(.*)
    和路径:
    /foo/bar/(.*)
    ,其中对
    /foo/bar/something
    的请求将匹配这两条路径。这种行为可能很难预测,如果它像预期的那样起作用,它就不会稳定

提供单一服务的动机是什么?OPs认可的答案实现了这一点,并给出了一个很好的例子:
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