Windows节点上的Kubernetes服务无法访问

时间:2018-12-05 16:59:35

标签: windows docker networking kubernetes flannel

我目前正在Linux / Windows Kubernetes混合集群上工作。 当前有4个节点,作为VM在单个物理服务器上的VMWare群集中运行:

  • 在debian Stretch上运行并使用kubeadm配置的3个Linux节点
  • 1个基于Microsoft's documentation配置的Windows Server 2019(1809)节点。

按照Microsoft的建议,我正在以host-gw模式使用法兰绒进行网络连接。 IP已在其各自范围内正确分配给Pod和服务(Pod为10.244.0.0/16,服务为10.96.0.0/12)。

整个过程都在Kubernetes 1.13上运行。从1.12.3升级而来,法兰绒二进制文件也从Microsoft/SDN也立即下载。

用于启动服务的Windows Powershell命令:

.\start.ps1 -ManagementIP 10.71.145.37 -ClusterCIDR 10.244.0.0/16 -ServiceCIDR 10.96.0.0/12 -KubeDnsServiceIP 10.96.0.10

在做什么?

  • Linux pod-> Linux pod:是
  • Linux pod-> Windows pod:是
  • Windows pod-> Linux pod:是
  • Windows pod-> Windows pod:是
  • Linux pod-> Linux服务:是
  • Linux pod-> Windows服务:否
  • Windows pod-> Linux服务:否
  • Windows pod-> Windows服务:否
  • Linux主机-> Linux吊舱:是
  • Linux主机-> Windows容器:是​​
  • Windows主机-> Linux吊舱:是
  • Windows主机-> Windows窗格:是
  • Linux主机-> Linux服务:是
  • Linux主机-> Windows服务:否
  • Windows主机-> Linux服务:否
  • Windows主机-> Windows服务:否

长话短说:与Pod的直接连接可在Windows和Linux上运行,服务连接仅适用于Linux服务(由Linux Pod支持的服务),并且仅适用于Linux Pod或主机。

DNS解析也有效,尽管我无法在Windows吊舱上解析service.namespace,仅主机名或FQDN有效,而在两者之间却无济于事。

从Linux节点路由表:

# host linux-node-1: 10.71.144.71
root@linux-node-1:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.71.144.1     0.0.0.0         UG    0      0        0 ens32
10.71.144.0     0.0.0.0         255.255.252.0   U     0      0        0 ens32
10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.1.0      linux-node-2    255.255.255.0   UG    0      0        0 ens32
10.244.2.0      linux-node-3    255.255.255.0   UG    0      0        0 ens32
10.244.5.0      windows-node-1  255.255.255.0   UG    0      0        0 ens32
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

# host linux-node-2: 10.71.147.15
root@linux-node-2:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.71.144.1     0.0.0.0         UG    0      0        0 ens32
10.71.144.0     0.0.0.0         255.255.252.0   U     0      0        0 ens32
10.244.0.0      linux-node-1    255.255.255.0   UG    0      0        0 ens32
10.244.1.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.2.0      linux-node-3    255.255.255.0   UG    0      0        0 ens32
10.244.5.0      windows-node-1  255.255.255.0   UG    0      0        0 ens32
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

# host linux-node-3: 10.71.144.123
root@linux-node-3:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.71.144.1     0.0.0.0         UG    0      0        0 ens32
10.71.144.0     0.0.0.0         255.255.252.0   U     0      0        0 ens32
10.244.0.0      linux-node-1    255.255.255.0   UG    0      0        0 ens32
10.244.1.0      linux-node-2    255.255.255.0   UG    0      0        0 ens32
10.244.2.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.5.0      windows-node-1  255.255.255.0   UG    0      0        0 ens32
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

Windows节点中的路由表:

