【问题标题】:Make k8s cluster services available to local docker containers使 k8s 集群服务可用于本地 docker 容器
【发布时间】:2020-05-11 14:35:35
【问题描述】:

我习惯使用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 以查看服务名称是否解析:

curl: (6) 无法解析主机:my_cluster_service_name

我的方法错了吗?我错过了一项操作或考虑吗?我怎么能做到呢?

Docker 版本:Docker version 19.03.8 for Mac

【问题讨论】:

    标签: macos docker networking kubernetes docker-compose


    【解决方案1】:

    我已经找到解决问题的方法了。

    与其尝试使用telepresence 作为反向用例,解决方案是使用port-forwardk9s。创建它时,重要的是不要离开默认接口,即设置为localhost,而是设置0.0.0.0,以确保它侦听来自所有接口的流量。

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

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

    使用此配置,您的容器请求将到达您的主机,端口转发将其路由到集群。此设置连接正常,问题已解决。

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 2022-08-13
      • 2023-03-03
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      相关资源
      最近更新 更多