繁体   English   中英

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

[英]Change Kubernetes docker-for-desktop cluster network ip

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

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

我将 docker 网络部分更改为Subnet address: 172.16.0.0 and netmask 255.255.0.0但集群不断分配网络 10.1.0.0/16。 网络配置

我在这里面临的问题是,我使用的 VPN 与 kubernetes 默认网络 ( 10.1.0.0/16 ) 的网络 IP 相同,因此如果我尝试 ping vpn 下的主机,即我所在的容器做 ping 一直说Destination Host Unreachable

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

Kubernetes 由 Docker 桌面提供库伯贝特斯

从官方文档中我知道

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

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

Kubernetes 也有它使用的子网和相应的网络设置,默认为10.1.0.0/16 ,但此设置未在 Docker for-win UI 中公开。 docker/for-win 问题 #1667: Can not access local network, with kubernetes installed ,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使用 kubernetes。

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

是的,每次 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” 步骤 - 尝试启动 kubernetes 需要超过 5 分钟,之后我放弃等待。 当我现在重新启动 docker 时(因为 kubernetes 处于错误状态),kubernetes 将被重新启用(再次使用10.1.0.0/16 )但现在我可以再次遵循解决方法(包括第 2 步)。 因此,在禁用 kubernetes 和修改10-default.conflist之间重新启动 docker 可以使 kubernetes 的后续启动真正起作用。

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

在 Windows 上,编辑此文件以获得永久修复:

%AppData%\Docker\cni\10-default.conflist

在花时间调查我的另一个答案后,一位同事建议:

为什么要为 Docker for-win 内置的 kubernetes 烦恼呢?

为什么不直接使用“kind” ——kubernetes-in-docker?

brew install kind
kind create cluster

# Cluster is ready for use:
kubectl --context kind-kind get -A pods

繁荣! Kubernetes 在 20 秒内运行。 整个单节点 kubernetes 集群在单个 docker 容器中运行。 我想我永远不会回去了...

您是否重新启动了 docker-for-desktop 或整个计算机? 您是否在您的计算机上创建的 docker 网络适配器中看到了那些新的网络设置? 如果这些网络更改未反映在您计算机上的虚拟网络适配器上,则这些更改以某种方式未应用。 尝试卸载 docker-for-desktop 或 kubernetes 服务。

如果该虚拟网络确实有这些更改,或者可能在您的计算机上为 kubernetes 创建了第二个网络适配器,您可能需要重新安装 kubernetes 服务。 Kubernetes 使用特定于网络的配置,它是在安装服务时获得的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM