1.整體架構
Multus CNI是OpenShift的容器網絡接口(CNI)插件,可將多個網絡接口附加到Pod。 通常,在OpenShift中,每個Pod僅具有一個網絡接口(除了回送),Multus支持創建具有多個接口的多宿主Pod。 這是通過Multus充當“meta-plugin”來完成的,它支持調用多個其他CNI插件的CNI插件。

如圖,這樣在Multus安裝情況下,部署應用時可以通過annotation決定是否啟用(缺省不啟用),如果啟用,Pod將會有兩個ip,一個是容器網段ip,另一個是macvlan獲取的IP. 這樣如果需要高速網絡連接,就可以通過這個ip進行基於下層網絡的通訊。

在OpenShift 4的版本中還會支持SR-IOV Plug-in,進一步提升網絡高速性能。
2.Multus離線部署安裝
- 導入鏡像multus-1.tar,multus-2.tar, 將cni-plugins-amd64-v0.7.1.tgz放置在Web服務器
- 修改playbooks/openshift-multinetwork/config.yml以及下面的部署文件
- 運行部署腳本
cd /usr/share/ansible/openshift-ansible
ansible-playbook -i /etc/ansible/hosts playbooks/openshift-multinetwork/config.yml
部署完成后,發現在每個節點除了ovs外,還有有一個daemonset:
[root@master test]# oc get pods -n openshift-sdn NAME READY STATUS RESTARTS AGE kube-multus-ds-amd64-29gvf 1/1 Running 3 1d kube-multus-ds-amd64-ps4gh 1/1 Running 5 1d kube-multus-ds-amd64-zwjnr 1/1 Running 3 1d ovs-dzbjv 1/1 Running 23 23d ovs-fg96b 1/1 Running 15 23d ovs-przqm 1/1 Running 20 23d sdn-2qwrv 1/1 Running 17 23d sdn-jcldg 1/1 Running 24 23d sdn-w2nzh 1/1 Running 27 23d
3.應用部署
- 創建一個macvlan.yaml文件
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-conf spec: config: '{ "cniVersion": "0.3.0", "type": "macvlan", "master": "ens33", "mode": "bridge", "ipam": { "type": "host-local", "subnet": "192.168.174.0/24", "rangeStart": "192.168.174.200", "rangeEnd": "192.168.174.216", "routes": [ { "dst": "0.0.0.0/0" } ], "gateway": "192.168.174.2" } }'
修改相應的網段,網卡名稱,以及網管地址
oc create -f macvlan.yaml
- 創建一個測試的Pod
apiVersion: v1 kind: Pod metadata: name: samplepod annotations: k8s.v1.cni.cncf.io/networks: macvlan-conf spec: containers: - name: samplepod command: ["/bin/bash", "-c", "sleep 2000000000000"] image: registry.example.com/centos-network
進入Pod后,通過ifconfig看到有兩個網卡eth0和net1,分別綁定了容器網絡和macvlan網絡。

基於OCP外的機器訪問地址能通

- 現有應用的改動
針對現有的deploymentconfig中修改成multus方式,只需要在dc中加入
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-conf

Pod啟動以后自動獲取macvlan地址並設置網關。
4.適用場景和網絡隔離
- 不管是否啟用multus, OVS容器網絡始終存在。
- Multus如果采用macvlan,走的是底層網絡,網絡帶寬損耗為0。(已在自己環境驗證)
- 如果應用的Pod需要高速的帶寬傳輸或者對於網絡性能敏感類應用,可以通過multus macvlan模式
- 如果基於macvlan模式獲取ip,網絡隔離需要依賴於IaaS的網絡隔離策略
- 如果需要基於細粒度的網絡控制,通過OpenShift OVS容器網絡定義策略
