在设置 OpenShift 和 NCP 之前,请注意以下事项。

  • pod 不能包含超过 11 个标签,而命名空间不能包含超过 12 个标签。

  • NCP 将忽略为 OpenShift 内部使用而添加的标签(例如,在其键中具有前缀 openshift.io 的标签),因此,用户看不到在相关的 NSX 资源上创建的相应标记。此处是 OpenShift 使用的标签前缀列表,您应该避免使用以任何以下内容开头的标签键:

        openshift.io
        pod-template
  • 节点需要访问 pod,例如,进行 Kubelet 运行状况检查。请确保主机管理接口能够访问 pod 网络。

  • 攻击者可能会利用 Linux 功能 NET_ADMIN 和 NET_RAW 以破坏 pod 网络。您应该禁用不受信任的容器的这两个功能。默认情况下,对于受限制和 anyuid SCC,不会授予 NET_ADMIN。请注意明确启用 NET_ADMIN 或允许 pod 在特权模式下运行的任何 SCC。此外,对于不受信任的容器,请根据某些内容(如 anyuid SCC)创建一个单独的 SCC 并移除 NET_RAW 功能。可以将 NET_RAW 添加到 SCC 定义中的“requiredDropCapabilities”列表以完成该操作。

  • 允许在 pod/容器中进行 root 访问(仅用于测试)。下面的命令需要在当前登录到的 oc 项目的所有 pod 中具有 root 访问权限。

        oc new-project test-project
        oc project test-project
        oc adm policy add-scc-to-user anyuid -z default
  • 配置(添加)OpenShift 注册表。

        oc login -u system:admin -n default
        oc adm registry --service-account=registry --config=/etc/origin/master/admin.kubeconfig
  • 删除 OpenShift 注册表

        oc login -u system:admin -n default
        oc delete svc/docker-registry dc/docker-registry
  • 缺少 IPtables 防火墙规则以允许将 DNS 请求从 Docker 默认网桥容器发送到节点上的 dnsmasq 进程。需要手动将其打开。编辑 /etc/sysconfig/iptables,并在该文件末尾的 COMMIT 前面添加以下规则:

        -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
        -A OS_FIREWALL_ALLOW -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
        COMMIT
  • 重新启动 iptables、docker 和 origin-node(重新启动 kube 代理和 kubelet)。

        systemctl restart iptables
        systemctl restart docker
        systemctl restart origin-node
  • 需要允许 OpenShift 的内部 docker 注册表使用非 TLS,以使 OpenShift 正常工作。通常,这是 OpenShift Ansible 安装程序自动添加的,但似乎它当前无法正常工作。编辑 /etc/sysconfig/docker 并添加:

        INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'
  • 重新启动 Docker。

    systemctl restart docker
  • NCP 的网络策略支持与 Kubernetes 所提供的支持一样,并且取决于 OpenShift 使用的 Kubernetes 版本。

    • OpenShift 3.9 - 网络策略中的规则子句最多只能包含 namespaceSelectorpodSelectoripBlock 中的一个选择器。

  • Kubernetes API 服务器不对网络策略规范进行验证。可以创建无效的网络策略。NCP 将拒绝此类网络策略。如果更新网络策略以使其有效,NCP 仍不会处理该网络策略。必须删除该网络策略,然后使用有效的规范重新创建一个。

  • 某些版本的 Kubernetes 具有与 subPath 相关的问题(请参见 https://github.com/kubernetes/kubernetes/issues/61076)。如果 OpenShift 版本不包含此问题的修复,NCP pod 创建将失败并显示错误“ CreateContainerConfigError: 无法为 volumeMount 准备 subPath (CreateContainerConfigError: failed to prepare subPath for volumeMount)”。通过从 NCP yaml 中移除 subPath 可以解决此问题。具体来说,移除包含 subPath: ncp.ini 的行并将 volumes 的配置替换为以下内容:

        volumes:
          - name: config-volume
            # ConfigMap nsx-ncp-config is expected to supply ncp.ini
            configMap:
              name: nsx-ncp-config
              items:
                - key: ncp.ini
                  path: ncp.ini

    此更改的副作用是整个 /etc/nsx-ujo 目录将变成只读目录。其结果是,使用证书和私钥将无法与 NSX-T 建立连接,因为 NCP 无法在 /etc/nsx-ujo 下创建临时文件,因此无法将证书和私钥移到单个文件中。

  • 如果正在运行或升级到 OpenShift 3.10 群集,请注意以下事项:

    • 必须指定特定于 OpenShift 3.10 群集的节点组的配置。必须在清单主机文件中提供节点 configmap 配置。

    • 在清单主机文件的 [nodes] 组中定义的所有主机都必须分配给一个节点组名称。

    • 从 Ansible playbook 升级 OpenShift 群集可能会导致网络丢失。请确保在 openshift-ansible 存储库上添加修补程序 (https://github.com/openshift/openshift-ansible/pull/8016/files#diff-2386e21861da3f95091dbb27d72ca366) 以移除 Open vSwitch 软件包的停止/卸载操作。

  • 从 OpenShift 3.10 开始,kube-proxy 已从 openshift-node 服务移至 DaemonSet。它不再默认启动。请执行以下步骤手动启动 kube-proxy(假定已克隆 openshift-ansible 存储库):

    • 转到 openshift ansible 目录,在 [defaults] 下,设置以下内容:

          library = roles/lib_utils/library/
    • 在 playbooks 目录中创建 create_proxy.yaml 文件并在其中包含以下条目:

          - import_playbook: byo/openshift_facts.yml
          - hosts: masters
            run_once: True
            roles:
              - kube_proxy_and_dns
    • 运行 playbook:

          ansible-playbook -i hosts playbooks/create_proxy.yaml

      您将看到指示某些操作失败的错误消息。可以忽略这些消息。可以通过运行命令 oc get po --all-namespaces 验证结果。