首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows上没有DNS解析和Kubernetes POD的Internet访问

Windows上没有DNS解析和Kubernetes POD的Internet访问
EN

Server Fault用户
提问于 2019-10-15 13:25:46
回答 1查看 2K关注 0票数 2

我在hyper上构建了一个集群(v1.15.4)

代码语言:javascript
复制
- linux node (master)
- linux node (worker)
- windows node (worker)
- networking - flannel (host-gw)
- mac spoofing enabled for vms

部署win-webserver.yaml测试windows是否工作。https://kubernetes.io/docs/setup/production-environment/windows/user-guide-windows-containers/

代码语言:javascript
复制
kubectl get pods -o wide 
NAME                             READY   STATUS    RESTARTS   AGE   IP           NODE   NOMINATED NODE   READINESS GATES
win-webserver-7779dc4df7-58qs2   1/1     Running   0          18m   10.42.2.41   node01   <none>           <none>
win-webserver-7779dc4df7-mb4sf   1/1     Running   0          18m   10.42.2.43   node01   <none>           <none>
win-webserver-7779dc4df7-w5kjt   1/1     Running   0          18m   10.42.2.44   node01   <none>           <none>
win-webserver-7779dc4df7-wm245   1/1     Running   0          18m   10.42.2.45   node01   <none>           <none>

kubectl get svc
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.43.0.1      <none>        443/TCP        122m
win-webserver   NodePort    10.43.91.255   <none>        80:30378/TCP   72m

部署运行良好,但是运行在windows上的容器无法解析dns和访问internet。

来自windows pod的DNS请求

代码语言:javascript
复制
DNS request timed out. 
timeout was 2 seconds. 
Server:  UnKnown     
Address:  10.43.0.10 

DNS request timed out. 
timeout was 2 seconds. 
DNS request timed out. 

也不能使用服务从linux访问荚。

代码语言:javascript
复制
curl http://10.43.91.255 --connect-timeout 30
curl: (28) Connection timed out after 30000 milliseconds

法兰绒原木

代码语言:javascript
复制
kubectl logs -n kube-system pod/kube-flannel-8dqcc -c kube-flannel
I1015 12:48:40.437400       1 main.go:527] Using interface with name eth0 and address 192.168.x.x
I1015 12:48:40.437491       1 main.go:544] Defaulting external address to interface address (192.168.x.x)
I1015 12:48:40.538336       1 kube.go:126] Waiting 10m0s for node controller to sync
I1015 12:48:40.538380       1 kube.go:309] Starting kube subnet manager
I1015 12:48:41.538500       1 kube.go:133] Node controller sync successful
I1015 12:48:41.538539       1 main.go:244] Created subnet manager: Kubernetes Subnet Manager - node02
I1015 12:48:41.538551       1 main.go:247] Installing signal handlers
I1015 12:48:41.538676       1 main.go:386] Found network config - Backend type: vxlan
I1015 12:48:41.538751       1 vxlan.go:120] VXLAN config: VNI=4096 Port=4789 GBP=false DirectRouting=false
W1015 12:48:41.539007       1 device.go:84] "flannel.4096" already exists with incompatable configuration: vtep (external) interface: 2 vs 3; recreating device
I1015 12:48:41.632647       1 main.go:317] Wrote subnet file to /run/flannel/subnet.env
I1015 12:48:41.632666       1 main.go:321] Running backend.
I1015 12:48:41.632675       1 main.go:339] Waiting for all goroutines to exit
I1015 12:48:41.632695       1 vxlan_network.go:60] watching for new subnet leases
E1015 13:01:19.765370       1 vxlan_network.go:101] error decoding subnet lease JSON: invalid MAC address
E1015 13:11:30.468144       1 vxlan_network.go:101] error decoding subnet lease JSON: invalid MAC address

任何建议都很感激。

更新

我设法让我的集群正常工作。通信失败的原因是我有两个网络连接到每台kubernetes机器上。

代码语言:javascript
复制
linux master - internet facing eth0 (192.168.6.2) eth1 (192.168.3.12)
linux worker - internet facing eth0 (192.168.6.3) eth1 (192.168.3.13)
windows node - internet facing Ethernet_LB (192.168.6.4) Ethernet_FW (192.168.3.14)  

在没有互联网连接的Ethernet_FW上创建了windows上的虚拟开关。在运行Wireshark和tdcdump之后,我发现

  • 主机上的吊舱通过eth0将流量发送到windows吊舱

  • windows节点上的pods向linux pods visa Ethernet_FW发送通信量

  • 窗口中的pods通过Ethernet_FW将流量发送到internet。

这导致了豆荚之间的沟通失败。

我能够配置windows节点,在Ethernet_LB上创建虚拟交换机,该交换机具有internet访问功能,该接口(Ethernet_LB)接受来自主机和linux工作人员的数据包。

在创建集群时,我使用了以下资源https://kubernetes.io/docs/setup/production-environment/windows/user-guide-windows-nodes/

我必须将正确的接口名放入配置文件中。

代码语言:javascript
复制
"InterfaceName" : "Ethernet_LB" 
EN

回答 1

Server Fault用户

发布于 2021-03-11 12:34:14

这是一个社区wiki的答案,张贴了更好的能见度。可以自由地扩展它。

正如@dzup4uk已经证实的那样,通信失败的原因是每个kubernetes机器都有两个网络连接。

代码语言:javascript
复制
linux master - internet facing eth0 (192.168.6.2) eth1 (192.168.3.12)
linux worker - internet facing eth0 (192.168.6.3) eth1 (192.168.3.13)
windows node - internet facing Ethernet_LB (192.168.6.4) Ethernet_FW (192.168.3.14)  

在没有互联网连接的Ethernet_FW上创建了windows上的虚拟开关。在运行Wireshark和tdcdump之后,我发现

  • 主机上的吊舱通过eth0将流量发送到windows吊舱
  • windows节点上的pods向linux pods visa Ethernet_FW发送通信量
  • windows中的pods通过Ethernet_FW将流量发送到internet,这导致pods. I能够配置windows节点在具有internet访问的Ethernet_LB上创建虚拟交换机,该接口(Ethernet_LB)接受来自主机和linux工作人员的数据包。

它需要将正确的接口名称放入配置文件中。

代码语言:javascript
复制
"InterfaceName" : "Ethernet_LB" 

Kubernetes集群v1.19.7是使用WindowsServer2019构建的,最新更新作为Windows工作节点。

在创建集群时,使用了以下资源:

其他有用资源:

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/988081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档