云原生網絡2.0網絡模型
云原生網絡2.0是CCE的新一代容器網絡模型,深度整合了虛擬私有云VPC的彈性網卡(Elastic Network Interface,簡稱ENI)和輔助彈性網卡(Sub Network Interface,簡稱Sub-ENI)的能力,直接從VPC網段內分配容器IP地址,支持ELB直通容器,綁定安全組,綁定彈性公網IP,享有高性能。
圖 云原生網絡2.0


說明
物理機節點上Pod使用ENI網卡;ECS節點上Pod使用Sub-ENI網卡,Sub-ENI網卡通過VLAN子接口掛載在ENI上。
節點內Pod間通信:直接通過VPC的彈性網卡/彈性輔助網卡進行流量轉發。
跨節點Pod間通信:直接通過VPC的彈性網卡/彈性輔助網卡進行流量轉發。
約束與限制
僅CCE Turbo集群支持使用云原生網絡2.0。
優缺點
優點
- 容器網絡直接使用的VPC,網絡問題易排查、性能最高。
- 支持VPC內的外部網絡與容器IP直通。
- 可直接利用VPC提供的負載均衡、安全組、彈性公網IP等能力。
缺點
由于容器網絡直接使用的VPC,消耗VPC的地址空間,創建集群前需要合理規劃好容器網段。
適用場景
- 性能要求高,需要使用VPC其他網絡能力的場景:由于云原生網絡2.0直接使用的VPC網絡,性能與VPC網絡的性能幾乎一致,所以適用于對帶寬、時延要求極高的業務場景,比如:線上直播、電商秒殺等。
- 大規模組網:云原生網絡2.0當前最大可支持2000個ECS節點,10萬個容器。
容器IP地址管理
云原生網絡2.0下的BMS節點和ECS節點分別使用的是彈性網卡和輔助彈性網卡:
- Pod的IP地址從配置給容器網絡的VPC子網上直接分配,無需為節點分配一個單獨的小網段。
- ECS節點添加到集群中,先綁定用于承載輔助彈性網卡的彈性網卡,待彈性網卡綁定完成后,即可綁定輔助彈性網卡。
- ECS節點上綁定的彈性網卡數: 該節點最多可綁定的輔助彈性網卡數/64 ,向上取整。
- ECS節點上綁定的總網卡數: 用于承載輔助彈性網卡的彈性網卡數+當前Pod使用的輔助彈性網卡數+預熱的輔助彈性網卡數 。
- BMS節點上綁定的網卡數: 當前Pod使用的彈性網卡數+預熱的彈性網卡數 。
- Pod創建時,優先從節點的預熱網卡池中隨機分配一個可用的網卡。
- Pod刪除時,網卡釋放回節點的預熱網卡池。
- 節點刪除時,將釋放節點上所有已綁定的網卡(彈性網卡釋放回集群預申請的網卡池,輔助彈性網卡直接刪除)。
云原生2.0網絡目前支持兩種網卡預熱策略:節點容器網卡動態預熱策略和 節點綁定容器網卡數總量高低水位策略(廢棄中) 。使用場景如下表所示:
表 容器網卡預熱策略對比表
| 容器網卡預熱策略 | 節點容器網卡動態預熱策略(默認策略) | 節點綁定容器網卡數總量高低水位策略(廢棄中) |
|---|---|---|
| 管理策略 | 節點最少綁定容器網卡數(nic-minimum-target):保障節點最少有多少張容器網卡綁定在節點上(未被Pod使用+已被Pod使用) 節點預熱容器網卡上限檢查值(nic-maximum-target):當節點綁定的容器網卡數超過該值,不再主動預熱容器網卡 節點動態預熱容器網卡數:當Pod使用完節點最少綁定容器網卡數(nic-minimum-target)后,會始終額外預熱多少張容器網卡 節點預熱容器網卡回收閾值(nic-max-above-warm-target):只有當 節點上空閑的容器網卡數 - 節點動態預熱容器網卡數(nic-warm-target) 大于此閾值時,才會觸發預熱容器網卡的解綁回收 |
節點綁定容器網卡數低水位:保障節點至少會綁定多少張網卡(未被Pod使用+已被Pod使用) 節點綁定容器網卡數高水位:保障節點至多會綁定多少張網卡,超過該值會嘗試解綁未被使用的空閑網卡 |
| 適用場景 | 在盡可能提高IP資源利用率的前提下,盡可能加快Pod的啟動速度,適用于容器網段IP地址數緊張的場景 通過合理配置上述四個參數,可適用于各種業務場景。 |
適用于容器網段IP地址數充足,且節點上Pod數變化劇烈,但固定在某個范圍的場景 |
說明
1.19.16-r2、1.21.5-r0、1.23.3-r0到1.19.16-r4、1.21.7-r0、1.23.5-r0之間的集群版本只支持nic-minimum-target和nic-warm-target兩個容器網卡動態預熱參數配置,綁定網卡數總量高低水位配置優先級高于容器網卡動態預熱配置。
1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0及以上集群版本支持全部四個容器網卡動態預熱參數配置,容器網卡動態預熱配置優先級高于綁定網卡數總量高低水位配置。
圖節點容器網卡動態預熱策略


