我是否必须使用 Linkerd 为每个服务定义一个入口?

Do I have to define an ingress per service with Linkerd?

查看 linkerd ingress 文档 here 它说我需要创建一个注释为

的入口
ingress.kubernetes.io/custom-request-headers: l5d-dst-override:web-svc.emojivoto.svc.cluster.local:80

此注释特定于单个服务,这听起来好像每个服务都必须有一个带有自己注释的新入口。例如,我不能有类似下面的东西:

spec:
  rules:
      - host: example.com
        http:
          paths:
            - path: /path-one
              backend:
                serviceName: service-1
                servicePort: 80
            - path: /path-two
              backend:
                serviceName: service-2
                servicePort: 80

我可以在单个入口中定义不同服务的路径 class。

我对这些文档的阅读准确吗?还是我错过了什么?我希望避免为我在 linkerd.运行 中的每个服务创建入口。

是的,不幸的是,如果您想使用 ingress.kubernetes.io/custom-request-headers,您正确地理解了为每个服务创建单独的入口。 是的,如果您有 1000 个服务 - 您应该创建 1000 个入口以使其正常工作。

入口 1:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web-ingress
  namespace: marcus
  annotations:
    kubernetes.io/ingress.class: "traefik"
    ingress.kubernetes.io/custom-request-headers: l5d-dst-override:service1.marcus.svc.cluster.local:80
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
        path: /

入口 2:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web-ingress
  namespace: marcus
  annotations:
    kubernetes.io/ingress.class: "traefik"
    ingress.kubernetes.io/custom-request-headers: l5d-dst-override:service2.marcus.svc.cluster.local:80
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80
        path: /

Traefik 是一个很好的解决方案,在这种情况下,如果它可以选择在 header.

中动态设置服务,那就太好了

在开了一段时间的traefik项目中有一个关于这个的open issue。最后的更新是在这些场景中为每个服务使用一个 Ingress。

这里是similar question