Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

16.8. 在 SDN 插件之间迁移

如果您已经使用一个 SDN 插件,并希望切换到另外一个 SDN 插件:

  1. 在所有 master节点上 更改 networkPluginName 参数。
  2. 在所有 master 上重启 API 和 master 服务:

    # master-restart api
    # master-restart controllers
  3. 停止所有 master 和节点上的节点服务:

    # systemctl stop atomic-openshift-node.service
  4. 如果您要在 OpenShift SDN 插件间进行切换,请在所有 master 和节点上重启 OpenShift SDN。

    oc delete pod --all -n openshift-sdn
  5. 在所有 master 和节点上重启节点服务:

    # systemctl restart atomic-openshift-node.service
  6. 如果您要从 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 和组合 podSelectornamespaceSelector

注意

不要在默认的 OpenShift Container Platform 项目中应用 NetworkPolicy 功能,因为它们可能会破坏与集群的通信。

除了在 SDN 插件间迁移以上通用的插件迁移步骤外,从 ovs-multitenant 插件迁移到 ovs-networkpolicy 插件时,会有一个额外的步骤。您需要确定每个命名空间有一个唯一的 NetID这意味着,如果您之前已将项目接合在一起将项目设置为全局项目,则需要在切换到 ovs-networkpolicy 插件前撤销该项目,否则 NetworkPolicy 对象无法正常工作。

提供了一个帮助脚本,可修复 NetID 的,创建 NetworkPolicy 对象来隔离之前隔离命名空间,并启用之前加入的命名空间之间的连接。

使用以下步骤将这个帮助程序脚本迁移到 ovs-networkpolicy 插件,同时仍然运行 ovs-multitenant 插件:

  1. 下载脚本并添加执行文件权限:

    $ curl -O https://raw.githubusercontent.com/openshift/origin/release-3.11/contrib/migration/migrate-network-policy.sh
    $ chmod a+x migrate-network-policy.sh
  2. 运行脚本(需要集群管理员角色)。

    $ ./migrate-network-policy.sh

运行此脚本后,每个命名空间都完全与其它命名空间隔离,因此不同命名空间中的 pod 间的连接尝试会失败,直到完成到 ovs-networkpolicy 插件为止。

如果您希望新创建的命名空间同时具有相同的策略,您可以将默认 NetworkPolicy 对象设置为与 default-deny 匹配,以及由迁移脚本创建的 allow-from-global-namespaces 策略。

注意

如果脚本失败或其他错误,或者稍后决定恢复到 ovs-multitenant 插件,您可以使用 un-migration 脚本。此脚本会撤消迁移脚本所做的更改,并重新加入之前加入的命名空间。