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 目录中查看技术支持包。使用
scp
或kubectl 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>
- NS_MGMT_FINGER_PRINT=
<ADM-Fingerprint>
- HOST=
<Node-IP>
- NS_HTTP_PORT=
<Mapped-HTTP-Port-on-Node>
- NS_HTTPS_PORT=
<Mapped-HTTPS-Port-on-Node>
- NS_SSH_PORT=
<Mapped-SSH-Port-on-Node>
- NS_SNMP_PORT=
<Mapped-SNMP-Port-on-Node>
- NS_ROUTABLE=0(NetScaler CPX pod IP 地址无法从外部路由。)
- NS_MGMT_SERVER=
-
为什么在更改 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