我习惯于使用telepresence连接到集群,并在本地访问集群服务。
现在,我需要使集群中的服务对在本地中运行的一组应用程序可用。我们可以说这是反向用例。
我有一个应用程序运行在一个码头容器。它访问使用docker-compose部署的服务。它是通过使用网络来完成的:
docker network create myNetwork
// Make app 1 to use it
docker network connect myNetwork app1
// App 2 uses docker compose, so myNetwork is defined in it and here I just:
docker-compose up我的app1正确地访问在app2中运行的容器/服务。但是,我仍然需要它来访问我的集群中的服务!
我尝试用telepresence构建一个从我的主机到集群的隧道,然后尝试像在我的主机中一样访问该服务。然而,这似乎不起作用。如果我进入我的app1容器并执行一个curl来查看服务名称是否解析:
curl:(6)无法解析主机: my_cluster_service_name
我的方法错了吗?我是不是错过了手术或考虑?我怎么能做到呢?
Docker版本:Docker version 19.03.8 for Mac
发布于 2020-05-12 08:06:00
我已经找到解决问题的办法了。
解决方案不是尝试使用telepresence作为反向用例,而是使用带有k9s的port-forward。在创建它时,重要的是不要离开设置为localhost的默认接口,并将0.0.0.0放在这里,以确保它侦听来自所有接口的通信。
然后,我从内部更改了容器,使服务在解析服务名称时指向主机的IP。使用更适合这种情况的方法:因为这不是一个生产环境,我只是尝试手动对主机IP进行硬编码,以检查是否实现了连接。
要指向集群的特定服务,您需要使用不同的端口,因为它们都将被映射到具有不同port-forwards的主机上。不再需要名称解析。
使用此配置,容器请求将到达主机,端口转发将其路由到集群。这种设置的连接性是可以的,问题已经解决了。
https://stackoverflow.com/questions/61732276
复制相似问题