k8s网络问题解决记录
1. k8s(1):calico网络问题排查,IP_AUTODETECTION_METHOD #
引用: https://zhuanlan.zhihu.com/p/488034895?utm_id=0
- 问题描述:
4个节点的k8s集群,忽然有个节点上的pod无法访问其他节点的k8s域名了
- 排查
- ①查看coredns服务状态,发现正常,排除内部dns解析问题
- ②查看发现异常pod节点对应的calico-node-rdw97服务异常,出现了非正常使用网卡信息
- ③查看calico配置发现,网卡配置为P_AUTODETECTION_METHOD: first_found,这样很容易选错网卡
- 解决:查看并修改calico node的daemonset配置:(vim环境)
kubectl edit DaemonSet calico-node -n calico-system
发现: IP_AUTODETECTION_METHOD 这个环境变量
的值是first_found,我的机器网上eth0并不是第一个,这样可能有问题。因此修改成 value: “interface=eth0” 并保存退出,居然没生效。
原因是:
该方法命令虽然可以执行,但是我这里ds么没有生效。k8s 1.22,通过operator生成的calico,不是calico.yaml,如果是calico.yaml,直接修改文件中的参数即可。(calico-node报错Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket - Wghdr’s Blog!)
- 解决2:
因此要用另一种方法来修改:
我的custom-resources.yaml 如下,加上红色部分:
- custom-resources.yaml
- nodeAddressAutodetectionV4: interface: eno.*
# This section includes base Calico installation configuration.
# For more information, see: https://projectcalico.docs.tigera.io/v3.22/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
registry: sea.hub:5000
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 100.64.0.0/10
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()
nodeAddressAutodetectionV4:
interface: eno.*
---
# This section configures the Calico API server.
# For more information, see: https://projectcalico.docs.tigera.io/v3.22/reference/installation/api#operator.tigera.io/v1.APIServer
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:
name: default
spec: {}
然后重新执行: kubectl apply -f custom-resources.yaml 然后再:
kubectl set env ds/calico-node -n calico-system IP_AUTODETECTION_METHOD=interface=eno3
- 可能会出现的问题,calico-apiserver-5787fcd448-s56vz出现异常,并报ImageNameError,查找发现yaml中定义的ImageName不知为何少了一个/,添加后重启服务即可