kubernetes - 无法加入主节点 - 错误执行阶段预检:无法验证 API 服务器的身份

Rah*_*agh 5 kubernetes

我是 k8s 的新手,所以对于具有 k8s 专业知识的人来说,这可能是一个非常简单的问题。

我正在使用两个节点

  1. 主 - 2cpu,2 GB 内存
  2. 工人 - 1 cpu,1 GB 内存
  3. 操作系统 - ubuntu - hashicorp/bionic64

我确实成功设置了主节点,我可以看到它已启动并正在运行

vagrant@master:~$ kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   29m   v1.18.2
Run Code Online (Sandbox Code Playgroud)

这是我生成的令牌

vagrant@master:~$ kubeadm token create --print-join-command
W0419 13:45:52.513532   16403 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
kubeadm join 10.0.2.15:6443 --token xuz63z.todnwgijqb3z1vhz     --discovery-token-ca-cert-hash sha256:d4dadda6fa90c94eca1c8dcd3a441af24bb0727ffc45c0c27161ee8f7e883521 
Run Code Online (Sandbox Code Playgroud)

问题- 但是当我尝试从工作节点加入它时,我得到了

vagrant@worker:~$ sudo kubeadm join 10.0.2.15:6443 --token xuz63z.todnwgijqb3z1vhz     --discovery-token-ca-cert-hash sha256:d4dadda6fa90c94eca1c8dcd3a441af24bb0727ffc45c0c27161ee8f7e883521 
W0419 13:46:17.651819   15987 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
error execution phase preflight: couldn't validate the identity of the API Server: Get https://10.0.2.15:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: dial tcp 10.0.2.15:6443: connect: connection refused
To see the stack trace of this error execute with --v=5 or higher
Run Code Online (Sandbox Code Playgroud)

这是被占用的端口

10.0.2.15:2379 
10.0.2.15:2380 
10.0.2.15:68
Run Code Online (Sandbox Code Playgroud)

请注意,我使用的 CNI 来自 -

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Run Code Online (Sandbox Code Playgroud)

Rah*_*agh 3

以下是我在 kubernetes 安装过程中发现的错误 -

(详细安装步骤请参见 -安装步骤

但这是我犯的主要错误 -

错误 1 ​​-由于我在虚拟机上工作,所以我的两个虚拟机(主虚拟机和工作虚拟机)上都有多个以太网适配器。默认情况下,CNI 始终采用eth0,但在我们的情况下,它应该是eth1

1: lo: <LOOPBACK,UP,LOWER_UP>
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:bb:14:75 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:fb:48:77 brd ff:ff:ff:ff:ff:ff
    inet 100.0.0.1
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP>
Run Code Online (Sandbox Code Playgroud)

错误 2-我在没有--apiserver-advertise-address--pod-network-cidr 的情况下初始化kubeadm的方式

这是我使用的 kubeadm 命令 -

[vagrant@master ~]$ sudo kubeadm init --apiserver-advertise-address=100.0.0.1 --pod-network-cidr=10.244.0.0/16
Run Code Online (Sandbox Code Playgroud)

错误 3 - - 由于我们的虚拟机中有多个以太网适配器,因此我找不到在calico.yml配置中设置额外参数以从eth0切换到eth1的方法。

所以我用了法兰绒 CNI*

[vagrant@master ~]$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Run Code Online (Sandbox Code Playgroud)

并在 args 部分添加 - --iface=eth1

- --iface=eth1
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth1
Run Code Online (Sandbox Code Playgroud)

之后它就起作用了