# TKE网络模式之vpc-cni

本章介绍了如何在TKE上使用vpc-cni的网络模式。

## vpc-cni网络模式介绍

一般我们选择vpc-cni的网络模式分为2中情况，一种是创建集群的时候就选择vpc-cni模式，还有一种就是创建时候选择的GlobalRouter模式，后面才开启的vpc-cni模式，无论哪种情况开启，启用vpc-cni模式都需要满足如下要求

* 仅支持 k8s 1.10、1.12、1.14和1.16集群。
* 集群需要开启 cni 支持。
* 当前 VPC-CNI 模式仅支持单一子网，因此该模式下的 Pod 不可跨可用区调度。
* 当前 VPC-CNI 模式的子网不能与其他云上资源共用（如云服务器、负载均衡等）。
* 和子网处于相同可用区的节点才支持创建 VPC-CNI 模式的 Pod，请提前规划 VPC-CNI 模式子网。
* 您需要指定单节点下 VPC-CNI 模式的 Pod 数量上限，创建后不可修改。建议集群中节点配置相同。

## 创建集群时候选择vpc-cni模式

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F95ebc30665504d2148e888c4a7022838a22a2478.png?generation=1606373438646432\&alt=media)

创建集群的时候选择，vpc-cni模式，建议开启固定ip的功能，如果某些业务需要设置ip为固定的，这样可以通过固定ip设置，固定ip的模式默认只在vpc-cni网络模式下的StatefulSet类型工作负载才会生效。

集群网络模式设置成vpc-cni后，集群会开启tke-eni的服务，来操作弹性网卡来pod进行ip分配，ip的从容器网络中获取

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Ffe8a5530ff53bfe8cbd1f610c937904c11a14445.png?generation=1606373438748886\&alt=media)

同时每一个节点会添加一个弹性网卡eth1，对应的pod ip通过新增的eth1分配副ip得到，创建的时候选择vpc-cni模式，所有的pod服务ip都是在容器的子网中，Pod 和 Node 的控制面和数据面完全在同一网络层面。

## 后续开启vpc-cni模式

开启的方式如下，必须要提前规划好一个子网，子网要求满足上面的要求，选择好你配置子网就可以开启了

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F5c7c4fc360d2196191cacc1b0a0329bd3b354f7e.png?generation=1606373438678466\&alt=media)

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fce8e36c86e6241b88763484978eb3a791d6fb7df.png?generation=1606373439054314\&alt=media)

同样的开启vcp-cni的网络模式后，集群会开启tke-eni的服务，来操作弹性网卡来pod进行ip分配，并且会为每一个节点分配一个弹性网卡，采用vpc-cni的pod服务ip都是在容器的子网中获取，Pod 和 Node 的控制面和数据面完全在同一网络层面。

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Ffe8a5530ff53bfe8cbd1f610c937904c11a14445.png?generation=1606373438454530\&alt=media)

后续开启的vpc-cni模式只能适用于StatefulSet类型的工作负载，其他的工作类型暂不支持从vpc-cni的容器子网中分配ip网络，其他的工作负载类型还是走GlobalRouter模式，pod ip的分配还是从之前的网络中获取，设置StatefulSet的网络模式为vpc-cni如下

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F9b608526ea49c7ec176cf11a8d46a4e2540b7d11.png?generation=1606373438883833\&alt=media)

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fc7c3e69e59e3ba55e17eeddf742338da87da4fd7.png?generation=1606373438924799\&alt=media)

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fab25cc1f8967cd5847138c944237d0e4993e4a8f.png?generation=1606373438615418\&alt=media)

如果你需要开启固定ip，则开启固定ip的选择。
