evanash1222 / TechBlogs

0 stars 0 forks source link

ACK网络架构梳理 #5

Closed evanash1222 closed 2 years ago

evanash1222 commented 2 years ago

ACK Flannel网络插件

Flannel是ACK的网络插件,使用独立于VPC网段的Pod的网段分配给Pod。在ACK中,Flannel插件采用的是阿里云VPC模式,报文经过阿里云VPC的路由表直接转发,不需要Vxlan等隧道封装技术封装报文,所以比Flannel默认的Vxlan模式具有更高的通信性能。

image.png 需要提前规划Pod的CIDR,且不可与node CIDR以及service CIDR重叠。需要预先指定每个节点可以容纳的pod数(即IP数) image.png image.png 同时,依赖VPC的路由表中的路由条目实现Pod跨节点的通信。 image.png 同时,可以看到安全组对Pod 网段的放行策略(默认的企业级安全组 实例之间内网隔离)image.png

ACK Terway网络插件

Terway是阿里云容器服务ACK自研的网络插件。Terway将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略,支持对单个容器做带宽的限流。

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

单节点所支持的最大Pod数取决于该节点的弹性网卡(ENI)数。

image.png 注:Pod独占弹性网卡以获得最佳性能 -- 白名单功能 image.png

Flannel 与 Terway网络插件比较

对比项 Terway Flannel
性能 Pod地址即为VPC中地址,无NAT损耗支持独占ENI模式,几乎无损。 配合阿里云VPC路由,Pod地址为虚拟地址,存在NAT转换损耗。
安全 支持使用网络策略Network Policy。 不支持使用网络策略Network Policy。
地址管理 无需按节点分配地址段,随用随分配,地址无浪费。 节点维度划分地址段,大规模集群下地址浪费多。
SLB SLB后端直接对接Pod,支持业务无中断升级。 SLB后端不能直接对接Pod,需要通过NodePort转发。

Terway网络插件的高级功能

Network Policy

https://help.aliyun.com/document_detail/97621.html Kubernetes网络策略(Network Policy)提供基于策略的网络控制。当您使用Terway容器网络时,如果您希望在IP地址或者端口层面控制网络流量,您可以为集群中特定应用使用网络策略。 常见场景:

kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh


## 为Pod绑定独立的EIP
默认情况下,集群的Pod 是通过NAT网关获得向外访问公网的能力(在创建集群时需要选择增加NAT网关);对于Pod的公网入口流量一般是通过LoadBalancer类型的Service流入。在有的场景中Pod需要独立的公网地址。例如:

- Pod的对外映射端口是随机的,一般常见于UDP(User Datagram Protocol)的游戏服务器或电话会议等。例如RTSP协议,对不同的客户端使用不同的端口。
- Pod访问公网流量存在争抢,Pod需要独立的公网出口。

