使用特定标签将流量路由到PODS

时间:2019-11-08 02:15:51

标签: kubernetes routing envoyproxy

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

两者都具有完全相同的URL,但是我可以将它们部署在标记版本的Pod中。当我调用RESTService时,我想在HTTP标头中添加一些内容,表明我想使用我的V2。

有什么方法可以将流量正确路由到Pod集? (我不确定使用标签是否正确)。我还必须谨记,将来我将使用带有新服务的V3,并且我的网址也会更改,它不能是静态配置的。我还将在v1中使用serviceA 以及带有v3的servicesB。两者都在同一个服务发现之后,都必须使用header参数(或类似参数)正确路由。

我不确定Envoy是否适合此操作,还是还有其他内容?我不确定何时应该放置此组件。 我错过了一些东西,我仍然对kubernetes感到困惑。有人有类似的例子吗?

2 个答案:

答案 0 :(得分:1)

是的,服务需要标签选择器,如果您根据版本设置标签,则可以使用该标签选择器。大多数Ingress Controller或其他代理都使用服务(或由它管理的端点)来选择后端实例。

答案 1 :(得分:1)

是的,您可以有两个 Deployment,带有不同的标签,例如

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

然后为每个创建一个Service

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

,最后是一个Ingress对象。但是,默认的Ingress只能通过 path 进行路由。您可能会找到可以按 Header Value

进行路由的第三方Ingress Controller
kind: Ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /v1/*
        backend:
          serviceName: rest-service-v1
          servicePort: 8080
      - path: /v3/*
        backend:
          serviceName: rest-service-v3
          servicePort: 8080