在安装 OpenShift 4 之前,您必须先更新某些 NCP 配置文件。

这些 YAML 文件包含在 download.vmware.com 上提供的 NCP 下载文件中。您可以转到 https://github.com/vmware/nsx-container-plugin-operator/releases,找到相应的 Operator 版本(例如 v3.1.1),然后下载 openshift4.tar.gz

以下文件位于 nsx-container-plugin-operator/deploy 文件夹中:
  • configmap.yaml – 使用 NSX-T 信息更新此文件。
  • operator.yaml – 在此文件中指定 NCP 映像位置。
  • namespace.yaml – Operator 的命名空间规范。请勿编辑此文件。
  • role_binding.yaml – Operator 的角色绑定规范。请勿编辑此文件。
  • role.yaml – Operator 的角色规范。请勿编辑此文件。
  • service_account.yaml – Operator 的服务帐户规范。请勿编辑此文件。
  • lb-secret.yaml - 默认 NSX-T 负载均衡器证书的密钥。
  • nsx-secret.yaml - 用于对 NSX-T 进行基于证书的身份验证的密钥。此文件用于代替 configmap.yaml 中的 nsx_api_usernsx_api_password
  • operator.nsx.vmware.com_ncpinstalls_crd.yaml - Operator 拥有的客户资源定义。
  • operator.nsx.vmware.com_v1_ncpinstall_cr.yaml - Operator 拥有的客户资源。
以下 connfigmap.yaml 示例显示了基本配置。有关更多选项,请参见 deploy 文件夹中的 configmap.yaml。您必须根据您的环境指定以下参数的值:
  • 集群
  • nsx_api_managers
  • nsx_api_user
  • nsx_api_password
  • external_ip_pools
  • tier0_gateway
  • overlay_tz
  • edge_cluster
  • apiserver_host_ip
  • apiserver_host_port
kind: ConfigMap 
metadata: 
  name: nsx-ncp-operator-config 
  namespace: nsx-system-operator 
data: 
  ncp.ini: | 
    [vc] 

    [coe] 

    # Container orchestrator adaptor to plug in. 
    adaptor = openshift4 

    # Specify cluster name. 
    cluster = ocp 

    [DEFAULT] 

    [nsx_v3] 
    policy_nsxapi = True 
    # Path to NSX client certificate file. If specified, the nsx_api_user and 
    # nsx_api_password options will be ignored. Must be specified along with 
    # nsx_api_private_key_file option 
    #nsx_api_cert_file = <None> 

    # Path to NSX client private key file. If specified, the nsx_api_user and 
    # nsx_api_password options will be ignored. Must be specified along with 
    # nsx_api_cert_file option 
    #nsx_api_private_key_file = <None> 

    nsx_api_managers = 10.114.209.10,10.114.209.11,10.114.209.12 

    nsx_api_user = admin 
    nsx_api_password = VMware1! 

    # Do not use in production 
    insecure = True 

    # Choices: ALL DENY <None> 
    log_firewall_traffic = DENY 

    external_ip_pools = 10.114.17.0/25 
    #top_tier_router = <None> 
    tier0_gateway = t0a 
    single_tier_topology = True 
    overlay_tz = 3efa070d-3870-4eb1-91b9-a44416637922 
    edge_cluster = 3088dc2b-d097-406e-b9de-7a161e8d0e47 

    [ha] 

    [k8s] 
    # Kubernetes API server IP address. 
    apiserver_host_ip = api-int.ocp.yasen.local 

    # Kubernetes API server port. 
    apiserver_host_port = 6443 

    client_token_file = /var/run/secrets/kubernetes.io/serviceaccount/token 

    # Choices: <None> allow_cluster allow_namespace 
    baseline_policy_type = allow_cluster 
    enable_multus = False 
    process_oc_network = False 
 
    [nsx_kube_proxy] 

    [nsx_node_agent] 

    ovs_bridge = br-int 

    # The OVS uplink OpenFlow port 
    ovs_uplink_port = ens192 

    [operator] 

    # The default certificate for HTTPS load balancing. 
    # Must be specified along with lb_priv_key option. 
    # Operator will create lb-secret for NCP based on these two options. 
    #lb_default_cert = <None> 

    # The private key for default certificate for HTTPS load balancing. 
    # Must be specified along with lb_default_cert option. 
    #lb_priv_key = <None>
operator.yaml 中,您必须在 env 部分中指定 NCP 映像的位置。
kind: Deployment
metadata: 
  name: nsx-ncp-operator 
  namespace: nsx-system-operator 
spec: 
  replicas: 1 
  selector: 
    matchLabels: 
      name: nsx-ncp-operator 
  template: 
    metadata: 
      labels: 
        name: nsx-ncp-operator 
    spec: 
      hostNetwork: true 
      serviceAccountName: nsx-ncp-operator 
      tolerations: 
      - effect: NoSchedule 
        key: node-role.kubernetes.io/master 
      - effect: NoSchedule 
        key: node.kubernetes.io/not-ready 
      containers: 
        - name: nsx-ncp-operator 
          # Replace this with the built image name 
          image: vmware/nsx-container-plugin-operator:latest 
          command: ["/bin/bash", "-c", "nsx-ncp-operator --zap-time-encoding=iso8601"] 
          imagePullPolicy: Always 
          env: 
            - name: POD_NAME 
              valueFrom: 
                fieldRef: 
                  fieldPath: metadata.name 
            - name: OPERATOR_NAME 
              value: "nsx-ncp-operator" 
            - name: NCP_IMAGE 
              value: "{NCP Image}"

