使k8s集群服务可用于本地docker容器

时间:2020-05-11 14:35:35

标签: macos docker networking kubernetes docker-compose

我习惯使用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)

1 个答案:

答案 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" 用于反向用例,而是通过将telepresenceport-forward一起使用来解决。创建它时,重要的是不要保留默认接口(设置为k9s,而放localhost来确保它侦听来自所有接口的流量。

然后,我从内部更改了容器,使服务在尝试解析服务名称时指向主机的IP。使用更适合您的情况的方法:由于它不是生产环境,因此我只是尝试手动对主机IP进行硬编码,以检查是否已实现连接。

要指向群集的特定服务,您需要使用不同的端口,因为它们将全部通过不同的0.0.0.0映射到您的主机。不再需要名称解析。

使用此配置,您的容器请求将到达您的主机,在此端口转发将其路由到群集。使用此设置可以连接,并且问题得以解决。