我正在容器化我们的微服务架构,我们的微服务由10个express.js应用程序、一个前端和nginx反向代理。管理端口似乎是一场噩梦,想知道最佳实践-动态端口Map或为Express服务使用相同的端口。最好使用相同的容器端口吗(80或3000)或使用动态端口Map和端口环境变量,然后使用配置/yaml文件中的变量?
- 我们希望扩展到其他编排系统(K8)
最初,我们在Docker运行时在docker文件和compose/config文件中分配端口,但这似乎有些过头,而且管理起来很麻烦。我看到过对容器使用相同端口而对主机公开不同端口的示例
1条答案
按热度按时间jxct1oxe1#
在容器化的系统中,每个服务使用相同的端口并不成问题,因为每个容器/pod都有一个唯一的IP。这样做的好处是部署服务时易于管理。这种方法的一个问题是本地开发,因为开发人员通常希望在docker之外运行微服务。这可以通过本地开发人员配置来缓解,本地开发人员配置为服务指定不同的端口。
微服务架构中的另一种方法是使用etcd、consul或zookeeper等工具进行服务发现,使用这种方法,所有端口都是动态的,由服务发现,并且可以由微服务开发者自由选择。
通常端口不直接暴露给主机,因为您希望在服务之前有一个负载平衡器。