前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flanneld续租IP异常导致网络问题分析

Flanneld续租IP异常导致网络问题分析

作者头像
我是阳明
发布2021-06-25 17:03:39
1.6K0
发布2021-06-25 17:03:39
举报
文章被收录于专栏:k8s技术圈

版本信息:

代码语言:javascript
复制
K8S版本:1.14.8
Flannel版本:0.7.1

一、现象:

业务反馈有部署集群的节点上的pod无法做域名解析。pod到coredns pod网络不通。登录到节点查看日志发现flannel有如下报错:

二、分析:

查看flannel.1和dockerd的bip,网段都不是172.30.103.0。而在etcd中存储的是172.30.103.0网段。导致flannel网段和docker网段不一致无法通信。

继续查看日志,发现Flanneld续租有问题:

这里需要介绍一下Flanneld续租SubNet的机制。

三、临时解决方式:

1)需要重启docker:删除flannel.1网桥,重启Flanneld和docker。

代码语言:javascript
复制
systemctl status flanneld
ps -ef | grep dockerd
systemctl stop flanneld
ifconfig flannel.1 down
ip link del flannel.1
systemctl restart flanneld
systemctl restart docker

2)不需要重启docker

代码语言:javascript
复制
1. etcd删除新的网段配置;
2. etcd加回来旧的网段配置;
3. 重启异常机器上flanneld;
4. 若问题依旧可以设置定时重启flanneld进程重新续租。

3)设置etcd中对应的TTL时间为0,即不过期。

代码语言:javascript
复制
# etcdctl -o extended get /k8s/network/subnets/172.30.103.0-24
Key: /k8s/network/subnets/172.30.103.0-24
Created-Index: 280421902
Modified-Index: 280421902
TTL: 0
Index: 280421995

{"PublicIP":"10.21.xxx.xxx","BackendType":"vxlan","BackendData":{"VtepMAC":"2a:a0:03:b8:34:5a"}}

4)设置flannel的启动参数,缩短续租时间

代码语言:javascript
复制
-subnet-lease-renew-margin=720

扩展:

Flanneld网段扩容方案:

Flannel子网有几种获取方式:

第一种是所有flanneld都直连etcd,自主决定要使用的子网,抢占的方式。

第二种是部署flannel server(运行在server模式的flannel),flanneld连接flannel server。

第三种是flanneld直连kube-apiserver,从kube-apiserver中获取子网网段,-kube-subnet-mgr。

这里的方案适用于第一种方式:只要每个node上的子网前缀是不变的,调整flannel整个网段的前缀就是安全的,已有node分配的网段不会发生变化,新增node的网段不会与其它node的网段重叠。(通过分析0.7.0版本申请子网的代码 tryAcquireLease --> allocateSubnet --> createSubnet 可知)

直接修改Flannel网段:

代码语言:javascript
复制
# etcdctl set  /coreos.com/network/config  '{"Network":"11.0.0.0/8"}'
// 扩容之后,新增node的网段情况如下:
$ cat /run/flannel/subnet.env
FLANNEL_NETWORK=11.0.0.0/8       // 网段前缀是/8
FLANNEL_SUBNET=11.0.47.1/24
FLANNEL_MTU=1426
FLANNEL_IPMASQ=false

// 已有node的上的网段还是以前的配置:
$ cat /run/flannel/subnet.env
FLANNEL_NETWORK=11.0.0.0/16     // 注意还是/16
FLANNEL_SUBNET=11.0.98.1/24
FLANNEL_MTU=1426
FLANNEL_IPMASQ=false

// Pod之间的通信不受影响,并且将已有node上的flannel重启后,子网配置会自动刷新:
$ cat /run/flannel/subnet.env
FLANNEL_NETWORK=11.0.0.0/8     // 前缀刷新
FLANNEL_SUBNET=11.0.98.1/24    // 子网网段不变
FLANNEL_MTU=1426
FLANNEL_IPMASQ=false
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 k8s技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档