更改 Kubernetes docker-for-desktop 集群网络 ip

2024-03-24

我正在尝试在 docker-for-desktops 上配置 Kubernetes,并且想要更改分配给容器的默认网络。

示例:默认网络是10.1.0.0/16但我想要172.16.0.0/16.

I changed the docker network section to Subnet address: 172.16.0.0 and netmask 255.255.0.0 but the cluster keeps assigning the network 10.1.0.0/16. Network configuration

我在这里面临的问题是我所在的VPN与kubernetes默认网络具有相同的网络IP(10.1.0.0/16)因此,如果我尝试对 VPN 下的主机执行 ping 操作,则执行 ping 操作的容器会一直显示Destination Host Unreachable.

我正在运行 Docker Desktop(在 Windows Pro 下)版本 2.0.0.0-win81 (29211) 频道:稳定版本:4271b9e。

Kubernetes is provided from Docker desktop Kuberbetes

来自官方文档 https://docs.docker.com/docker-for-windows/kubernetes/我知道

Kubernetes 可在适用于 Windows 18.02 CE Edge 及更高版本以及 18.06 Stable 及更高版本的 Docker 中使用,其中包括独立的 Kubernetes 服务器和客户端,以及 Docker CLI 集成。 Kubernetes 服务器在您的 Docker 实例中本地运行,不可配置,并且是单节点集群

那么,Kubernetes 是否应该使用底层 docker 的配置(如网络、卷等)?


Kubernetes 还有一个它使用的子网和相应的网络设置,默认为10.1.0.0/16,但此设置未在 Docker for-win UI 中公开。在docker/for-win 问题 #1667:安装了 kubernetes 后无法访问本地网络 https://github.com/docker/for-win/issues/1667#issuecomment-367357067,guillaumerose 展示了一种解决方法,我对其进行了一些修改以供阅读:

  1. 禁用 Kubernetes
  2. 重新启动 Docker for-win,从“疑难解答”屏幕(带有错误图标的屏幕)单击“重新启动” - guillaumerose 的解决方法中缺少此步骤,请参见下文
  3. docker run -it --privileged --pid=host justincormack/nsenter1并编辑/var/lib/cni/conf/10-default.conflist。更改提到的10.1.0.0/16到您想要的网络。不要忘记网关和 DNS
  4. 启用 Kubernetes

在第3步中,我改变了/var/lib/cni/conf/10-default.conflist像这样:

# diff -u 10-default.conflist.orig 10-default.conflist
--- 10-default.conflist.orig
+++ 10-default.conflist
@@ -10,11 +10,11 @@
       "hairpinMode": true,
       "ipam": {
         "type": "host-local",
-        "subnet": "10.1.0.0/16",
-        "gateway": "10.1.0.1"
+        "subnet": "10.250.0.0/16",
+        "gateway": "10.250.0.1"
       },
       "dns": {
-        "nameservers": ["10.1.0.1"]
+        "nameservers": ["10.250.0.1"]
       }
     },
     {

这有效。我现在可以 ping 通10.1.119.43 and使用 kubernetes。

OBS! 10-default.conflist每当 docker 重新启动时都会重置/恢复

是的,每次 docker 重新启动时(例如,由于 Windows 重新启动),kubernetes 都会恢复使用10.1.0.0/16然后它又坏了。再次应用上面的解决方法,它就会再次起作用。

所以我个人有一个~/10-default.conflist.250应用了上述补丁的文件,然后执行以下操作:

docker run -i --rm --privileged --pid=host justincormack/nsenter1 /bin/sh -c '/bin/cat > /var/lib/cni/conf/10-default.conflist' < ~/10-default.conflist.250

如上面的步骤 3 所示,而不是一遍又一遍地手动编辑文件。

非常烦人的是,每次重新启动 docker for-win 时都必须应用此解决方法,但这比不工作要好:-)。

关于禁用kubernetes后需要重启Docker for-win

我的经验是,当 kubernetes 重新启动并恢复使用时10.1.0.0/16,如果我跳过第 2 步(“重新启动 Docker for-win”步骤),则需要 5 分钟以上的时间来尝试启动 kubernetes,之后我就放弃等待。当我现在重新启动 docker 时(因为 kubernetes 处于不良状态),kubernetes 将重新启用(再次使用10.1.0.0/16)但现在我可以再次遵循解决方法(包括步骤 2)。因此在禁用 kubernetes 和修改之间重新启动 docker10-default.conflist使得随后的kubernetes启动真正起作用。

如果有人知道为什么内容/var/lib/cni/conf/10-default.conflist每次 docker 重新启动时都恢复为出厂默认设置,我非常想了解这是为什么以及如何解决这最后一个烦人的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 Kubernetes docker-for-desktop 集群网络 ip 的相关文章

随机推荐