Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 将微服务链接到具有入口的测试/开发/产品环境 我们考虑三个环境: test.website.com dev.website.com prod.website.com_Kubernetes_Microservices_Kubernetes Ingress - Fatal编程技术网

Kubernetes 将微服务链接到具有入口的测试/开发/产品环境 我们考虑三个环境: test.website.com dev.website.com prod.website.com

Kubernetes 将微服务链接到具有入口的测试/开发/产品环境 我们考虑三个环境: test.website.com dev.website.com prod.website.com,kubernetes,microservices,kubernetes-ingress,Kubernetes,Microservices,Kubernetes Ingress,每个环境都由以下微服务组成:webapp、service1、service2。我希望能够轻松地从JS前端调用所有服务,而不必处理域。如果我能打电话给/services/service1/那就太好了,因为我在同一个域上,所以我会一直呆在同一个环境中 所以让我们考虑DEV环境: dev.website.com/>转到webapp dev.website.com/services/service1/>转到service1 dev.website.com/services/service1/。。。 为了

每个环境都由以下微服务组成:webapp、service1、service2。我希望能够轻松地从JS前端调用所有服务,而不必处理域。如果我能打电话给/services/service1/那就太好了,因为我在同一个域上,所以我会一直呆在同一个环境中

<>所以让我们考虑DEV环境:

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
这将非常有效,但实际上并非如此

第一个问题是service1接收完整路径/services/service1,而不是仅/在被调用时。为此,我发现了以下内容:ingres.kubernetes.io/rewrite-target:/-但我也发现这个功能没有实现,这是矛盾的,没有多大意义。 第二个问题是,没有遵循服务的顺序,调用/services/service1/最终会出现在webapp中。 这是一个好方法吗?这样做的最佳实践是什么

编辑:

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

/en/->webapp /服务/service1/method1->service1 如果没有*in路径,这将无法工作

根据,注释前缀现在是nginx.ingres.kubernetes.io,而不是您使用的ingres.kubernetes.io。可以使用参数-annotations前缀对其进行更改

尝试从路径中删除通配符*:


ad 1这将使用nginx而不是gce,我们希望避免这种情况,因为我们会失去gce的许多优势。你能详细说明一下这是否是一个好的做法,如果这是一个应该这样做的方式吗?你需要gce ingress的哪些功能?正如达米亚诺所写,我同意他的观点:默认的GCE入口控制器功能有限。这包括缺乏对TLS和IP白名单的支持。此外,我们注意到在应用配置更改时出现了巨大的延迟。关于功能:我被告知使用nginx将导致丢失本机gce入口监控、HA和日志记录。我不确定这是不是真的,但由于我只有基本知识,我无法讨论。您可以通过设置指向nginx控制器服务的gce负载平衡器来获得这些功能。尝试为每个路径添加这两个功能,使用通配符和不使用./serviceS/service1/在webapp中结束,我认为应该是/service/service1/这种方法是正确的,但是您是否定义了主机?你能分享kubectl描述ing入口和完整的入口文件吗?我在我的问题中解决了服务与服务的问题,谢谢你提到这一点。我无法提供完整的入口,因为这是一个虚构的入口yaml。我将不得不提供我们的生产一个我不愿意。
- path: /service/service1
  backend:
    serviceName: service1
    servicePort: 8080
- path: /service/service2
  backend:
    serviceName: service2
    servicePort: 8080
- path: /
  backend:
    serviceName: webapp
    servicePort: 8080