所以我的目标是使用Windows Server 1803版工作程序,以便它可以运行Windows 2016等旧版本的映像。
我的主节点和工作节点都处于离线环境。
为此,我遵循了tutorial的Host-gateway设置,并且我还将Ubuntu主节点和Windows节点上的Kubernetes二进制版本升级到v1.10.6,因为v1.9不支持hyperv隔离。
使用选项--isolation=hyperv
,我可以运行此类图像并通过容器172 ...地址与其连接,但这直接是通过Kubernetes外部的docker。
我还能够将此工作程序节点添加到Ubuntu 16.04 master,并部署基于本机Windows 1803映像的pod和服务,并从master与它们连接。
但是当我在启用hyperv的Windows上启动kubelet时:
c:\k\kubelet.exe --hostname-override=$(hostname) --v=6 `
--pod-infra-container-image=kubeletwin/pause --resolv-conf="" `
--allow-privileged=true --enable-debugging-handlers `
--cluster-dns=$KubeDnsServiceIp --cluster-domain=cluster.local `
--kubeconfig=c:\k\config --hairpin-mode=promiscuous-bridge `
--image-pull-progress-deadline=20m --cgroups-per-qos=false `
--feature-gates=HyperVContainer=true --enforce-node-allocatable="" `
--network-plugin=cni --cni-bin-dir="c:\k\cni" --cni-conf-dir "c:\k\cni\config"
并应用此Yaml:https://pastebin.com/raw/bbibyb9s
然后,每个Pod,部署,服务都说明一切都成功,但是我没有从任何地方连接到此Pod,即使从Windows Worker节点上也没有连接。
当我通过以下方式检查其路线时:
kubectl exec -it win-webserver-d6b66d575-svc55 -c windowswebserver route print
我没有看到外部连接。
我使用host-gw的路由也有所不同,因为网关192.168.1.2对我不起作用,所以我对此进行了更改:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.2 dev ens160
为此:
route add -net 192.168.1.0 netmask 255.255.255.0 gw <WINDOWS_NODE_IP> dev ens160
我在Windows上也类似地更改了AddRoutes.ps1。这适用于非超级豆荚。
当我在HostConfig中检查此不起作用的Docker容器时
“ NetworkMode”的值为“ none”,
在没有Hyperv Pod容器的情况下工作
"NetworkMode": "container:0bbdc2d0c07c553edc755ecd24fab932ad26ca78d17f9d6ab4e377fb1fdef73d",
在非Kubernetes上,但在hyperv容器上有
"NetworkMode": "default".