首页 > 解决方案 > 如何从 microk8s 部署 pod 访问我网络中的主机

问题描述

我正在尝试从部署 pod 内部访问位于另一台服务器(但在我的网络上)中的主机,并且我正在使用microk8s.

问题是在我microk8s安装的服务器上,我可以轻松地通过ping my-network-host.qa.local. 但是当我进入吊舱时microk8s kubectl exec -it pod_name -- /bin/bash,我ping my-network-host.qa.local会说:Name or service not known

当我连接到我的计算机上的 VPN 以在该网络上并使用它在本地部署它时,docker-desktop kubernetes我可以从 pod 内 ping 该主机。所以我认为问题microk8s在于不让我的 pod 使用我的网络。

有什么方法可以告诉 microk8s 从我的网络使用我的主机吗?

ps 我可以从 pod pingip那台服务器,但我无法从 pod ping 主机

标签: linuxkubernetesnetworkingmicrok8s

解决方案


根据我在 StackOverflow 上找到的另一个答案,我设法修复了它。

需要进行 2 处更改才能使其正常工作:

更新kubelet 配置以使用resolv-conf

sudo echo "--resolv-conf=/run/systemd/resolve/resolv.conf" >> /var/snap/microk8s/current/args/kubelet

重启 kubelet 服务:

sudo service snap.microk8s.daemon-kubelet restart

然后将CoreDNS 转发更改为指向您的名称服务器:

首先打开 coredns 配置映射,以便您可以编辑它

sudo microk8s.kubectl edit configmap coredns -n kube-system

并更新文件

forward . 8.8.8.8 8.8.4.4 #REMOVE THIS LINE
forward . xxx.xxx.xxx.xxx #ADD THIS WITH YOUR IP

您可以获得 eth0 DNS 地址:

nmcli dev show 2>/dev/null | grep DNS | sed 's/^.*:\s*//'

在我的情况下,我已经将 ip 作为名称服务器/run/systemd/resolve/resolv.conf

现在只需保存更改,然后进入您的 pod,以便您可以访问它们。

另一个帖子中有评论建议添加

forward . /etc/resolv.conf

但这对我的情况不起作用。


推荐阅读