Citrix ADC CPX 故障排除

本文档介绍了如何对使用 Citrix ADC CPX 时可能会遇到的问题进行故障排除。使用本文档,您可以收集日志以确定原因并应用与 Citrix ADC CPX 的安装和配置有关的一些常见问题的解决方法。

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

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

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

    示例:

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

    下面是使用 tty:true 选项的 Citrix ADC CPX pod 部署的示例:

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

    可以在 Citrix ADC CPX 文件系统的 /cpx/log/boot.log 文件中找到更多引导日志。

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

  • 我如何从 Citrix ADC CPX 收集技术支持包?

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

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

    可以在 Citrix ADC CPX 文件系统的 /var/tmp/support 目录中查看技术支持包。使用 scpkubectl cp 将技术支持包从 Citrix ADC 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
    
  • Citrix ADC CPX pod 为什么会在启动时卡住?

    可以使用 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 日志。

  • 如何在 Citrix ADC CPX pod 与 Kubernetes 主节点之间复制文件?

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

    可以使用以下任意命令之一在 Citrix ADC CPX pod 与 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:可以使用命令在 Citrix ADC CPX pod 与 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:~#
    
  • 我如何在 Citrix ADC CPX 上捕获数据包?

    要在 Citrix ADC CPX 上捕获数据包,请使用 kubectl exec 命令启动 Citrix ADC CPX 的 shell 接口。请运行以下命令以启动 Citrix ADC CPX pod 的 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”
    

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

  • 为什么即使使用 LS_IP=<ADM-IP> 环境变量部署了 Citrix ADC CPX 时,也没有配置许可证服务器?

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

    如果可以从该节点访问 Citrix ADM,则必须验证 /cpx/log/boot.log 文件中的许可证服务器配置日志。还可以在 Citrix ADC CPX pod 的 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
    
  • 为什么即使在 Citrix ADC CPX 上成功配置许可证服务器之后,Citrix ADC CPX 上也没有配置池许可证?

    验证 /cpx/log/boot.log 文件中的许可证配置日志。还可以在 Citrix ADC CPX pod 的 shell 界面上使用以下命令验证 Citrix ADC 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
    

    此外,请务必在许可证服务器中上载所需的许可证文件。使用以下命令在 Citrix ADC CPX 上成功配置之后,还可以验证许可证服务器上的可用许可证。请在 Citrix ADC 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 调用会获得来自 Citrix ADC CPX 的 Connection Refused(连接被拒绝)响应?

    自 Citrix ADC CPX 版本 12.1 起,NITRO API 的默认端口为 9080(不安全)和 9443(安全)。确保您尝试访问的 Citrix ADC CPX 的 NITRO 端口暴露在 pod 上。可以在 Citrix ADC CPX 容器部分中运行 kubectl describe 命令以查看 Citrix ADC 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-->
    
  • 为什么即使在没有流量或流量很少时,Citrix ADC CPX 中的 NSPPE 进程会占用大部分 CPU 使用率?

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

  • 为什么即使是通过在 Citrix ADM 中注册所需的环境变量部署的,Citrix ADC CPX 也没有在 Citrix ADM 中列出?

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

    可以使用 ping 命令从 Citrix ADC CPX pod 验证 Citrix ADM IP 地址的可访问性。此外,请务必为 Citrix ADC CPX 容器配置 Citrix 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:Citrix ADC CPX pod IP 地址不能从外部路由。
    • NS_MGMT_USER:指定 ADM 用户名。
    • NS_MGMT_PASS:指定 ADM 密码。
  • 为什么在更改 nsroot 用户的密码后,cli_script.sh 会显示 Invalid user name or password(用户名或密码无效)错误消息?

    命令 cli_script.sh 是 Citrix ADC 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
    
  • 为什么 rootnsroot 用户通过 SSH 加密 Citrix ADC CPX 的数据失败?

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

Citrix ADC CPX 故障排除

在本文中