2

我正在使用 Docker for Windows (docker-desktop),它附带一个小型单节点 kubernetes 实例。我有一个场景,我的 pod 需要与运行在同一 localhost(windwos 10 机器)上但在 k8s 集群之外的一些外部服务进行通信。

我知道我可以kubernetes.docker.internal在集群内使用来访问我的node/localhost. 但不幸的是,Pod 在图像中有一些我不想更改的默认连接字符串 - 假设 Pod 默认尝试连接到 dns 字符串 - “my-server”。因此,在我的场景中,我想定义一个名为“my-server”的 K8s 服务,该服务具有对 kubernetes.docker.internal 的端点引用,以便 kube-proxy 将其正确路由到我的本地主机,即我的 windows 10 机器。

这有可能吗?我已经检查过这个解决方案,但它谈到了在其他节点或云上运行的外部服务。我也在考虑将本地计算机主机名作为外部名称,但这在我的用例的 dns 解析中并不完全可靠。所以我真的很想使用kubernetes.docker.internal作为服务端点。有什么想法吗?

4

2 回答 2

2

我使用的一个技巧是将内部 IP 地址转发回 127.0.0.1 它运行良好。

# linux
sudo iptables -t nat -A OUTPUT -p all -d 10.0.100.100 -j DNAT --to-destination 127.0.0.1

# osx 
sudo ifconfig lo0 alias 10.0.100.100
于 2021-01-11T02:35:34.653 回答
0

我知道我可以kubernetes.docker.internal在集群内使用来访问我的node/localhost.

如果您确定可以通过此地址访问您的 Windows 机器,则有一些解决方案。

Kubernetes允许您修改/etc/hosts任何Pod. 我假设kubernetes.docker.internal解析到一些IP。如果你知道这个 IP,你可以将它添加到/etc/hosts容器使用的文件中Pod。这种方式可以将你想要的任何域名映射到这个IP。详情请参考kubernetes 文档中的这篇文章。


如果由于某种原因无法在这种情况下使用 IP,还有另一种解决方案。您可以使用插件修改core-dns的默认行为。这篇文章rewrite很好地描述了它。

于 2020-01-17T20:34:00.313 回答