本文档提供了与 Google 连接相关的问题的问题排查指南。
Network Connectivity Gateway
本部分提供与 Network Connectivity Gateway 相关的问题排查提示。
验证控制器和网关 Pod 是否正在运行
列出 Network Connectivity Gateway pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods \ --namespace kube-system | grep ncg
将
CLUSTER_KUBECONFIG
替换为集群 kubeconfig 文件的路径。在输出中,验证您是否看到控制器 Pod 和网关 Pod。控制器 Pod 的名称以
ncg-controller
开头,网关 Pod 的名称以ncgd
开头。例如:ncg-controller-5f5d489b68-r87pp 1/1 Running ncgd-gvl76 1/1 Running
记下网关 Pod 的名称。您将需要它来执行各种问题排查命令。
检查网关 Pod 日志
检查网关 Pod 的日志中是否存在任何错误:
kubectl --kubeconfig CLUSTER_KUBECONFIG logs GATEWAY_POD \ --namespace kube-system
将
GATEWAY_POD
替换为您的网关 Pod 的名称。
在网关 pod 中运行 ncgcli
网关 Pod 有一个名为 ncgcli
的命令行工具,可用于获取网关和隧道中流量的相关信息。
使用以下命令在网关 Pod 中运行
ncgcli
:kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it GATEWAY_POD \ --namespace kube-system -- ncgCLI_COMMAND
将
ncgCLI_COMMAND
替换为ncgcli
命令。例如:
kubectl --kubeconfig my-kubeconfig exec ncgd-6hkk2 --namespace kube-system \ -- ncgcli --help
以下部分提供了更多 ncgcli
命令示例。
IPsec 隧道无法启动
查看
NetworkConnectivityGateway
自定义资源的状态:kubectl --kubeconfig CLUSTER_KUBECONFIG get NetworkConnectivityGateway \ --namespace kube-system --output yaml
在输出中,验证您是否看到
Status: Healthy
。例如:apiVersion: networking.gke.io/v1alpha1 kind: NetworkConnectivityGateway metadata: namespace: kube-system name: default spec: status: CurrNode: worker1-node CreatedTime: 2021-09-07T03:18:15Z LastReportTime: 2021-09-21T23:57:54Z Status: Healthy
查看
OverlayVPNTunnel
自定义资源的状态:kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayVPNTunnel \ --namespace kube-system --output yaml
从网关 pod 内部检查隧道的状态:
ncgcli overlay peers show
如需了解详情,请参阅 Cloud VPN 问题排查。
无法建立 BGP 会话
验证您是否已为 Cloud Router 和集群中的网关 Pod 之间的 BGP 会话使用链路本地 IP 地址(例如 169.254.1.2
和 169.254.2.2
)。
检查 BGP 会话的状态:
kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayBGPPeer \ --namespace kube-system --output yaml
从网关 pod 内部检查 BGP 会话的状态:
ncgcli overlay routes show
如需详细了解如何对 BGP 会话进行问题排查,请参阅 BGP 会话状态和常规问题排查。
即使隧道已启动也出现流量转发问题
如果流量转发失败,请在网关 pod 内部运行 ncgcli
以检查隧道、路由和数据层面编程的状态。
确保已建立连接到对等网关的 IPsec 隧道:
ncgcli overlay peers show
确认叠加路由已通过 BGP 交换并解析为相应的 IPsec 隧道:
ncgcli overlay routes show
数据层面中编程的显示路由以及输出应包含叠加路由:
ncgcli fast-path routes show
调整最大传输单元
最大传输单元 (MTU) 是网络层协议支持的最大数据包的大小(以字节为单位),标头和数据均包括在内。 如果由于网络 MTU 限制而导致流量问题,您可以针对 OverlayVPNTunnel
自定义资源配置 MTU。隧道的默认 MTU 为 1380 字节。
如需调整隧道的 MTU,请执行以下操作:
检查隧道的状态:
kubectl --kubeconfig CLUSTER_KUBECONFIG get OverlayVPNTunnel \ --namespace kube-system --output yaml
status
部分应如以下示例所示:status: IfName: ipsec2 LastTransition: "2022-06-16T07:13:28Z" SLA: DiscoveredMTU: 1300 Jitter(ms): 1 Latency(ms): 26 Loss(%): "0.00"
如果
status.SLA.DiscoveredMTU
值小于默认值1380
,请按照以下步骤更改OverlayVPNTunel
自定义资源中的Spec.mtu
值以匹配。打开
OverlayVPNTunnel
自定义资源,以使用kubectl edit
命令进行修改:kubectl --kubeconfig CLUSTER_KUBECONFIG edit OVERLAY_VPN_TUNNEL_NAME --namespace kube-system --output yaml
为避免数据包丢失,请为 Network Connectivity Gateway 所使用的两个
OverlayVPNTunnel
自定义资源配置相同的 MTU。设置
mtu
值以匹配第一步中的DiscoveredMTU
值:apiVersion: networking.gke.io/v1alpha1 kind: OverlayVPNTunnel metadata: name: vpc2 namespace: kube-system Spec: mtu: 1300 ikeKey: name: ike-key namespace: kube-system localTunnelIP: 169.254.0.2 peer: publicIP: 34.100.10.10 self: publicIP: 70.32.151.5
如需应用更改,请保存并关闭编辑器。
如需详细了解 MTU 及其对流量性能的影响,请参阅 MTU 注意事项。
查看流量和应用级层统计信息
如需查看流量和统计信息,请在网关 Pod 内部运行 ncgcli
。
如需流和流量应用的即时视图,请执行以下操作:
ncgcli forwarding flows top
对于流级层的聚合统计信息:
ncgcli forwarding flows aggregates show
对于接口级层的聚合统计信息:
ncgcli interfaces statistics show