![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/1156625/1657696099167-81c0ac32-3388-49fc-9f51-a34009005061.png#clientId=u453007a4-db5a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=214&id=ucca059b3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=680&originWidth=1592&originalType=binary&ratio=1&rotation=0&showTitle=false&size=324673&status=done&style=none&taskId=u22f921fb-0bc0-425e-89ba-c3183f699ee&title=&width=500)
原理是通过注解为指定Pod创建和关联EIP

| **注解** | **说明** |
| --- | --- |
| k8s.aliyun.com/pod-with-eip | 是否自动创建并绑定EIP。取值:
- true:启用。
- false:不启用。
 |
| k8s.aliyun.com/eip-bandwidth | 设置EIP带宽,默认为5 Mbps。 |
| k8s.aliyun.com/eip-charge-type | 设置EIP的计费方式。取值:
- PayByBandwidth:按带宽计费。
- PayByTraffic:按流量计费。
 |
| k8s.aliyun.com/pod-eip-instanceid | 绑定已有的EIP。 |
| k8s.aliyun.com/eip-common-bandwidth-package-id | 绑定已有的共享带宽包。 |
| k8s.aliyun.com/eip-isp | 设置EIP的线路类型。取值:
- BGP:BGP(多线)线路。
- BGP_PRO:BGP(多线)精品线路。
 |

添加注解后,创建的pod可以看到k8s.aliyun.com/allocated-eipAddress
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/1156625/1657696471745-4f4c435c-b14d-44ec-ac7e-4a20a3953a87.png#clientId=u453007a4-db5a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=138&id=u1a78baf8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=276&originWidth=896&originalType=binary&ratio=1&rotation=0&showTitle=false&size=63466&status=done&style=none&taskId=u33546aa5-e975-4b56-9ead-a8fb865726f&title=&width=448)
## 扩容VPC网段
可以使用VPC附加网段的功能来扩容VPC网段,具体请参考
## 扩容Terway场景下的虚拟交换机
### 如何判断Pod vswitch的可用ip不足?

1. Pod创建不成功,且状态显示为ContainerCreating
1. kubectl logs --tail=100 -f terway-eniip-zwjwx -n kube-system -c terway
1. time="2020-03-17T07:03:40Z" level=warning msg="Assign private ip address failed: Aliyun API Error: RequestId: 2095E971-E473-4BA0-853F-0C41CF52651D Status Code: 403 Code: InvalidVSwitchId.IpNotEnough Message: The specified VSwitch \"vsw-AAA\" has not enough IpAddress., retrying"
### 如何新增虚拟交换机
验证下来新创建的Pod并未分配到新的私网ip?
kubectl edit cm eni-config -n kube-system
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/1156625/1657699597001-2fd4a836-723a-4784-95a0-93bd96038c6a.png#clientId=u453007a4-db5a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=231&id=u17e39a09&margin=%5Bobject%20Object%5D&name=image.png&originHeight=752&originWidth=3258&originalType=binary&ratio=1&rotation=0&showTitle=false&size=127673&status=done&style=none&taskId=u3a2c1924-c82a-4918-9ff6-5e27c81a741&title=&width=1000)
## 为ENI配置多安全组
kubectl edit cm eni-config -n kube-system
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/1156625/1657700618607-55399c69-de88-45e7-b131-72d786d184e0.png#clientId=u453007a4-db5a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=225&id=u8039177a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=792&originWidth=3524&originalType=binary&ratio=1&rotation=0&showTitle=false&size=128975&status=done&style=none&taskId=u171e2bd3-7485-41e7-8b62-ac66fb39528&title=&width=1000)
## 使用 Host 网络
Pod使用Host网络即让Pod使用Node节点的网络空间和网络资源。将Pod的网络配置成Host网络后,Pod可以直接访问到Node上Loopback设备,可以在Node节点上监听地址,也可以用于监控Node上别的Pod的网络流量。
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/1156625/1657701877977-838abd63-19d4-4eb7-bef4-158dc0119b3e.png#clientId=u453007a4-db5a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=169&id=u772997e5&margin=%5Bobject%20Object%5D&name=image.png&originHeight=388&originWidth=2290&originalType=binary&ratio=1&rotation=0&showTitle=false&size=125000&status=done&style=none&taskId=u98a9fa9d-3515-41af-8f1b-a704548ae21&title=&width=1000)
## 配置Terway网络下节点级别网络
Terway网络下所有节点默认使用命名空间kube-system中名称为eni-config的ConfigMap,如果需要按节点维度配置所使用的虚拟交换机、安全组,则可以通过创建新的ConfigMap实现。本文介绍Terway网络下如何实现节点级别的网络配置。

1. 额外设定一个配置项,假设命名为eni-config-mubi。

![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/1156625/1657705514261-adcf7854-8046-4a6a-bb5c-7f57d3691670.png#clientId=u453007a4-db5a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=240&id=u0988e08b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=860&originWidth=3580&originalType=binary&ratio=1&rotation=0&showTitle=false&size=89536&status=done&style=none&taskId=u1c23e3c1-3a8b-4afa-b6e5-d6cb066f651&title=&width=1000)

2. 指定虚拟交换机以及安全组,注意虚拟交换机所在可用区必须与节点所在可用区相同。
2. 给节点增加一个标签 terway-config:eni-config-mubi。

注意:[https://help.aliyun.com/document_detail/197320.htm#section-t4a-ene-hcq](https://help.aliyun.com/document_detail/197320.htm#section-t4a-ene-hcq)

1. 纳管一个节点到集群内,但这个节点之前在其他集群使用,且删除节点时没有排空节点Pod。这种情况下节点上可能残留之前集群使用的ENI资源。
1. 手动增加、修改Terway使用的虚拟交换机配置,由于节点上可能还存在原有配置的ENI,则新建的Pod将可能继续使用原有ENI上的IP