惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
D
Docker
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
美团技术团队
V
V2EX
Last Week in AI
Last Week in AI
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
B
Blog RSS Feed
博客园_首页
B
Blog
博客园 - 叶小钗
I
InfoQ
WordPress大学
WordPress大学
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Latest news
Latest news
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
News and Events Feed by Topic
S
Secure Thoughts
The Hacker News
The Hacker News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News

山山仙人博客

自己动手实现NAS公网访问 我的2024-2025 个人养老金年化收益计算 Apple Container实践 Mermaid 语法概要 组建WireGuard网络 使用GitHub存储Helm包 详解Nginx获取客户端真实IP 生如夏花——与技术人的精神远游 Ack集群Pod独占EIP实践 我的2022-2023 Gradle打包工具入门 基于阿里云RAM+ACK托管版集群的RBAC授权 服务网格和Istio初识-续 服务网格和Istio初识 2021总结与公众号文章回顾 Golang与非对称加密 Golang与对称加密 Golang与散列算法
Ack集群Terway网络场景下的vSwitch扩容
2021-12-28 · via 山山仙人博客

20211228-01

Terway是阿里云开源的基于专有网络VPC的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。可以通过使用Terway网络插件实现Kubernetes集群内部的网络互通

Terway网络插件将原生的弹性网卡分配给Pod实现Pod网络,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略,并兼容Calico的网络策略

Terway网络插件中,每个Pod都拥有自己网络栈和IP地址。同一台ECS内的Pod之间通信,直接通过机器内部的转发,跨ECSPod通信,报文通过VPC的弹性网卡直接转发。由于不需要使用VxLAN等的隧道技术封装报文,因此Terway模式网络具有较高的通信性能

一句话总结,Terway最大的特点就是借助于云上ECS服务器的特性,将podnode的网络进行了拉平,同时使用VPCvSwitch中的ip

由于使用了Terway网络模式,随着node机器和pod数量的增多,每分配一个ip出去都需要消耗掉vpcvsw的可用ip。如果某短时间业务快速增长,导致pod大量消耗可用ip,这个时候就有可能因前期规划不充足导致vSwitch的可用ip不足

这个时候新创建的pod状态为ContainerCreatingdescribe查看pod提示error allocate ip...,这个时候查看Pod所在节点的Terway的日志,会有下面内容

Message: The specified VSwitch "vsw-xxxxx" has not enough IpAddress.

提示没有足够的ip,这个时候基本都是由于交换机的ip不够用,登录到交换机的控制台可以查看到这个节点所在的交换机的可用ip数,如果很少甚至为0,就表示需要扩容了

新增交换机并配置NAT

在专有网络管理控制台对应的VPC创建新的vSwitch,该vSwitch必须与IP资源不足的vSwitch在同一个区域。这是因为Terway分配给pod ip时的策略是,分配node所在可用区中的vSwitch对应的ip,因此,扩容就需要扩容同一可用区的交换机

在初始化集群新建交换机以及扩容交换机的时候都应该考虑,因Pod密度越来越大,为了满足PodIP地址日益增长的需求,建议创建给Pod使用的vSwitch的网络位小于等于19,即每个网段中至少包含8192个可用IP地址

20211228-02

vSwitch创建完成后,需要对这个vSwitch配置NAT策略,以便访问外部网络

20211228-03

配置集群的Terway

配置集群的Terway,添加上面创建的vSwitchTerwayConfigMap配置中

kubectl -n kube-system edit cm eni-config

配置样例参考Terway配置参考,部分内容说明如下

apiVersion: v1

kind: ConfigMap

metadata:

name: eni-config

namespace: kube-system

data:

10-terway.conf: |-

{

"cniVersion": "0.3.0",

"name": "terway",

"type": "terway"

}

disable_network_policy: "true"

eni_conf: |-

{

"version": "1", # 版本

"max_pool_size": 80, # 资源池最大水位

"min_pool_size": 20, # 资源池最小水位

"credential_path": "/var/addon/token-config",

"vswitches": {"cn-shanghai-f":["vsw-AAA", "vsw-BBB"]}, # 关联的虚拟交换机(ENI多IP模式),添加vsw-BBB到VSwitches部分,其中vsw-AAA是已经存在的且IP资源不足的VSwitch

"eni_tags": {"ack.aliyun.com":"xxxxxxxxx"},

"service_cidr": "172.16.0.0/16", # 服务CIDR

"security_group": "sg-xxxxxxx", # 安全组ID

"vswitch_selection_policy": "ordered"

}

上面配置参数中,资源池水位的配置值。Terway使用底层虚拟化底层的网络资源打通容器网络,网络资源的创建和释放需要一系列的API调用,如果在Pod创建销毁时频繁调用API会导致Pod配置时间较长。 Terway通过池化的方式对资源进行缓存,当小于资源的池的最小水位时自动补充资源,在大于资源池最大水位时开始释放资源,这样保障了高效的资源利用和分配的效率

相当于预先分配了ip,具体设置可以考虑到所在机器节点规格支持的最大eni辅助网卡个数以及最大pod数灵活设置

重启terway

重启所有Terwaypod以便快速刷新缓存生效

# kubectl -n kube-system delete pod -l app=terway-eniip

# kubectl -n kube-system get pod | grep terway

重启后检查异常的pod是否正常获取了ip即可

当排查某个podip分配相关问题时,也可以通过进入到所在节点的terway pod中,执行命令行,查看当前已分配的ip情况,以及已经从vSwitch分配得来后,暂时空闲的ip情况

# terway-cli mapping

Status | Pod Name | Res ID | Factory Res ID

Normal | node-problem-detector-l5h52 | 00:16:10:48:3e:37.10.244.18.167 | 00:16:10:48:3e:37.10.244.18.167

...

Idle | | 00:16:10:48:3e:37.10.244.18.132 | 00:16:10:48:3e:37.10.244.18.132

Idle | | 00:16:10:48:3e:37.10.244.18.18 | 00:16:10:48:3e:37.10.244.18.18

Idle | | 00:16:10:48:3e:37.10.244.18.54 | 00:16:10:48:3e:37.10.244.18.54

See you ~