NetScaler CPX 故障排除

本文档介绍如何解决在使用 NetScaler CPX 时可能遇到的问题。使用本文档,您可以收集日志以确定原因并应用变通方法来解决与 NetScaler CPX 的安装和配置有关的一些常见问题。

  • 我怎样才能查看 NetScaler CPX 日志?

    如果使用 tty:true 选项部署 NetScaler CPX,则可以使用 kubectl logs 命令查看 NetScaler CPX 日志。可以运行以下命令来显示日志:

     kubectl logs <pod-name> [-c <container-name>] [-n <namespace-name>]
    

    示例:

     kubectl logs cpx-ingress1-69b9b8c648-t8bgn -c cpx -n citrix-adc
    

    以下是带有 tty:true 选项的 NetScaler CPX 容器部署示例:

       containers:
         - name: cpx-ingress
           image: "quay.io/citrix/citrix-k8s-cpx-ingress:13.0-58.30"
           tty: true
           securityContext:
              privileged: true
           env:
    
     <!--NeedCopy-->
    

    您可以在 NetScaler CPX 文件系统的 /cpx/log/boot.log 文件中找到更多启动日志。

    注意:要获取提供点名称,请运行 kubectl get pods -o wide 命令。

  • 我怎样才能从 NetScaler CPX 收集技术支持包?

    您可以在 Kubernetes 主节点的 shell 界面上运行以下命令来收集 NetScaler CPX 技术支持包:

     kubectl exec <cpx-pod-name> [-c <cpx-container-name>] [-n <namespace-name>] /var/netscaler/bins/cli_script.sh "show techsupport"
    

    您可以在 NetScaler CPX 文件系统的 /var/tmp/support 目录中查看技术支持包。使用 scpkubectl cp 将技术支持包从 NetScaler CPX 复制到所需的目的地。

    示例:

     root@localhost# kubectl exec cpx-ingress1-55b9b6fc75-t5kc6 -c cpx -n citrix-adc /var/netscaler/bins/cli_script.sh "show techsupport"
     exec: show techsupport
       Scope:  NODE
     Done
     root@localhost# kubectl cp cpx-ingress1-55b9b6fc75-t5kc6:var/tmp/support/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz /tmp/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz -c cpx
     root@localhost# ll /tmp/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz
     -rw-r--r-- 1 root root 1648109 Aug 31 13:23 /tmp/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz
    
  • 为什么 NetScaler CPX 容器在启动时卡住了?

    可以使用 kubectl describe pods 命令检查 pod 状态。请运行以下命令以了解 pod 状态:

     kubectl describe pods <pod-name> [-c <container-name>] [-n <namespace-name>]
    

    示例:

     kubectl describe pods cpx-ingress1-69b9b8c648-t8bgn
    

    如果 pod 事件显示容器已启动,则必须检查 pod 日志。

  • 如何在 NetScaler CPX 容器和 Kubernetes 主节点之间复制文件?

    建议使用 docker 的卷装载功能将 /cpx 目录装载到主机的文件系统中。如果 NetScaler CPX 容器退出核心转储,则装载点上有日志和其他重要数据可用。

    您可以使用以下任何一个命令在 NetScaler CPX 容器和 Kubernetes 主节点之间复制文件:

    kubectl cp:可以运行以下命令将文件从 pod 复制到节点:

     kubectl cp <pod-name>:<absolute-src-path> <dst-path> [-c <container-name>] [-n <namespace-name>]
    

    示例:

     root@localhost:~# kubectl cp cpx-ingress-596d56bb6-zbx6h:cpx/log/boot.log /tmp/cpx-boot.log -c cpx-ingress
     root@localhost:~# ll /tmp/cpx-boot.log
     -rw-r--r-- 1 root root 7880 Sep 11 00:07 /tmp/cpx-boot.log
    

    scp:您可以使用该命令在 NetScaler CPX 容器和 Kubernetes 节点之间复制文件。运行以下命令将文件从 pod 复制到节点。系统提示输入密码时,请为 SSH 用户提供密码:

     scp <user>@<pod-ip>:<absolute-src-path> <dst-path>
    

    示例:

     root@localhost:~# scp nsroot@192.168.29.198:/cpx/log/boot.log /tmp/cpx-boot.log
     nsroot@192.168.29.198's password:
     boot.log
     100% 7880     5.1MB/s   00:00
     root@localhost:~#
    
  • 如何在 NetScaler CPX 上捕获数据包?

    要在 NetScaler CPX 上捕获数据包,请使用 kubectl exec 命令启动 NetScaler CPX 的 shell 接口。运行以下命令启动 NetScaler CPX 容器的 shell 界面:

         kubectl exec -it pod-name [-c container-name] [-n namespace-name] bash
    

    示例:

         kubectl exec -it cpx-ingress1-69b9b8c648-t8bgn -c cpx -n citrix-adc bash
    

    同时,运行以下命令开始执行数据包捕获:

         cli_script.sh “start nstrace -size 0”
    

    如果要停止正在进行的数据包捕获,请运行以下命令:

         cli_script.sh “stop nstrace”
    

    您可以在 NetScaler CPX 文件系统的 /cpx/nstrace/time-stamp 目录中查看 .cap 文件中捕获的数据包。

  • 为什么即使使用 LS_IP=<ADM-IP> 环境变量部署 NetScaler CPX,仍未配置许可证服务器?

    确保可以从部署 NetScaler CPX 的节点访问许可证服务器。您可以使用 ping <ADM-IP> 命令来验证从 NetScaler CPX 节点到 NetScaler ADM 的连接。

    如果可以从该节点访问 NetScaler ADM,则必须验证 /cpx/log/boot.log 文件中的许可证服务器配置日志。您还可以在 NetScaler CPX 容器的 shell 界面上使用以下命令检查许可证服务器配置:

     cli_script.sh "show licenseserver"
    

    示例:

     root@cpx-ingress-596d56bb6-zbx6h:/cpx/log# cli_script.sh "show licenseserver"
     exec: show licenseserver
     ServerName:  10.106.102.199Port:  27000 Status:  1   Grace:  0  Gptimeleft:  720
     Done
    
  • 为什么即使在 NetScaler CPX 上成功配置了许可证服务器,仍未在 NetScaler CPX 上配置池化许可证?

    验证 /cpx/log/boot.log 文件中的许可证配置日志。您也可以在 NetScaler CPX 容器的 shell 界面上使用以下命令在 NetScaler CPX 上验证配置的池化许可证:

     cli_script.sh “show capacity”
    

    示例:

     root@cpx-ingress-596d56bb6-zbx6h:/cpx/log# cli_script.sh "show capacity"
     exec: show capacity
     Actualbandwidth:  1000  MaxVcpuCount:  2  Edition:  Platinum      Unit:  Mbps   Bandwidth:  0`  `Maxbandwidth:  40000        Minbandwidth:  20       Instancecount:  1
     Done
    

    此外,请务必在许可证服务器中上载所需的许可证文件。在 NetScaler CPX 上成功配置许可证服务器后,您还可以使用以下命令验证许可证服务器上的可用许可证。在 NetScaler CPX pod 的 shell 界面上运行以下命令:

     cli_script.sh “sh licenseserverpool”
    

    示例:

     root@cpx-ingress-596d56bb6-zbx6h:/cpx/log# cli_script.sh "show licenseserverpool"
     exec: show licenseserverpool
         Instance Total                     : 5
         Instance Available                 : 4
         Standard Bandwidth Total           : 0 Mbps
         Standard Bandwidth Availabe        : 0 Mbps
         Enterprise Bandwidth Total         : 0 Mbps
         Enterprise Bandwidth Available     : 0 Mbps
         Platinum Bandwidth Total           : 10.00 Gbps
         Platinum Bandwidth Available       : 9.99 Gbps
         CP1000 Instance Total              : 100
         CP1000 Instance Available          : 100
       Done
     <!--NeedCopy-->
    
  • 为什么 NITRO API 调用会收到 NetScaler CPX 的连接被拒绝响应?

    从 NetScaler CPX 版本 12.1 起,NITRO API 的默认端口为 9080(不安全)和 9443(安全)。确保您尝试访问的 NetScaler CPX 的 NITRO 端口已在容器上公开。您可以运行 kubectl describe 命令在 NetScaler CPX 容器部分中查看 NetScaler CPX 容器的公开和映射端口:

     kubectl describe pods <pod-name> | grep -i port
    

    示例:

          ng472 | grep -i port
             Ports:          80/TCP, 443/TCP, 9080/TCP, 9443/TCP
             Host Ports:     0/TCP, 0/TCP, 0/TCP, 0/TCP
               NS_HTTP_PORT:            9080
               NS_HTTPS_PORT:           9443
             Port:          <none>
             Host Port:     <none>
               NS_PORT:                 80
     <!--NeedCopy-->
    
  • 为什么即使没有流量或流量很少,NetScaler CPX 中的 NSPPE 进程也会消耗大部分 CPU 使用率?

    如果使用 CPX_CONFIG=’{“YIELD”:”NO”}' 环境变量部署 NetScaler CPX,则即使没有流量或流量很少,NSPPE 进程也会消耗 100% 的 CPU 使用率。如果您希望 NSPPE 进程不消耗 CPU 使用率,则必须在不使用 CPX_CONFIG=’{“YIELD”:”NO”} 环境变量的情况下部署 NetScaler CPX。默认情况下,CPX 中的 NSPPE 进程配置为不占用 CPU 使用率。

  • 为什么 NetScaler CPX 没有在 NetScaler ADM 中列出,即使它是使用注册到 NetScaler ADM 所需的环境变量进行部署的?

    您可以在 NetScaler CPX 文件系统上的 /cpx/log/boot.log 文件中找到 NetScaler CPX 在 NetScaler ADM 注册的日志。

    您可以使用 ping 命令验证来自 NetScaler CPX 容器的 NetScaler ADM IP 地址的可访问性。此外,请确保为 NetScaler CPX 容器配置 NetScaler ADM 注册所需的所有环境变量。

    • NS_MGMT_SERVER:指定 ADM-IP 地址或 FQDN。
    • HOST:指定节点 IP 地址。
    • NS_HTTP_PORT:指定节点上映射的 HTTP 端口。
    • NS_HTTPS_PORT:指定节点上映射的 HTTPS 端口。
    • NS_SSH_PORT:指定节点上映射的 SSH 端口。
    • NS_SNMP_PORT:指定节点上映射的 SNMP 端口。
    • NS_ROUTABLE:NetScaler CPX pod IP 地址无法从外部路由。
    • NS_MGMT_USER:指定 ADM 用户名。
    • NS_MGMT_PASS:指定 ADM 密码。
  • 为什么在更改 nsroot 用户的密码后,cli_script.sh 会显示 Invalid user name or password(用户名或密码无效)错误消息?

    命令 cli_script.sh 是 NetScaler CPX 上 NSCLI 的包装实用程序。它将第一个参数作为命令字符串或文件路径运行,第二个参数(即凭据)是可选的。如果 nsroot 用户的密码已更改,则需要提供凭据作为 cli_script.sh 的第二个参数。可以运行以下命令以使用凭据运行 NSCLI:

     cli_script.sh “<command>” “:<username>:<password>”
    

    示例:

     root@087a1e34642d:/# cli_script.sh "show ns ip"
     exec: show ns ip
    
     ERROR: Invalid username or password
    
     root@087a1e34642d:/# cli_script.sh "show ns ip" ":nsroot:nsroot123"
    
     exec: show ns ip
    
     Ipaddress        Traffic Domain         Type             Mode     Arp     Icmp     Vserver  State        
     --------------   ----                   ----             ---     ----     -------  ------   -----
     172.17.0.3       0                   NetScaler IP     Active   Enabled  Enabled  NA       Enabled
     192.0.0.1        0                   SNIP             Active   Enabled  Enabled  NA       Enabled
     Done
    
  • 为什么 SSH 到 NetScaler CPX 在使用 rootnsroot 用户时会失败?

    从 13.0-64.35 版本起,NetScaler CPX 会生成默认密码并针对 SSH 用户(rootnsroot)进行更新。如果您没有手动更改密码,则可以在 NetScaler CPX 的文件系统的 /var/deviceinfo/random_id 中找到 SSH 用户的密码。

NetScaler CPX 故障排除