k8s & flannel --- 拨打 tcp 172.96.0.1:443: i/o 超时

k8s & flannel --- dial tcp 172.96.0.1:443: i/o timeout

  1. 我使用以下命令初始化 kubeadm

kubeadm init
--apiserver-advertise-address=192.168.64.104
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
--kubernetes-version v1.17.3
--service-cidr=172.96.0.0/16
--pod-network-cidr=172.244.0.0/16

  1. 我有一个master和两个node,我在三台机器上测试follow command

curl -k https://172.96.0.1:443/version

命令结果:

 {
  "major": "1",
  "minor": "17",
  "gitVersion": "v1.17.3",
  "gitCommit": "06ad960bfd03b39c8310aaf92d1e7c12ce618213",
  "gitTreeState": "clean",
  "buildDate": "2020-02-11T18:07:13Z",
  "goVersion": "go1.13.6",
  "compiler": "gc",
  "platform": "linux/amd64"
}
  1. 但是当我使用命令 helm install --namespace openebs --name openebs stable/openebs --version 1.5.0 时,我得到的结果是 Error: Get https://172.96.0.1:443/version?timeout=32s: dial tcp 172.96.0.1:443: i/o timeout

我不知道现在发生了什么,我该如何解决这个问题?

我的问题已经解决了

  1. 当我回顾我的安装过程时,我认为这个问题可能与应用跟随命令的步骤有关kubectl apply -f kube-flannel.yml

  2. 我在本地 kube 中找到了以下配置代码-flannel.yml

net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }

  1. 我认为这个 ip 可能必须与 kubeadm init 命令中的 pod-network-cidr 参数相同,所以我重置了 k8s,并更改了我的 kubeadm init 命令,如下所示

kubeadm init
--apiserver-advertise-address=192.168.64.104
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
--kubernetes-version v1.17.3
--service-cidr=10.96.0.0/16
--pod-network-cidr=10.244.0.0/16

终于成功了

  1. 虽然我解决了这个问题,但我还是不明白在这种情况下会发生什么

我知道@wr1ttenyu zhao已经解决了这个问题,但我决定提供一个答案只是为了澄清。

正如我们在 flannel documentation 中看到的:

NOTE: If kubeadm is used, then pass --pod-network-cidr=10.244.0.0/16 to kubeadm init to ensure that the podCIDR is set.

--pod-network-cidr 选项指定 pod 网络的 IP 地址范围。

我们应该使用 10.244.0.0/16 网络,因为它硬编码在 kube-flannel.yml 文件中:

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

因此,使用 kubeadm init --pod-network-cidr=10.244.0.0/16 命令创建 Kubernetes 集群将使用 flannel,无需任何额外的 flannel 配置。

要使用不同的网络,我们需要在应用之前修改 kube-flannel.yml 文件中的 "Network": "10.244.0.0/16" 行,类似于此 answer[=34= 中描述的内容].