Closed evanash1222 closed 2 years ago
Flannel是ACK的网络插件,使用独立于VPC网段的Pod的网段分配给Pod。在ACK中,Flannel插件采用的是阿里云VPC模式,报文经过阿里云VPC的路由表直接转发,不需要Vxlan等隧道封装技术封装报文,所以比Flannel默认的Vxlan模式具有更高的通信性能。
需要提前规划Pod的CIDR,且不可与node CIDR以及service CIDR重叠。需要预先指定每个节点可以容纳的pod数(即IP数) 同时,依赖VPC的路由表中的路由条目实现Pod跨节点的通信。 同时,可以看到安全组对Pod 网段的放行策略(默认的企业级安全组 实例之间内网隔离)
Terway是阿里云容器服务ACK自研的网络插件。Terway将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略,支持对单个容器做带宽的限流。
Terway网络插件中,每个Pod都拥有自己网络栈和IP地址。同一台ECS内的Pod之间通信,直接通过机器内部的转发;跨ECS的Pod通信、报文通过VPC的弹性网卡直接转发。由于不需要使用VxLAN等的隧道技术封装报文,因此Terway 模式网络具有较高的通信性能。
单节点所支持的最大Pod数取决于该节点的弹性网卡(ENI)数。
注:Pod独占弹性网卡以获得最佳性能 -- 白名单功能
https://help.aliyun.com/document_detail/97621.html Kubernetes网络策略(Network Policy)提供基于策略的网络控制。当您使用Terway容器网络时,如果您希望在IP地址或者端口层面控制网络流量,您可以为集群中特定应用使用网络策略。 常见场景:
kubectl api-resrouces NAME SHORTNAMES APIVERSION NAMESPACED KIND networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels: run: nginx ingress:
```yaml kubectl apply -f policy.yaml kubectl run busybox --rm -ti --image=busybox /bin/sh wget nginx-svc
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
ACK Flannel网络插件
Flannel是ACK的网络插件,使用独立于VPC网段的Pod的网段分配给Pod。在ACK中,Flannel插件采用的是阿里云VPC模式,报文经过阿里云VPC的路由表直接转发,不需要Vxlan等隧道封装技术封装报文,所以比Flannel默认的Vxlan模式具有更高的通信性能。
需要提前规划Pod的CIDR,且不可与node CIDR以及service CIDR重叠。需要预先指定每个节点可以容纳的pod数(即IP数) 同时,依赖VPC的路由表中的路由条目实现Pod跨节点的通信。 同时,可以看到安全组对Pod 网段的放行策略(默认的企业级安全组 实例之间内网隔离)
ACK Terway网络插件
Terway是阿里云容器服务ACK自研的网络插件。Terway将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略,支持对单个容器做带宽的限流。
Terway网络插件中,每个Pod都拥有自己网络栈和IP地址。同一台ECS内的Pod之间通信,直接通过机器内部的转发;跨ECS的Pod通信、报文通过VPC的弹性网卡直接转发。由于不需要使用VxLAN等的隧道技术封装报文,因此Terway 模式网络具有较高的通信性能。
单节点所支持的最大Pod数取决于该节点的弹性网卡(ENI)数。
注:Pod独占弹性网卡以获得最佳性能 -- 白名单功能
Flannel 与 Terway网络插件比较
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