gpt4 book ai didi

java - 在使用 k8s 部署应用程序时在本地测试应用程序代码

转载 作者:行者123 更新时间:2023-12-02 12:11:26 32 4
gpt4 key购买 nike

我们正在使用k8s来部署我们的应用程序,它工作得很好。但是有一个小问题。我们已经从http层通信转移到tcp层。不同微服务之间的通信是通过服务(k8s服务)名称和它效果很好,但开发人员无法在本地测试相同的代码,因为服务名称只能在集群内解析。所以这里有一些我有的解决方案:-
1. 为他们提供不同的 namespace ,他们可以在其中通过小的更改来测试应用程序。
这样做的问题是开发人员使用了一些断点并测试了代码中的一些小更改,并且通过这种方法很难进行调试。
2.他们可以在本地实现 minikube,但这对我来说也不好。
3.他们可以在本地运行ms的容器,并在/etc/hosts中输入与k8s服务名称相对应的容器ip。在此相同的代码将起作用。
欢迎任何其他更好的解决方案。
😔😔😭😭

最佳答案

您是否考虑过使用 spring boot profiles以此目的?我们在我们的团队中长期有效地使用它。为此,您必须将服务主机提取为 application.yml(或 application.properties)中的单独属性,并在其余属性中将此主机用作变量。以下片段解释了这一点

application.yml
----------------
serviceA:
host: service-A-Name
api-one-endpoint: http://${serviceA.host}/api/v1/one
api-two-endpoint: http://${serviceA.host}/api/v1/two
api-three-endpoint: http://${serviceA.host}/api/v1/three
api-four-endpoint: http://${serviceA.host}/api/v1/four
在生产中(任何托管/托管环境),您为 spring 属性 serviceA.host 提供适当的值。在您的用例中,您将按原样使用此值并提供 k8s 服务名称绑定(bind)。
对于本地开发环境,您只需要覆盖单个属性。对于简单的用例(假设您只需要覆盖单个属性),您可以将其作为 agrument 传递给您的 Spring Boot 启动器(例如“--serviceA.host=localhost”)。如果你有很多服务(你可能有),那么你只需要覆盖众所周知的少数主机名属性。在这种情况下,使用专用的开发配置文件要好得多。以下示例说明了相同的场景
application-dev.yml
-------------------
serviceA:
host: mylocalhost:9090
然后,通过添加“--spring.profiles.active=dev”作为附加参数,在 eclipse/intellij 启动器配置中使用此配置文件来执行或调试目的,spring boot 将使用来自 dev 配置文件的更新主机。事实上,结合这两种方法可以为您提供更多的灵 active 来处理高级案例。如果您同意跨团队的通用端口约定,那么您甚至可以 checkin application-dev.yml 以供每个人几乎原样使用。
spring boot 配置文件是更强大的功能,我强烈建议通过 it's documentation很少有教程( like this one )可以完全理解它并有效地利用它来解决像这样的用例。

关于java - 在使用 k8s 部署应用程序时在本地测试应用程序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62726845/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com