針對節點容器網卡動態預熱策略,CCE提供了四個參數配置,您可以根據業務規劃,集群規模以及節點上可綁定的網卡數,合理設置這四個參數。
表容器網卡動態預熱參數
| 容器網卡動態預熱參數 | 默認值 | 參數說明 | 配置建議 |
|---|---|---|---|
| 節點最少綁定容器網卡數(nic-minimum-target) | 10 | 保障節點最少有多少張容器網卡綁定在節點上,支持數值跟百分比兩種配置方式。 數值配置:參數值需為正整數。例如10,表示節點最少有10張容器網卡綁定在節點上。當超過節點的容器網卡配額時,后臺取值為節點的容器網卡配額。 百分比配置:參數值范圍為1%-100%。例如10%,如果節點容器網卡配額128,表示節點最少有12張(向下取整)容器網卡綁定在節點上。建議nic-minimum-target與nic-maximum-target為同類型的配置方式(同采用數值配置或同采用百分比配置)。 |
建議配置為大部分節點平時日常運行的Pod數。 |
| 節點預熱容器網卡上限檢查值(nic-maximum-target) | 0 | 當節點綁定的容器網卡數超過節點預熱容器網卡上限檢查值(nic-maximum-target),不再主動預熱容器網卡。 當該參數大于等于節點最少綁定容器網卡數(nic-minimum-target)時,則開啟預熱容器網卡上限值檢查;反之,則關閉預熱容器網卡上限值檢查。支持數值跟百分比兩種配置方式。 數值配置:參數值需為正整數。例如0,表示關閉預熱容器網卡上限值檢查。當超過節點的容器網卡配額時,后臺取值為節點的容器網卡配額。 百分比配置:參數值范圍為1%-100%。例如50%,如果節點容器網卡配額128,表示節點預熱容器網卡上限檢查值64(向下取整)。 建議nic-minimum-target與nic-maximum-target為同類型的配置方式(同采用數值配置或同采用百分比配置)。 |
建議配置為大部分節點平時最多運行的Pod數。 |
| 節點動態預熱容器網卡數(nic-warm-target) | 2 | 當Pod使用完節點最少綁定容器網卡數(nic-minimum-target)后,會始終額外預熱多少張容器網卡,只支持數值配置。 當節點動態預熱容器網卡數(nic-warm-target) + 節點當前綁定的容器網卡數 大于 節點預熱容器網卡上限檢查值(nic-maximum-target) 時,只會預熱nic-maximum-target與節點當前綁定的容器網卡數的差值。 |
建議配置為大部分節點日常10s內會瞬時彈性擴容的Pod數。 |
| 節點預熱容器網卡回收閾值(nic-max-above-warm-target) | 2 | 只有當節點上空閑的容器網卡數- 節點動態預熱容器網卡數(nic-warm-target) 大于此閾值 時,才會觸發預熱容器網卡的解綁回收。只支持數值配置。 調大此值會減慢空閑容器網卡的回收,加快Pod的啟動速度,但會降低IP地址的利用率,特別是在IP地址緊張的場景,請謹慎調大。 調小此值會加快空閑容器網卡的回收,提高IP地址的利用率,但在瞬時大量Pod激增的場景,部分Pod啟動會稍微變慢。 |
建議配置為大部分節點日常在分鐘級時間范圍內會頻繁彈性擴容縮容的Pod數 - 大部分節點日常10s內會瞬時彈性擴容的Pod數。 |

說明上述容器網卡動態預熱參數支持集群級別的全局配置和節點池級別的差異化配置,其中節點池級別的容器網卡動態預熱配置優先級高于集群級別的容器網卡動態預熱配置。
容器網絡組件會為每個節點維護一個可彈性伸縮的預熱容器網卡池,定時(約10s一次)檢測并計算需要綁定的預熱容器網卡數或需要解綁的空閑容器網卡數 :
- 需要綁定的預熱容器網卡數= min(nic-maximum-target - 當前綁定的容器網卡總數,max(nic-minimum-target- 當前綁定的容器網卡總數,nic-warm-target - 當前空閑的容器網卡數))
- 需要解綁的空閑容器網卡數= min(當前空閑的容器網卡數 - nic-warm-target- nic-max-above-warm-target,當前綁定的容器網卡總數 - nic-minimum-target)**
節點上當前預熱的容器網卡數穩態后會維持在以下區間內:
- 當前預熱的容器網卡數區間最小值= min(max(nic-minimum-target- 當前綁定的容器網卡總數,nic-warm-target), nic-maximum-target - 當前綁定的容器網卡總數)
- 當前預熱的容器網卡數區間最大值= max(nic-warm-target+ nic-max-above-warm-target, 當前綁定的容器網卡總數 - nic-minimum-target)
Pod創建時,優先從節點的預熱容器網卡池中順序分配(最早未被使用的)一張空閑的容器網卡,如沒有可用的空閑網卡,會新創建一張網卡(輔助彈性網卡)或 新綁定一張網卡(彈性網卡)以分配給該Pod。
Pod刪除時,對應的容器網卡先釋放回節點的預熱容器網卡池,2分鐘冷卻時間內可供下一個Pod循環使用,超過2分鐘冷卻時間后且節點預熱容器網卡池計算出需要釋放該容器網卡,才會釋放該容器網卡。
圖節點綁定容器網卡數總量高低水位策略


