Openshift使用openvswitch实现多租户网络隔离的理解


前 言

我们在使用openshift的过程中,当调整网络,偶尔会遇到曾经能通的namespace突然间不通了。这个问题一直困扰着我们。后来通过调研,发现这是网络隔离方式导致的。这篇文章希望能对遇到类似困惑的同学带来帮助。

正 文

当前我们使用openshift提供的ovs-multitenant plugin作为网络解决方案。它具备基于VXLAN的多租户隔离能力。每个项目(projects)被分配一个唯一的ID,对应VXLAN的VNID, 缺省项目之间的POD是不能互相通信的。用户可以通过oc adm pod-network 子命令对租户网络进行管理。

pic1.jpg


每个project对应一个NETID (即VXLAN VNID),创建新project也会分配一个新的VNID。
# oc get netnamespaces
NAME           NETID      EGRESS IPS
project1                5910689    []
project2                4296943    []
project3                8988879    []


要打通两个project之间的网络连接,使用join-projects 子命令。执行后它们的NETID设置成相同, project1 的NETID被改成project3的。这样具备相同VNID的两个项目就可以互相通信了。

pic2.jpg


原来
# oc adm pod-network join-projects --to=project2 project1
# oc get netnamespaces|grep project
project1                4296943    []
project2                4296943    []
project3                8988879    []


改变后
# oc adm pod-network join-projects --to=project3 project1
# oc get netnamespaces|grep project
project1                8988879    []
project2                4296943    []
project3                8988879    []


然而, 这种处理方式有可能导致原来与project1互通的项目,无法继续通信了。比如project1与project2原来是互通的,有一样的NETID。如果让project1加入project3, 后果是1跟2变成不通了。解决办法是把2也加入3。也许我们本来并不希望2, 3之间能够相互可见。所以在操作时,必须对这种组网方式有所了解。在规划网络时,应该以环境类型作为隔离标准,把具有相互通信需求的项目规划使用相同的NETID, 区分 开发/测试/预发布/正式环境。

要把两个project重新隔离起来, 使用isolate-projects 子命令。执行后 project3 NETID不变, project1 被分配新的NETID。假如还有一个或多个project在使用这个NETID,那么project1, project3都被分配新的NETID。
# oc adm pod-network isolate-projects project1 project3
# oc get netnamespaces|grep project
project1                14486461   []
project2                4296943    []
project3                8988879    []


假如某个项目(例如日志),需要被所有项目访问,那么使用 make-projects-global 子命令。执行后把项目的NETID设成0, 相当于可被VXLAN无条件转发。

pic3.jpg

# oc adm pod-network make-projects-global project1
# oc get netnamespaces|grep project
project1                0          []
project2                4296943    []
project3                8988879    []


集群服务基础组件适用这种场景,例如日志,统计,调用链,等等。

0 个评论

要回复文章请先登录注册