设置和运行 NCP 和 NSX 节点代理。

过程

  1. 编辑 roles/ncp/defaults/main.yaml,并指定 OpenShift API 服务器 IP、NSX Manager IP 以及 NCP ReplicationController yaml 和 nsx-node-agent DaemonSet yaml 的下载 URL。
  2. 从 openshift-ansible-nsx 目录中,运行 ncp 角色:
        ansible-playbook -i /PATH/TO/HOSTS/hosts ncp.yaml

结果

ncp 角色执行以下步骤:

  • 检查 nsx-system 项目是否存在;如果不存在,则创建一个项目。

        oc new-project nsx-system
  • 下载 ncp-rbac yaml 文件并将 apiVersion 更改为 v1

  • 创建 NCP pod 的服务帐户,然后创建一个群集角色指定 NCP 可以访问的资源,并将群集角色绑定到 NCP 服务帐户。

  • 创建 nsx-node-agent pod 的服务帐户,然后创建一个群集角色指定节点代理可以访问的资源,并将群集角色绑定到节点代理服务帐户。

        oc apply -f /tmp/ncp-rbac.yml
  • 获取与上述服务帐户关联的令牌,并将其存储在 /etc/nsx-ujo/<service_account>_token 中。

        secret=`kubectl get serviceaccount ncp-svc-account -o yaml | grep -A1 secrets | tail -n1 | awk {'print $3'}`
        kubectl get secret $secret -o yaml | grep 'token:' | awk {'print $2'} | base64 -d > /etc/nsx-ujo/ncp_token
        secret=`kubectl get serviceaccount nsx-node-agent-svc-account -o yaml | grep -A1 secrets | tail -n1 | awk {'print $3'}`
        kubectl get secret $secret -o yaml | grep 'token:' | awk {'print $2'} | base64 -d > /etc/nsx-ujo/node_agent_token
  • 为 NCP 下载 SecurityContextConstraint (SCC) yaml 文件 ncp-os-scc.yml,并根据该 yaml 创建 SCC。

        oc apply -f ncp-os-scc.yml

    该 SCC yaml 文件将 SELinux 类型指定为 spc_t,以确保 NCP/nsx-node-agent 在 SELinux 下具有访问权限。即,

        seLinuxContext:
          seLinuxOptions:
          type: spc_t

    在 SCC yaml 文件中的 seLinuxContextseLinuxOptions 下,基于标签的 SELinux 访问控制级别设置为 s0:c0:c1023,以允许 ncp/node-agent 访问不同文件类别的目标。

  • 将 SCC 添加到创建 NCP 和 NSX 节点代理 pod 的用户。例如,将 SCC 添加到当前项目中的默认用户:

        oc adm policy add-scc-to-user ncp-scc -z default
  • 将 SCC 添加到 NCP 和 NSX 节点代理服务帐户:

        oc adm policy add-scc-to-user ncp-scc -z ncp-svc-account
        oc adm policy add-scc-to-user ncp-scc -z nsx-node-agent-svc-account
  • 为 NCP ReplicationController (RC) 和 nsx-node-agent DaemonSet (DS) 下载 yaml 文件并更新 ConfigMap。

  • 下载并加载 NCP 映像(nsx-node-agent 使用相同的映像)。

  • 配置该服务帐户并为 NCP 和 nsx_node_agent 设置所需的 SecurityContextConstraint。

  • 创建 NCP ReplicationController 和 nsx-node-agent DaemonSet。

注:

NCP 打开与 Kubernetes API 服务器的持续 HTTP 连接,以监视 Kubernetes 资源的生命周期事件。如果 API 服务器故障或网络故障导致 NCP 的 TCP 连接失效,则必须重新启动 NCP,以便其可以重新建立与 API 服务器的连接。否则,NCP 将错过新事件。