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