微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 microk8s 部署 pod 访问我网络中的主机

如何解决如何从 microk8s 部署 pod 访问我网络中的主机

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

问题是,在我安装了 microk8s 的服务器上,我可以轻松地通过 ping my-network-host.qa.local ping 它。但是当我使用 microk8s kubectl exec -it pod_name -- /bin/bash 进入 Pod 并执行 ping my-network-host.qa.local 时,它说:Name or service not kNown

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

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

附言我可以从 pod ping 该服务器的 ip,但我无法从 pod ping 主机

解决方法

根据我在 StackOverflow 上找到的 another answer,我设法修复了它。

需要进行 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 forward 更改为指向您的域名服务器:

首先打开 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*//'

就我而言,我已经在 /run/systemd/resolve/resolv.conf 上将 ip 作为名称服务器。

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

另一篇文章中有一条评论建议添加

forward . /etc/resolv.conf

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

,

当您创建 k8s 网络时,k8s 会为该网络创建一个 LAN,并且每个 pod 都会获得网络内的 IP 地址和主机名,该 k8s 网络通过为 k8s 提供的 my-network-host.qa.local 与您的本地 LAN 通信网络。

因此,当您在 Pod 内bash时,您看不到my-network-host.qa.local ,您会看到连接所有 Pod 的 k8s LAN,并且每个 Pod 都有一个特定的 IP 地址和一个k8s 网络 IP 空间中的主机名。

因此,不要使用 LAN 上的 IP,您应该使用来自 k8s LAN 的 IP 或主机名来从 k8s 网络内访问特定的 pod。

如果您的 pod 需要访问不同网络上的服务,则该网络需要可从 k8s 网络内访问。你也可以创建一个 k8s headless-service

假设您想连接到本地主机上的 Mongolen。在这种情况下,我们可以在集群内为它创建一个 [headless service][1] 和端点……mongodb-service.yaml 文件应该如下所示:

apiVersion: v1
kind: Service
metadata:
   name: mongodb-service
spec:
   clusterIP: None
   ports:
   - protocol: TCP
     port: the-port 
     targetPort: the-port 
   selector:  
     name:  example
   type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mongodb-service
subsets:
  - addresses:
    - ip: the-kluster-ip 
    ports:
      - port: the-port

创建服务和端点后,您可以在该集群的任何 Pod 内使用 mongodb-service 名称和端口作为目标点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。