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

问题描述

在查看链接器入口文档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

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

我对这些文档的阅读是否准确?还是我错过了什么?我希望避免为我在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是一个很好的解决方案,在这种情况下,如果它可以选择在标头中动态设置服务,那就太好了。

traefik项目中有一个open issue已经开放了一段时间。在这些情况下,最新的更新是对每个服务使用一个Ingress。

这里是similar question

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...