完整报错
Unable to auto-detect an IPv4 address using interface regexes [eno1]: no valid host interfaces found
首先检查calico是否开启自动检测IV4地址
kubectl get daemonset calico-node -n kube-system -o custom-columns=ENV:.spec.template.spec.containers[0].env|grep IP
如图所示,IP获取方式为自动获取
再检查IPV4网卡匹配规则
这里原本是只有eno1的,所以calico只会去匹配名称为eno1的网卡,并获取它的IP
注:enp*是我后面加的,也就是加了这个规则后,才解决的问题
而我使用的bm1684算能盒子,是 PCI-E独立网卡,所以网卡名是enpxxxx
下面是各个网卡名所表示的含义
- eno1:代表由主板bios内置的网卡
- ens1: 代表有主板bios内置的PCI-E网卡
- enp2s0: PCI-E独立网卡
- eth0:如果以上都不使用,则回到默认的网卡名
如果按照eno1的匹配规则,是找不到bm1684算能盒子节点的,所以,需要修改calico的IPV4网卡匹配规则
kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=eno1,enp*
这里是直接修改的已运行的calico组件,也可以直接去yaml文件中,找到这个环境变量,在下面加一个环境变量
- name: IP_AUTODETECTION_METHOD
value: interface=eno1,enp*
然后重新创建下calico,也是可以的
calico官方文档