我习惯使用telepresence
连接到群集并在本地访问群集服务。
现在,我需要使群集中的服务对本地在docker容器中运行的一组应用程序可用。我们可以说这是逆用例。
我有一个在Docker容器中运行的应用程序。它访问使用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
以查看服务名称是否解析:
卷曲:(6)无法解析主机:my_cluster_service_name
我的方法错误吗?我错过了一项手术或考虑事项吗?我该怎么办?
Docker版本:Docker version 19.03.8
(对于Mac)
答案 0 :(得分:1)
我找到了解决问题的方法。
解决方案不是尝试将[HKEY_CLASSES_ROOT\TypeLib\{AXXXXXX-1XXX-4XXX-9XXX-4XXXXXXXXXX}\1.0\0\win32]
@="C:\\Program Files (x86)\\Blaaa\\bin\\x64\\MyFancy.dll\\1"
用于反向用例,而是通过将telepresence
与port-forward
一起使用来解决。创建它时,重要的是不要保留默认接口(设置为k9s
,而放localhost
来确保它侦听来自所有接口的流量。
然后,我从内部更改了容器,使服务在尝试解析服务名称时指向主机的IP。使用更适合您的情况的方法:由于它不是生产环境,因此我只是尝试手动对主机IP进行硬编码,以检查是否已实现连接。
要指向群集的特定服务,您需要使用不同的端口,因为它们将全部通过不同的0.0.0.0
映射到您的主机。不再需要名称解析。
使用此配置,您的容器请求将到达您的主机,在此端口转发将其路由到群集。使用此设置可以连接,并且问题得以解决。