对于 Operator 映像,请指定需要安装的 NCP 版本。例如,对于 NCP 3.1.1,Operator 映像为 vmware/nsx-container-plugin-operator:v3.1.1

请注意,由于速率限制策略,不建议在生产环境中直接提取 dockerhub。从 dockerhub 中提取映像后,可以将映像推送到本地注册表,注册表可能与 NCP 映像位于相同位置。

或者,您也可以使用 download.vmware.com 上提供的 NCP 下载文件中包含的 Operator 映像文件,并将该文件导入本地注册表。此映像与在 VMware dockerhub 上发布的映像相同。

要设置 CNI 的 MTU 值,请修改 Operator ConfigMap 的 [nsx-node-agent] 部分中的 mtu 参数。Operator 将触发重新创建 nsx-ncp-boostrap pod,从而确保在所有节点上正确更新 CNI 配置文件。您还必须相应地更新节点 MTU。节点与 pod MTU 不匹配可能会导致节点与 pod 之间的通信出现问题,从而影响 TCP 活动和就绪状态探测。

要在节点中的接口上更新 MTU,您可以运行 ovs-vsctl set Interface <interface-name> mtu_request=<mtu-value> 命令,其中,interface-name 可以是 nsx-node-agent Pod 上运行的 nsx-ovs 容器中的 OVS 接口或物理接口。例如,oc -n nsx-system exec -it nsx-node-agent-dqqm9 -c nsx-ovs -- ovs-vsctl set Interface ens192 mtu_request=9000

注意:在 Operator ConfigMap 中启用 HA 将创建单个 NCP pod,因为默认情况下,ncpReplicas 参数设置为 1。要创建 3 个 NCP pod,可以将其更改为 3。安装集群后,您可以使用命令 oc edit ncpinstalls ncp-install -n nsx-system 更改 NCP 副本的数量。

使用主体身份配置对 NSX-T 的基于证书的身份验证。

在生产环境中,建议不要在 configmap.yaml 中使用 nsx_api_usernsx_api_password 参数公开管理员凭据。以下步骤介绍了如何创建主体身份,并允许 NCP 使用证书进行身份验证。

  1. 生成证书和密钥。
  2. 在 NSX Manager 中,导航到系统 > 用户和角色,然后单击添加 > 主体身份和角色。添加主体身份,并粘贴在步骤 1 中生成的证书。
  3. nsx-secret.yaml 中添加 Base64 编码的证书和密钥值。
  4. 在 configmap.yaml 中的 [nsx_v3] 部分下设置证书和密钥文件的位置:
    nsx_api_cert_file = /etc/nsx-ujo/nsx-cert/tls.crt
    nsx_api_private_key_file = /etc/nsx-ujo/nsx-cert/tls.key

注意:不支持在已引导的集群上更改身份验证方法。

(可选)配置默认 NSX-T 负载均衡器证书

NSX-T 负载均衡器可以实施 OpenShift HTTPS 路由对象和卸载 OCP HAProxy。为此,需要提供一个默认证书。执行以下步骤以配置默认证书:

  1. lb-secret.yaml 中添加 Base64 编码的证书和密钥值。
  2. configmap.yaml 中的 [nsx_v3] 部分下设置证书和密钥的位置:
    lb_default_cert_path = /etc/nsx-ujo/lb-cert/tls.crt
    lb_priv_key_path = /etc/nsx-ujo/lb-cert/tls.key

(可选)配置对 NSX Manager 的基于证书的身份验证

如果在 ConfigMap 中将 insecure 设置为 False,则必须指定 NSX Manager 集群中所有三个管理器的证书指纹。以下过程是如何执行此操作的示例。

将三个 NSX Manager 的证书全部复制到一个文件中:

ssh -l admin 10.114.209.10 -f 'get certificate api' > nsx1.crt
ssh -l admin 10.114.209.11 -f 'get certificate api' > nsx2.crt
ssh -l admin 10.114.209.12 -f 'get certificate api' > nsx3.crt

NSX1=`openssl x509 -in nsx1.crt -fingerprint -noout|awk -F"=" '{print $2}'`
NSX2=`openssl x509 -in nsx2.crt -fingerprint -noout|awk -F"=" '{print $2}'`
NSX3=`openssl x509 -in nsx3.crt -fingerprint -noout|awk -F"=" '{print $2}'`
THUMB="$NSX1,$NSX2,$NSX3"
echo $THUMB

编辑 ConfigMap,然后在 [nsx_v3] 部分中添加指纹:

oc edit cm nsx-ncp-operator-config -n nsx-system-operator

    nsx_api_managers = 10.114.209.10,10.114.209.11,10.114.209.12
    nsx_api_user = admin
    nsx_api_password = VMwareVMware1!
    insecure = False
    thumbprint = E0:A8:D6:06:88:B9:65:7D:FB:F8:14:CF:D5:E5:23:98:C9:43:10:71,A7:B0:26:B5:B2:F6:72:2B:39:86:19:84:E6:DD:AB:43:16:0E:CE:BD,52:9B:99:90:88:4C:9F:9B:83:5E:F7:AF:FC:60:06:50:BE:9E:32:08