【问题标题】:Kubernetes cluster VirtualBox issues with networking (NAT and Host-only adapters)Kubernetes 集群 VirtualBox 网络问题(NAT 和仅主机适配器)
【发布时间】:2019-06-16 04:22:13
【问题描述】:

我正在尝试在 VirtualBox 上设置一个 kubernetes 集群(两个节点,1 个主节点,1 个工作节点)。我的主机运行 Windows 10,并在 VirtualBox 上安装了 Ubuntu 18.10,代号 cosmic。

我在每个 VirtualBox 上配置了两个适配器,一个 NAT 和一个 Host-Only 适配器。我这样做是因为我需要使用主机 IP (NAT) 访问一些内部资源,并且我还需要主机和虚拟机之间的稳定网络(仅限主机的网络)。

我已经安装了 Kubernetes v1.12.4 并且成功的将 worker 加入了 master 节点。

NAME                STATUS   ROLES    AGE   VERSION
kubernetes-master   Ready    master   36m   v1.12.4
kubernetes-slave    Ready    <none>   25m   v1.12.4

我正在使用 Flannel 进行联网。

所有 pod 似乎都正常。

 NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
default       nginx-server-7bb6997d9c-kdcld               1/1     Running   0          27m
kube-system   coredns-576cbf47c7-btrvb                    1/1     Running   1          38m
kube-system   coredns-576cbf47c7-zfscv                    1/1     Running   1          38m
kube-system   etcd-kubernetes-master                      1/1     Running   1          38m
kube-system   kube-apiserver-kubernetes-master            1/1     Running   1          38m
kube-system   kube-controller-manager-kubernetes-master   1/1     Running   1          38m
kube-system   kube-flannel-ds-amd64-29p96                 1/1     Running   1          28m
kube-system   kube-flannel-ds-amd64-sb2fq                 1/1     Running   1          37m
kube-system   kube-proxy-59v6b                            1/1     Running   1          38m
kube-system   kube-proxy-bfd78                            1/1     Running   0          28m
kube-system   kube-scheduler-kubernetes-master            1/1     Running   1          38m

我已经部署了 nginx 来验证一切正常

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   41m
nginx-http   ClusterIP   10.111.151.28   <none>        80/TCP    29m

但是,当我尝试访问 nginx 时,我遇到了超时。 describe pod 给了我以下事件。

Events:
  Type     Reason                  Age                 From                       Message
  ----     ------                  ----                ----                       -------
  Normal   Scheduled               32m                 default-scheduler          Successfully assigned default/nginx-server-7bb6997d9c-kdcld to kubernetes-slave
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "dbb2595628fc2579c29779e31e27e27eaeff2dbcf2bdb68467c47f22a3590bd0" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "801e0f3f8ca4a9b7cc21d87d41141485e1b1da357f2d89e1644acf0ecf634016" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "77214c757449097bfbe05b24ebb5fd3c7f1d96f7e3e9a3cd48f3b37f30224feb" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "ebffdd723083d916c0910489e12368dc4069dd99c24a3a4ab1b1d4ab823866ff" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "d87b93815380246a05470e597a88d50eb31c132a50e30000ab41a456d1e65107" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "3ef233ef0a6c447134c7b027747a701d6576a80e76c9cc8ffd8287e8ee5f02a4" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "6b621aab3c57154941b37360240228fe939b528855a5fe8cd9536df63d41ed93" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "fa992bde90e0a1839180666bedaf74965fb26f3dccb33a66092836a25882ab44" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m                 kubelet, kubernetes-slave  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "81f74f687e17d67bd2853849f84ece33a118744278d78ac7af3bdeadff8aa9c7" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox  32m (x2 over 32m)   kubelet, kubernetes-slave  (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "29188c3e73d08e81b08b2258254dc2691fcaa514ecc96e9df86f2e61ba455b76" network for pod "nginx-server-7bb6997d9c-kdcld": NetworkPlugin cni failed to set up pod "nginx-server-7bb6997d9c-kdcld_default" network: open /run/flannel/subnet.env: no such file or directory
  Normal   SandboxChanged          32m (x11 over 32m)  kubelet, kubernetes-slave  Pod sandbox changed, it will be killed and re-created.
  Normal   Pulling                 32m                 kubelet, kubernetes-slave  pulling image "nginx"
  Normal   Pulled                  32m                 kubelet, kubernetes-slave  Successfully pulled image "nginx"
  Normal   Created                 32m                 kubelet, kubernetes-slave  Created container

我尝试使用仅配置到虚拟机的桥接适配器进行完全相同的安装,然后一切都按预期工作。

我认为这是一个配置问题,但是我无法解决它。谁能给我建议。

【问题讨论】:

  • 你是如何安装 flannel 和 kubernetes 本身的?如果通过 Kubeadm,那么您是否通过了 --pod-network-cidr= 选项?
  • 我执行的命令是sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.56.120 --kubernetes-version=stable-1.12 --apiserver-cert-extra-sans=10.0.2.15
  • 和法兰绒kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

标签: kubernetes virtualbox


【解决方案1】:

正如我在删除的评论中提到的,我在我的 Ubuntu 18.04 主机上重新创建了这个。创建了两个 Ubuntu 18.10 VM,带有两个适配器(NAT 和一个 Host-Only 适配器)。我的配置与您在此处指定的相同。一切正常。

我必须手动添加第二个适配器,我在节点上运行 kubeadm initkubeadm join 之前使用了 netplan

以防万一您没有这样做 - 将仅主机适配器网络添加到 /etc/netplan/50-cloud-init.yaml 中的 yaml 文件并运行 sudo netplan generatesudo netplan apply。对于 nginx,我使用了 Kubernetes 官方文档中的 deployment。然后我暴露了服务:

kubectl create service nodeport nginx --tcp=80:80 从主机在 NodePort 上卷曲我的节点 IP 地址可以正常工作。

这只是为了演示我所做的,以便它在我的环境中工作。从描述的 pod 错误来看,Flannel 本身似乎有问题:

/run/flannel/subnet.env: no such file or directory

我在master上检查了这个目录,它看起来像这样:

/run/flannel/subnet.env

FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

检查文件是否存在,如果这对您没有帮助,如果您提供更多信息,我们可以尝试进一步解决问题。但是有太多未知数所以我不得不在某些地方猜测,我的建议是销毁它并使用我提供的信息重试,并使用 NodePort 而不是 ClusterIP 类型运行 nginx。 ClusterIP 只能从集群内部访问 - 例如 Node.js。

【讨论】:

  • @Iraklis Kyriakidis 有帮助吗?
【解决方案2】:

请让我抽出这个线程。很久以前,我为 Internet 配置了 1 个 NAT,为 SSH 远程配置了 1 个 HOST,并且错误相同。设置 Rancher Longhorn 时特别。

现在,我不会那样建造。首先,我使用 CentOS 和 iptable (1 NAT, 1 HOST) 构建 GATEWAY SERVER

然后,其他虚拟机只有 1 个接口 HOST 直接连接到网关服务器

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 2014-08-03
    • 2018-09-16
    • 2015-03-17
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多