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 / Running 1d
kube-multus-ds-amd64-ps4gh / Running 1d
kube-multus-ds-amd64-zwjnr / Running 1d
ovs-dzbjv / Running 23d
ovs-fg96b / Running 23d
ovs-przqm / Running 23d
sdn-2qwrv / Running 23d
sdn-jcldg / Running 23d
sdn-w2nzh / Running 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容器网络定义策略

最新文章

  1. hadoop常用的操作命令
  2. 使用普通用户替代root来管理IEE
  3. 玩转Unity资源,对象和序列化(下)
  4. display:inline 遇上 li 无效? why?
  5. ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread
  6. XmlNodeList循环读取节点值
  7. Sharepoint 2010 创建栏 计算栏
  8. Java Base64 加密解密
  9. Codeforces Round #277 (Div. 2) A. Calculating Function 水题
  10. Json概述以及python对json的相关操作《转》
  11. ActionBar官方教程(4)给ActionBar添加操作项及它们的事件处理
  12. 函数fsp_alloc_free_page
  13. 深入理解Java中的final关键字(转)
  14. elasticsearch5.0集群大数据量迁移方法及注意事项
  15. 在linux下手动安装 apache, php, mysql--终极版
  16. Redis进阶实践之七Redis和Lua初步整合使用(转载 7)
  17. Linux 基础——权限管理命令chmod
  18. Android 之 assets目录和raw目录
  19. CodeForces - 586D Phillip and Trains 搜索。vis 剪枝。
  20. 【重大更新】DevExpress v17.2新版亮点—Bootstrap篇(二)

热门文章

  1. 阿里巴巴Java开发手册(华山版).pdf
  2. P4281 [AHOI2008]紧急集合 / 聚会[LCA]
  3. Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!
  4. 本地项目git到github上
  5. Gamification vs. Game-Based Learning
  6. Async/await promise实现
  7. 借助xxl-sso实现SSO
  8. 统计学基础知识(一)---描述统计学(Descriptive Statistics)
  9. IIS服务器简单搭建
  10. PHP Record the number of login users