您可以使用 Traefik 将流量转发到动态服务吗?

Can you forward traffic to a dynamic service using Traefik?

下面是一个例子IngressRoute

我想要这样的东西,其中域的第一部分将映射到 Kubernetes 服务,而无需静态定义服务名称。

service1.api.test.com -> 服务 1

service2.api.test.com -> 服务 1

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: ingressroute
  namespace: default
spec:
  entryPoints:
    - web
  routes:
  - match: "HostRegexp(`{subdomain:[a-z]+}.api.test.com`)"
    kind: Rule
    services:
    - name: whoami  # can this be dynamic?
      port: 80

不,这不可能。因为即使您能够匹配主机正则表达式,它也不知道请求需要转到哪个服务。

因此您需要在同一个入口路由中为不同的服务创建两个单独的匹配项

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: ingressroute
  namespace: default
spec:
  entryPoints:
    - web
  routes:
  - match: "HostRegexp(`someservice.yourdomain.com`) && PathPrefix(`/`)"
    kind: Rule
    services:
    - name: whoamiV1
      port: 80
  - match: "HostRegexp(`yourdomain.com`,`{subdomain:[a-zA-Z0-9-]+}.yourdomain.com`) &&PathPrefix(`/api/someservice/`)"
    kind: Rule
    services:
    - name: whoamiV2
      port: 80

详情请参考docs