---
# System prepended metadata

title: '[k8s] CNI'
tags: [network, kubernetes]

---

[k8s] CNI
==========
###### tags: `kubernetes` `network`
:::danger
+ Container Network Interface (CNI) was accepted to CNCF on **May 23, 2017** and is at the **Incubating** project maturity level.
+ 由一组用於配置 Linux 容器的network interface的spec和library组成，同時還包含了一些插件
+ `CNI 僅關心容器創建時的網路分配，和當容器被刪除時釋放網路資源。`
    + 當有問題時，有可能出現「unable to allocate IP address」
:::

![](https://hackmd.io/_uploads/r1NEnOOS3.png =500x)


## 常見的cni plugins
![](https://hackmd.io/_uploads/BJi8kwdB2.png)
> 這些 CNI Plugin 都是由 CNI 專案所提供的基本功能，其目的非常簡單，就是提供最簡單且`單一的網路架構`。
> > so that your Pods can communicate with each other.[color=#d1c329]

## configuring CNI
![](https://i.imgur.com/NROjC0X.png)
> 當 kubelet 在建立 Pod 的時候，會透過 CNI 來讓 Pod 成功設定好網路

+ `cni-bin-dir` (預設 /opt/cni/bin)：存放各種 CNI Plugin 執行檔案的位置，例如上面提到的***配置網路，刪除網路，分配 IP 位址***的功能
+ `cni-conf-dir` (預設 /etc/cni/net.d)：存放 CNI 的組態檔案，讓 kubelet 知道 Pod 在設定網路時，需要透過哪一些 Plugin 來完成

> **Note:**
Prior to Kubernetes 1.24, the CNI plugins could also be managed by the kubelet using the `cni-bin-dir` and `network-plugin` ***command-line parameters***. These command-line parameters were **removed in Kubernetes 1.24**, with management of the CNI no longer in scope for kubelet.[color=red]

## WeaveWorks
![](https://i.imgur.com/6vGoafz.jpg)
