Kubernetes:Calio 不在远程工作者上工作,本地正常

问题描述

我使用 calico 设置了一个 Kubernetes 集群。 设置很“简单”

  • 1x master(本地网络,可以)
  • 1x 节点(本地网络,没问题)
  • 1x 节点(云服务器,不行)

所有带有 docker 19.03 的 debian buster

在云服务器上,calico pods 没有出现:

calico-kube-controllers-token-x:

    Events:
  Type     Reason          Age                   From     Message
  ----     ------          ----                  ----     -------
  normal   SandBoxChanged  47m (x50 over 72m)    kubelet  Pod sandBox changed,it will be killed and re-created.
  Warning  FailedMount     43m                   kubelet  MountVolume.SetUp Failed for volume "calico-kube-controllers-token-x" : Failed to sync secret cache: timed out waiting for the condition
  normal   SandBoxChanged  3m41s (x78 over 43m)  kubelet  Pod sandBox changed,it will be killed and re-created.

calico-node-x:

      Warning  Unhealthy       43m (x5 over 43m)      kubelet  Liveness probe Failed: calico/node is not ready: Felix is not live: Get "http://localhost:9099/liveness": dial tcp [::1]:9099: connect: connection refused
  Warning  Unhealthy       14m (x77 over 43m)     kubelet  Readiness probe Failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/bird/bird.ctl: connect: no such file or directory
  Warning  BackOff         4m26s (x115 over 39m)  kubelet  Back-off restarting Failed container

我的猜测是 IP/网络配置有问题,但没有弄清楚是哪个。

  • 需要的端口(k8s&BGP)从路由器转发,也试过master直连互联网
  • --control-plane-endpoint 是一个主机名,可公开解析
  • Calico 正在使用 BGP 对等(使用公共 IP 作为对等)

这个条目确实让我最担心:

  • 显示本地ip:kubectl get --raw /api

我想办法把这个改成master的公网IP,没有成功。

有人知道下一步要尝试什么吗?

解决方法

经过额外的分析,问题恰好是分布式 api ip 地址是本地地址,而不是 dns-name。

创建了一个从云节点到本地master的带有wireguard的vpn,所以从云节点可以访问到master的本地ip。

不知道这是否是最干净的解决方案,但它有效。