Kubernetes 将流量路由到具有特定标签的POD

Kubernetes 将流量路由到具有特定标签的POD,kubernetes,routing,envoyproxy,Kubernetes,Routing,Envoyproxy,我想在kubernetes中的网关和服务发现后面部署一个RESTService。有一段时间我将拥有我的RestService版本1和RestService版本2 两者都有完全相同的URL,但我可能会将它们部署在标记版本的pod中。当我调用RESTService时,我想在HTTP头中添加一些东西,表明我想使用V2 有什么办法可以让我的交通正常地到达吊舱吗?(我不确定使用标签是否正确)。我还必须记住,在未来我将有一个带有新服务的V3,我的URL将改变,它不能是静态配置的。我还将使用带有v1的serv

我想在kubernetes中的网关和服务发现后面部署一个RESTService。有一段时间我将拥有我的RestService版本1和RestService版本2

两者都有完全相同的URL,但我可能会将它们部署在标记版本的pod中。当我调用RESTService时,我想在HTTP头中添加一些东西,表明我想使用V2

有什么办法可以让我的交通正常地到达吊舱吗?(我不确定使用标签是否正确)。我还必须记住,在未来我将有一个带有新服务的V3,我的URL将改变,它不能是静态配置的。我还将使用带有v1的serviceA 用v3为b服务。两者都位于同一服务发现之后,必须使用header参数(或类似参数)正确路由

我不确定特使是否是这方面的正确组成部分,或者还有其他什么吗?我不确定我应该在什么时候放置这个组件。
我遗漏了一些东西,我仍然对库伯内特斯感到困惑。有人有类似的例子吗?

是的,服务采用标签选择器,如果您根据自己的版本设置标签,则可以使用该选择器。大多数入口控制器或其他代理都使用服务(而不是它管理的端点)来选择后端实例。

是的,服务采用标签选择器,如果您根据版本设置标签,则可以使用标签选择器。大多数入口控制器或其他代理不使用服务(或它管理的端点)来选择后端实例。

是的,您可以有两个部署
,具有不同的标签,例如

kind: Deployment
metadata:
  name: rest-service-v1
  labels:
    app: rest-service
spec:
  selector:
    matchLabels:
      app: rest-service
      version: v1
  template:
    metadata:
      labels:
        app: rest-service
        version: v1

kind: Deployment
metadata:
  name: rest-service-v3
  labels:
    app: rest-service
spec:
  selector:
    matchLabels:
      app: rest-service
      version: v3
  template:
    metadata:
      labels:
        app: rest-service
        version: v3
然后为以下各项创建
服务

kind: Service
metadata:
  name: rest-service-v1
spec:
  selector:
    app: rest-service
    version: v1

kind: Service
metadata:
  name: rest-service-v3
spec:
  selector:
    app: rest-service
    version: v3
最后是一个
入口
对象。但是,默认入口只能按路径路由。您可能会发现一个第三方入口控制器,它可以通过报头值进行路由


是的,您可以有两个具有不同标签的部署,例如

kind: Deployment
metadata:
  name: rest-service-v1
  labels:
    app: rest-service
spec:
  selector:
    matchLabels:
      app: rest-service
      version: v1
  template:
    metadata:
      labels:
        app: rest-service
        version: v1

kind: Deployment
metadata:
  name: rest-service-v3
  labels:
    app: rest-service
spec:
  selector:
    matchLabels:
      app: rest-service
      version: v3
  template:
    metadata:
      labels:
        app: rest-service
        version: v3
然后为以下各项创建
服务

kind: Service
metadata:
  name: rest-service-v1
spec:
  selector:
    app: rest-service
    version: v1

kind: Service
metadata:
  name: rest-service-v3
spec:
  selector:
    app: rest-service
    version: v3
最后是一个
入口
对象。但是,默认入口只能按路径路由。您可能会发现一个第三方入口控制器,它可以通过报头值进行路由


管理这两个和相应服务的不同部署文件是否也有问题?实际上,您可以使用重写目标类型的注释来使用相同的URL将流量路由到各自的后端服务。这听起来在许多方面都像,不过,在深入研究之前,您应该评估服务网格的范围及其功能和需求。由于您通常会运行多个版本的服务,一般的最佳实践是尝试确保
/v1
API路径在构建之间是向前和向后兼容的,而不是尝试使用一些辅助路径来影响请求路由。管理这两个和相应服务的不同部署文件是否也有问题,实际上,您可以使用重写目标类型的注释来使用相同的URL将流量路由到相应的后端服务。这听起来在许多方面都类似,不过在深入研究之前,您应该评估服务网格的范围及其功能和要求。由于您通常会运行多个版本的服务,因此一般的最佳实践是尝试确保
/v1
API路径在构建之间是向前和向后兼容的,而不是尝试使用一些辅助路径来影响请求路由。