排查与 Google 的连接问题

本文档提供了与 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.2169.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,请执行以下操作:

  1. 检查隧道的状态:

    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 值以匹配。

  2. 打开 OverlayVPNTunnel 自定义资源,以使用 kubectl edit 命令进行修改:

    kubectl --kubeconfig CLUSTER_KUBECONFIG edit OVERLAY_VPN_TUNNEL_NAME
        --namespace kube-system --output yaml
    

    为避免数据包丢失,请为 Network Connectivity Gateway 所使用的两个 OverlayVPNTunnel 自定义资源配置相同的 MTU。

  3. 设置 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
    
  4. 如需应用更改,请保存并关闭编辑器。

如需详细了解 MTU 及其对流量性能的影响,请参阅 MTU 注意事项

查看流量和应用级层统计信息

如需查看流量和统计信息,请在网关 Pod 内部运行 ncgcli

  • 如需流和流量应用的即时视图,请执行以下操作:

    ncgcli forwarding flows top
    
  • 对于流级层的聚合统计信息:

    ncgcli forwarding flows aggregates show
    
  • 对于接口级层的聚合统计信息:

    ncgcli interfaces statistics show