針對總量高低水位算法,CCE提供了一個配置參數,您可以根據業務規劃,集群規模以及節點上可綁定的網卡數,合理設置這個參數:
- 節點綁定容器網卡數低水位:默認為0,保障節點至少會綁定多少張網卡(未被Pod使用+已被Pod使用)。ECS節點預綁定低水位網卡數=節點綁定網卡數低水位*節點總輔助彈性網卡數;BMS節點預綁定低水位網卡數=節點綁定網卡數低水位*節點總彈性網卡數。
- 節點綁定容器網卡數高水位:默認為0,保障節點至多會綁定多少張網卡,超過該值會嘗試解綁未被使用的空閑網卡。ECS節點預綁定高水位網卡數=節點綁定網卡數高水位*節點總輔助彈性網卡數;BMS節點預綁定高水位網卡數=節點綁定網卡數高水位*節點總彈性網卡數。
容器網絡組件會為每個節點維護一個可彈性伸縮的容器網卡池:
- 當已綁定容器網卡數量(Pod使用的容器網卡數+預綁定的容器網卡數)< 預綁定低水位容器網卡數時,會綁定網卡直到節點上 已綁定容器網卡數量(Pod使用的容器網卡數+預綁定的容器網卡數)=預綁定低水位容器網卡數 。
- 當 已綁定容器網卡數量(Pod使用的容器網卡數+預綁定的容器網卡數)> 預綁定高水位容器網卡數 ,且** 節點預綁定的容器網卡數>0 時,會定時釋放預綁定的容器網卡(超過2分鐘未被使用的空閑網卡),直到Pod使用的容器網卡數+預綁定的容器網卡數=節點預綁定高水位容器網卡數 或Pod使用的容器網卡數 > 節點預綁定高水位容器網卡數** 且** 節點預綁定的容器網卡數=0。**
網段規劃建議
在集群網絡構成中介紹集群中網絡地址可分為節點網絡、容器網絡、服務網絡三塊,在規劃網絡地址時需要從如下方面考慮:
- 三個網段不能重疊 ,否則會導致沖突。且集群所在VPC下所有子網(包括擴展網段子網)不能和容器網段、服務網段沖突。
- 保證 每個網段有足夠的IP地址可用 。
- 節點網段的IP地址要與集群規模相匹配,否則會因為IP地址不足導致無法創建節點。
- 容器網段的IP地址要與業務規模相匹配,否則會因為IP地址不足導致無法創建Pod。
云原生網絡2.0模型下,由于容器網段與節點網段共同使用VPC下的網絡地址,建議容器子網與節點子網不要使用同一個子網,否則容易出現IP資源不足導致容器或節點創建失敗的情況。
另外云原生網絡2.0模型下容器網段支持在創建集群后增加子網,擴展可用IP數量,此時需要注意增加的子網不要與容器網段其他子網存在網絡沖突。
圖 網段配置(創建集群時配置)


云原生網絡2.0訪問示例
創建一個CCE Turbo集群,集群包含3個ECS節點。
進入其中一個節點,可以看到節點有一個主網卡和擴展網卡,這兩個網卡都是彈性網卡,其中擴展網卡是屬于容器網絡網段,用于給Pod掛載輔助彈性網卡Sub-ENI。
圖 節點網卡


在集群中創建一個Deployment。
kind: Deployment
apiVersion: apps/v1
metadata:
name: example
namespace: default
spec:
replicas: 6
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: container-0
image: 'nginx:perl'
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
imagePullSecrets:
- name: default-secret
創建后查詢Pod。
$ kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
example-5bdc5699b7-54v7g 1/1 Running 0 7s 10.1.18.2 10.1.0.167 <none> <none>
example-5bdc5699b7-6dzx5 1/1 Running 0 7s 10.1.18.216 10.1.0.186 <none> <none>
example-5bdc5699b7-gq7xs 1/1 Running 0 7s 10.1.16.63 10.1.0.144 <none> <none>
example-5bdc5699b7-h9rvb 1/1 Running 0 7s 10.1.16.125 10.1.0.167 <none> <none>
example-5bdc5699b7-s9fts 1/1 Running 0 7s 10.1.16.89 10.1.0.144 <none> <none>
example-5bdc5699b7-swq6q 1/1 Running 0 7s 10.1.17.111 10.1.0.167 <none> <none>
這里Pod的IP都是Sub-ENI,掛載在節點的ENI上(擴展網卡)。
例如10.1.0.167節點對應的擴展網卡是10.1.17.172。在彈性網卡控制臺上可以看到10.1.17.172這塊擴展網卡掛載3個Sub-ENI,正是Pod的IP。
圖 Pod網卡


在VPC中直接訪問Pod的IP,能夠正常訪問。