运行时平面与控制平面之间没有网络连接

您正在查看 ApigeeApigee Hybrid 文档。
此主题没有等效的 Apigee Edge 文档。

表现

  • API 产品、开发者、应用未在 Apigee 界面中填充。
  • API 代理部署未完成。
  • 为读取和写入 API 产品、开发者和应用而执行的 Management API 请求会失败。/li>

错误消息

本部分介绍在没有网络连接时可能会显示的错误消息。

ApigeeIssue

如果此问题报告为 ApigeeIssue,则运行以下命令时:

kubectl -n APIGEE_NAMESPACE get apigeeissues

其中,APIGEE_NAMESPACE 是 Kubernetes 资源分组的名称。

显示以下错误代码:

NAME                               SEVERITY    AGE URL
control-plane-connectivity-failure Error       1hr https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/no-network-connectivity

API 产品、开发者和应用 Apigee 界面页面

API 产品、开发者和应用 Apigee 界面页面会显示以下错误:

Error: no connections available from the Apigee connect agent(s):
refer to documentation to triage further.

apigee-synchronizer 日志

您可以在 apigee-synchronizer 日志中看到以下错误消息:

{"level":"SEVERE","thread":"Apigee-Timer-3","mdc":{"action":"SYNC","env":"dev",
  "org":"example-hybrid-dev"},"className":"com.apigee.httpclient.adaptor.RequestAdaptor",
  "method":"doSend","severity":"SEVERE","message":"request failed
  [CONTEXT ratelimit_period\u003d\"1 MINUTES [skipped: 1]\" ]",
  "formattedDate":"2023-02-01T06:27:48.700Z","logger":"SERVICES.HTTPCLIENTSERVICE",
  "exceptionStackTrace":"java.net.SocketTimeoutException: connect timed out
... com.apigee.httpclient.adaptor.RequestAdaptor.send(RequestAdaptor.java:251)
at com.apigee.hybrid.runtime.contract.sync.context.HttpContractDownloader.download(HttpContractDownloader.java:84)
at com.apigee.hybrid.runtime.contract.sync.context.ControlPlaneReplicationContext.getContract(ControlPlaneReplicationContext.java:66)

apigee-watcher 日志

您可以在 apigee-watcher 日志中看到以下错误消息:

{"level":"error","ts":1675232549.5093117,"caller":"watcher/watcher.go:60",
"msg":"error during watch","name":"mpstatus","error":"INTERNAL: error sending
  mp status to mgmt: INTERNAL: failed to send runtime status
  Post \"https://apigee.googleapis.com/v1/organizations/example-hybrid-dev/instances/apigee-hybrid-australia-southeast1:reportStatus\":
  dial tcp 172.217.24.42:443: i/o timeout","stacktrace":
  "edge-internal.git.corp.google.com/apigee-watcher.git/watcher.
  (*Watcher).Start.func1.1\n\t/go/src/edge-internal/apigee-watcher/watcher/watcher.go:60"}

可能的原因

平台 原因 说明
全部 没有互联网可用的网络路由 如果没有互联网可用的网络路由,Apigee 运行时平面组件将无法与 Apigee 控制平面 API 通信。
全部 Apigee API 端点未列入许可名单 如果存在防火墙,则 Apigee API 端点可能尚未列入许可名单。
GKE 专用 Google 访问通道未启用 如果是在 GKE 上部署的,则子网中可能尚未启用专用 Google 访问通道。
全部 未知网络故障 如果集群网络在连接到互联网时遇到未知故障,则可能出现此问题。

原因:没有互联网可用的网络路由

诊断

  1. 根据所使用的平台,验证是否存在从集群网络到互联网可用的网络路由。例如,如需详细了解 GKE 上的网络,请参阅网络概览
  2. 请与您的基础架构和网络团队联系,了解集群网络是否使用转发代理服务器连接到互联网。

解决方法

  1. 请与网络管理员联系,如有可能,请将网络路由添加到互联网。
  2. 如果存在用于在集群网络和互联网之间进行通信的转发代理服务器,请在 Apigee 中使用 overrides.yaml 文件配置转发代理服务器设置,并将该更改应用于运行时平面。
    apigeectl apply --settings virtualhosts -f overrides/overrides.yaml

原因:Apigee API 端点未列入许可名单

诊断

请与网络管理员联系,确认 Apigee API 端点列表是否在安装 Apigee 的平台上的防火墙中已列入许可名单。对于 GKE,这可能是 Cloud 新一代防火墙

解决方法

如果上述 Apigee API 端点列表未被列入许可名单,请与网络管理员联系并执行该要求。

原因:专用 Google 访问通道未启用

诊断

  1. 如果 Apigee 部署在无法访问互联网的专用 GKE 集群上,则需要启用专用 Google 访问通道,允许 Apigee 运行时平面组件在内部访问 Google API。
  2. 在 Google Cloud 控制台中,转到 VPC 网络页面。

    转到 VPC 网络

  3. 点击某个网络的名称。
  4. 子网标签页上的专用 Google 访问通道列中,验证相关子网是否已启用。如未启用,这就是此次失败的原因。

解决方法

  1. 在 Google Cloud 控制台中,转到 VPC 网络页面。

    转到 VPC 网络

  2. 点击某个网络的名称。
  3. 点击某个子网的名称。
  4. 点击 修改
  5. 选择开启专用 Google 访问通道
  6. 点击保存。启用后,此问题将得到解决。

原因:未知网络故障

诊断

请联系您的网络管理员,并验证集群网络中是否存在任何未知故障。

解决方法

与您的网络管理员合作,解决集群网络中的问题。网络问题得到解决后,此问题就会得到解决。

必须收集的诊断信息

如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后联系 Apigee 支持团队

  1. Google Cloud 项目 ID。
  2. Apigee Hybrid 组织的名称。
  3. 在所有 Kubernetes 集群节点上执行以下命令的输出:
    ping apigee.googleapis.com
    traceroute apigee.googleapis.com
    telnet apigee.googleapis.com 443
  4. 遮盖所有敏感信息的 overrides.yaml 文件。
  5. 所有命名空间中的 Kubernetes pod 状态:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
  6. Kubernetes 集群信息转储:

    生成 Kubernetes 集群信息转储:

    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump

    Zip Kubernetes 集群信息转储:

    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*