PS C:\k> route print
===========================================================================
Interface List
  9...00 50 56 89 69 ce ......Hyper-V Virtual Ethernet Adapter #2
 21...00 15 5d 8d 98 26 ......Hyper-V Virtual Ethernet Adapter #3
  1...........................Software Loopback Interface 1
 12...00 15 5d 84 c0 c9 ......Hyper-V Virtual Ethernet Adapter
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      10.71.144.1     10.71.145.37     25
          0.0.0.0          0.0.0.0       10.244.5.1       10.244.5.2    281
      10.71.144.0    255.255.252.0         On-link      10.71.145.37    281
     10.71.145.37  255.255.255.255         On-link      10.71.145.37    281
     10.71.145.37  255.255.255.255      10.71.144.1     10.71.145.37    125
    10.71.147.255  255.255.255.255         On-link      10.71.145.37    281
       10.244.0.0    255.255.255.0     10.71.144.71     10.71.145.37    281
       10.244.1.0    255.255.255.0     10.71.147.15     10.71.145.37    281
       10.244.2.0    255.255.255.0    10.71.144.123     10.71.145.37    281
       10.244.5.0    255.255.255.0         On-link        10.244.5.2    281
       10.244.5.2  255.255.255.255         On-link        10.244.5.2    281
     10.244.5.255  255.255.255.255         On-link        10.244.5.2    281
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
      172.27.80.0    255.255.240.0         On-link       172.27.80.1   5256
      172.27.80.1  255.255.255.255         On-link       172.27.80.1   5256
    172.27.95.255  255.255.255.255         On-link       172.27.80.1   5256
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link       172.27.80.1   5256
        224.0.0.0        240.0.0.0         On-link      10.71.145.37    281
        224.0.0.0        240.0.0.0         On-link        10.244.5.2    281
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link       172.27.80.1   5256
  255.255.255.255  255.255.255.255         On-link      10.71.145.37    281
  255.255.255.255  255.255.255.255         On-link        10.244.5.2    281
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0       10.244.5.1  Default
       10.244.0.0    255.255.255.0     10.71.144.71  Default
       10.244.1.0    255.255.255.0     10.71.147.15  Default
       10.244.2.0    255.255.255.0    10.71.144.123  Default
          0.0.0.0          0.0.0.0       10.244.5.2  Default
     10.71.145.37  255.255.255.255      10.71.144.1     100
===========================================================================

从Windows pod到kube-dns的路由:

C:\>tracert -4 -d -h 10 10.96.0.10

Tracing route to 10.96.0.10 over a maximum of 10 hops
  2
  1     *        *        *     Request timed out.
  2     *        *        *     Request timed out.
  3     *        *        *     Request timed out.
  4     *        *        *     Request timed out.
  5     *        *        *     Request timed out.
  6     *        *        *     Request timed out.
  7     *        *        *     Request timed out.
  8     *        *        *     Request timed out.
  9     *        *        *     Request timed out.
 10     *        *        *     Request timed out.

Trace complete.

从Linux Pod到kube-dns的路由:

root@deb:/# traceroute -4 -n 10.96.0.10
traceroute to 10.96.0.10 (10.96.0.10), 30 hops max, 60 byte packets
 1  10.244.2.1  0.396 ms  0.336 ms  0.314 ms
 2  10.71.144.1  7.044 ms  9.939 ms  10.062 ms
 3  10.71.144.2  1.727 ms  1.917 ms 10.71.144.3  1.233 ms
 4  10.68.132.166  6.985 ms 10.68.132.162  7.934 ms  8.404 ms
 5  10.103.4.246  203.807 ms  203.405 ms  203.777 ms
 6  10.103.4.245  209.431 ms  209.348 ms  209.772 ms
 7  10.96.108.86  496.457 ms  502.957 ms  494.978 ms
 8  10.96.0.10  211.666 ms * *

跳1是pod网络地址,跳2和3是Linux主机的标准网关(VRRP),跳7是物理网络中的交换机,跳8是kube-dns服务,其余的跳( 4-6)可能是物理网络中的Cisco路由器。

DNS查询正常工作,我可以从主机ping 10.96.0.1(kubernetes服务)和10.96.0.10(kube-dns),这使我相信路由正常,但是我无法ping其他任何服务地址我也不能从Windows主机卷曲我的入口控制器。

禁用Windows防火墙也没有任何作用。

我对我还能在此处检查的内容一无所知,并且四处搜索几乎没有带来任何适用的内容。

1 个答案:

答案 0 :(得分:0)

关于Windows服务失败: 您可以发布CollectLogs.ps1输出(https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/windows/debug/collectlogs.ps1)和您的CNI配置文件吗? Windows pod可以访问外部互联网吗(例如curl -useb http://google.com?)

此外,最近在KubeCon上有一段视频,详细介绍了如何对Windows上的Kubernetes网络问题进行故障排除,您可能会发现有帮助:https://www.youtube.com/watch?v=tTZFoiLObX4&feature=youtu.be

关于service.namespace的解析,不幸的是,今天,通过Windows上DNS解析器的设计,这是行为上的区别,从而对包含点的任何名称搜索都进行了权威处理。这也是为什么默认的CNI配置文件没有在SearchList中指定的所需DNS足够的原因,而该列表今天不可用。此行为不会在Windows Server 1903版之前更改。