通过入口将微服务链接到测试/ dev / prod环境

时间:2018-05-10 09:55:58

标签: kubernetes microservices kubernetes-ingress

让我们考虑一下我们有三个环境:

  • test.website.com
  • dev.website.com
  • prod.website.com

每个环境都包含以下微服务:webapp,service1,service2。我希望能够轻松地从JS前端调用所有服务,而无需处理域。如果我可以拨打/services/service1/并且我在同一个域中的事实会让我处于相同的环境中,那就太棒了。

所以让我们考虑开发环境:

  • dev.website.com/ - >转到webapp
  • dev.website.com/services/service1/ - >转到service1
  • dev.website.com/services/service1/ ...

为了能够做到这一点,我按如下方式配置了入口:

    - path: /services/service1/*
      backend:
        serviceName: service1
        servicePort: 8080
    - path: /services/service2/*
      backend:
        serviceName: service2
        servicePort: 8080
    - path: /*
      backend:
        serviceName: webapp
        servicePort: 8080

这样做会很好,但事实并非如此。

  1. 第一个问题是service1在被调用时会收到完整路径(/services/service1),而不仅仅是/。为此,我发现了这个:ingress.kubernetes.io/rewrite-target: / - 但我也认为这个功能没有实现,这是矛盾的,没有多大意义。
  2. 第二个问题是,未遵循服务的顺序,/services/service1/上的呼叫最终在webapp
  3. 这是一个好方法吗?这样做的最佳做法是什么?

    修改

    根据建议我从路径中删除*,这有助于,但也删除了必要的功能。我需要能够使用:

    • /en/ - > webapp
    • /services/service1/method1 - > service1

    如果路径中没有*,则无效。

1 个答案:

答案 0 :(得分:1)

  1. 根据documentation of nginx-ingress,注释前缀现在为nginx.ingress.kubernetes.io,而不是您使用的ingress.kubernetes.io。您可以使用参数--annotations-prefix更改它。

  2. 尝试从*删除通配符(path):

  3. - path: /service/service1
      backend:
        serviceName: service1
        servicePort: 8080
    - path: /service/service2
      backend:
        serviceName: service2
        servicePort: 8080
    - path: /
      backend:
        serviceName: webapp
        servicePort: 8080