2

我们在 K8s 环境中部署 Jenkins,使用 calico 网络插件有 1 个主节点和 4 个工作节点,pod 是在 Jenkins 中运行 Job 时创建的,但问题是主机名无法解析,Jenkins 中没有错误日志,在检查 pod 时,主节点上的 calico pod 已关闭,不确定这是否是导致上述问题的原因。

[root@kmaster-1 ~]#  kubectl get pod calico-node-lvvx4 -n kube-system -o wide
NAME                READY   STATUS    RESTARTS   AGE   IP             NODE                                  NOMINATED NODE   READINESS GATES
calico-node-lvvx4   0/1     Running   9          9d    x0.x1.x5.x6   kmaster-1.b.x.x.com   <none>           <none>



Events:
  Type     Reason     Age                       From                                          Message
  ----     ------     ----                      ----                                          -------
  Warning  Unhealthy  107s (x34333 over 3d23h)  kubelet, kmaster-1.b.x.x.com  (combined from similar events): Readiness probe failed: calico/node is not ready: BIRD is not ready: BGP not established with 10.x1.2x.x23,10.x1.x7.x53,10.x1.1x.1x5,10.x1.2x.1x22020-04-12 08:40:48.567 [INFO][27813] health.go 156: Number of node(s) with BGP peering established = 0

10.x1.2x.x23,10.x1.x7.x53,10.x1.1x.1x5,10.x1.2x.1x2 是worker pod的IP,它们相互连接,因为netstat显示BGP已建立,但不是与主人。主机上的 179 端口是开放的,不知道为什么 BGP 对等不建立,请指教。

4

4 回答 4

2

将以下行添加到 calico yaml 中起到了神奇的作用。

指定接口

        - name: IP_AUTODETECTION_METHOD
          value: "interface=ens."
于 2020-04-20T04:05:46.753 回答
1

此外,除了 Sanjay MP 我还要说我必须关闭防火墙。

systemctl disable --now firewalld

也许你可以以某种方式调整它,但我没有测试过,所以我不会建议

于 2021-01-07T14:59:08.847 回答
1

Sanjay MP 分享的内容对我有用,但我想澄清导致问题的原因,以及为什么解决方案更详细。

首先,我运行的是 ubuntu env,所以 Piknik 共享的内容不起作用,firewalld 仅在 centos / rhel 系统上。尽管如此,ufw 在所有节点上都被禁用。

我能够通过执行kubectl describe pod calico-node-*****. 我发现 calico BIRD 服务无法连接到对等点。还显示了 calico 节点试图用来配对它的 BGP 对等体的 IP 地址。它使用了错误的接口,因此错误的 ips。

为了自己定义问题,我所有的节点主机 vm 都有多个接口。如果您没有明确指定要使用哪个界面,calico 会“自动”选择一个,无论您是否需要该界面。

解决方案是在 calico.yaml 文件中构建 calico 覆盖网络时指定特定接口。Sanjay MP 使用正则表达式,如果您有不同的命名接口,它可能会起作用,但是,当我运行 Ubuntu Server 时,字符串“ens”开始用于所有接口,所以会发生同样的问题。

我已经删除了大部分 calico.yaml 文件以显示该设置的确切位置(~第 675 行)在那里添加设置,我还留下了 CALICO_IPV4POOL_CIDR 以及此设置需要适当地设置为相同kubeadm 初始化时指定的子网范围:

spec:
  template:
    spec:
      containers:
        - name: calico-node
          image: calico/node:v3.14.2
          env:
            - name: CALICO_IPV4POOL_CIDR
              value: "192.168.0.0/22"
            - name: IP_AUTODETECTION_METHOD
              value: "interface=ens224"

不幸的是,我没有找到回滚旧配置的方法,所以我只是重建了整个集群,并重新部署了 calico 覆盖(感谢上帝提供 VM 快照)。

kubeadm 初始化您的集群。然后kubectl create -f calico.yaml使用添加的设置运行以构建覆盖网络。

确认覆盖网络正在工作

  • 运行watch -n1 kube-system get pods -o wide,然后添加您的节点。确保在新添加的 kube 节点上构建的所有 calico 节点都显示为“1/1 Running”。
  • 下载并安装 calicoctl,然后运行calicoctl node status,确保 BGP 使用了正确的网络。

您可以在此处阅读有关 IP_AUTODETECTION_METHOD的更多信息。

于 2021-04-11T19:31:01.257 回答
0

通过firewall-cmd激活calico使用的网络接口。

最近在使用虚拟机操作节点时,虚拟机的界面被禁用,出现同样的现象。

于 2020-09-22T01:53:33.460 回答