16.8. 在 SDN 插件之间迁移
如果您已经使用一个 SDN 插件,并希望切换到另外一个 SDN 插件:
-
在所有 master 和 节点上 更改
networkPluginName
参数。 在所有 master 上重启 API 和 master 服务:
# master-restart api # master-restart controllers
停止所有 master 和节点上的节点服务:
# systemctl stop atomic-openshift-node.service
如果您要在 OpenShift SDN 插件间进行切换,请在所有 master 和节点上重启 OpenShift SDN。
oc delete pod --all -n openshift-sdn
在所有 master 和节点上重启节点服务:
# systemctl restart atomic-openshift-node.service
如果您要从 OpenShift SDN 插件切换到第三方插件,请清理特定于 OpenShift SDN 的工件:
$ oc delete clusternetwork --all $ oc delete hostsubnets --all $ oc delete netnamespaces --all
另外,在切换到 ovs-multitenant 后,用户无法使用服务目录置备服务。对 openshift-monitoring 也是如此。要更正此问题,使这些项目成为全局项目:
$ oc adm pod-network make-projects-global kube-service-catalog $ oc adm pod-network make-projects-global openshift-monitoring
如果集群最初使用 ovs-multitenant 安装,则不会出现此问题,因为这些命令是作为 Ansible playbook 的一部分执行的。
从 ovs-subnet 切换到 ovs-multitenant OpenShift SDN 插件时,集群中的所有现有项目都将被完全隔离(作为唯一的 VNID)。集群管理员可以选择使用管理员 CLI 修改项目网络。
运行以下命令来检查 VNIDs:
$ oc get netnamespace
16.8.1. 从 ovs-multitenant 迁移到 ovs-networkpolicy
v1
NetworkPolicy 功能仅适用于 OpenShift Container Platform。这意味着 OpenShift Container Platform 不提供出口策略类型、IPBlock 和组合 podSelector
和 namespaceSelector
。
不要在默认的 OpenShift Container Platform 项目中应用 NetworkPolicy
功能,因为它们可能会破坏与集群的通信。
除了在 SDN 插件间迁移以上通用的插件迁移步骤外,从 ovs-multitenant 插件迁移到 ovs-networkpolicy 插件时,会有一个额外的步骤。您需要确定每个命名空间有一个唯一的 NetID
这意味着,如果您之前已将项目接合在一起或将项目设置为全局项目,则需要在切换到 ovs-networkpolicy 插件前撤销该项目,否则 NetworkPolicy 对象无法正常工作。
提供了一个帮助脚本,可修复 NetID 的
,创建 NetworkPolicy 对象来隔离之前隔离命名空间,并启用之前加入的命名空间之间的连接。
使用以下步骤将这个帮助程序脚本迁移到 ovs-networkpolicy 插件,同时仍然运行 ovs-multitenant 插件:
下载脚本并添加执行文件权限:
$ curl -O https://raw.githubusercontent.com/openshift/origin/release-3.11/contrib/migration/migrate-network-policy.sh $ chmod a+x migrate-network-policy.sh
运行脚本(需要集群管理员角色)。
$ ./migrate-network-policy.sh
运行此脚本后,每个命名空间都完全与其它命名空间隔离,因此不同命名空间中的 pod 间的连接尝试会失败,直到完成到 ovs-networkpolicy 插件为止。
如果您希望新创建的命名空间同时具有相同的策略,您可以将默认 NetworkPolicy 对象设置为与 default-deny
匹配,以及由迁移脚本创建的 allow-from-global-namespaces
策略。
如果脚本失败或其他错误,或者稍后决定恢复到 ovs-multitenant 插件,您可以使用 un-migration 脚本。此脚本会撤消迁移脚本所做的更改,并重新加入之前加入的命名空间。