症状
当您获取 pod 列表时,您的 apigee-ingressgateway
pod 仅显示 2 个容器中的 1 个正在运行。
例如,当您运行以下命令时:
kubectl -n apigee get pods -l app=apigee-ingressgateway
输出:
NAME READY STATUS RESTARTS AGE apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r 1/2 Running 0 6m48s apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf 1/2 Running 0 123m
此外,对上述某个 pod 执行 describe
命令将显示就绪性探测失败并返回 503 状态代码。
例如,在 pod 说明的 Events
部分中,您可能会看到以下消息:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Unhealthy 76s (x32903 over 18h) kubelet Readiness probe failed: HTTP probe failed with statuscode: 503
可能的原因
原因 | 说明 |
---|---|
Apigee 入站流量配置为监听端口 80 | 从 Apigee Hybrid 1.9 开始,不再支持在端口 80 上配置 Apigee 入站流量。 |
原因:Apigee 入站流量配置为侦听端口 80
此问题是由 Apigee 入站流量网关配置为监听端口 80 引起的,而从 Apigee Hybrid 1.9 开始,该端口不再受支持。
如果您是从允许使用端口 80 的早期版本的 Apigee Hybrid 升级的,或者存在其他启用端口 80 的错误配置,则可能会出现这种情况。
诊断
-
获取
apigee-ingressgateway
Pod 的列表。运行以下命令:
kubectl -n apigee get pods -l app=apigee-ingressgateway
示例输出
NAME READY STATUS RESTARTS AGE apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r 1/2 Running 0 6m48s apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf 1/2 Running 0 123m
-
描述列出的一个 pod 以检查事件:
kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD
其中,APIGEE_INGRESSGATEWAY_POD 是上一个命令输出中列出的
apigee-ingressgateway
pod。示例输出:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Unhealthy 76s (x32903 over 18h) kubelet Readiness probe failed: HTTP probe failed with statuscode: 503
-
获取 APIGEE_INGRESSGATEWAY_POD pod 的日志。
kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
您可能会看到一条日志条目,其中显示端口 80 因权限遭拒错误而无法绑定,随后是一条消息,指出 Envoy 未就绪。
2025-09-11T06:16:45.457621Z error envoy config external/envoy/source/common/listener_manager/listener_manager_impl.cc:1186 listener '0.0.0.0_80' failed to bind or apply socket options: cannot bind '0.0.0.0:80': Permission denied ... 2025-09-11T06:16:46.365818Z warn Envoy proxy is NOT ready: config received from XDS server, but was rejected: cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
- 查看当前的
apigeeroute
配置,找到已启用端口 80 (HTTP) 的配置。-
获取已定义的 Apigee 路由的列表。
kubectl -n apigee get apigeeroute
示例输出:
NAME STATE AGE myorg-hyb-dev-grp-000-33620d0 running 2d1h non-sni running 17s
-
检查每个
apigeeroute
,查看其中是否定义了端口 80。针对上一个命令输出中列出的每个
apigeeroute
运行以下命令:kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
其中,APIGEE_ROUTE_NAME 是各个
apigeeroute
的名称。示例命令:
kubectl -n apigee get apigeeroute non-sni -o yaml
示例输出:
非 sniapiVersion: apigee.cloud.google.com/v1alpha2 kind: ApigeeRoute metadata: name: non-sni namespace: apigee resourceVersion: "240441468" spec: enableNonSniClient: true hostnames: - '*' ports: - number: 443 protocol: HTTPS tls: credentialName: myorg-hyb-dev-grp minProtocolVersion: TLS_AUTO mode: SIMPLE - number: 80 protocol: HTTP selector: app: apigee-ingressgateway status: lastAppliedGeneration: 1 state: running
apigeeroute
表示端口 80 已作为此路由的一部分启用。
-
获取已定义的 Apigee 路由的列表。
解决方法
如需解决此问题,请移除以下行,以在原始 apigeeroute
yaml 文件中停用端口 80。
- number: 80 protocol: HTTP
如果您没有原始 apigeeroute
yaml 文件,可以按以下步骤操作:
- 使用以下命令导出当前配置:
kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml
其中,APIGEE_ROUTE_NAME 是要更新的
apigeeroute
,以移除端口 80 配置。其中,APIGEE_ROUTE_FILENAME 是包含
apigeeroute
yaml 内容的输出文件名。 -
修改
apigeeroute
yaml 文件以移除端口 80 配置。在文本编辑器中打开 APIGEE_ROUTE_FILENAME 文件,然后移除以下行:
- number: 80 protocol: HTTP
-
将现有的
apigeeroute
替换为修改后的 YAML 文件:kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
其中,APIGEE_ROUTE_FILENAME 是包含更新后的
apigeeroute
配置的输出文件。 -
现在,
apigee-ingressgateway
pod 应以 2/2 容器运行。如果不是,请删除这些 pod,以便系统自动创建新的 pod。NAME READY STATUS RESTARTS AGE apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r 2/2 Running 0 25h apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf 2/2 Running 0 26h
必须收集的诊断信息
如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后与 Google Cloud Customer Care 联系:- Overrides.yaml
- 以下命令的输出:
kubectl -n apigee get pods -l app=apigee-ingressgateway
kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
kubectl -n apigee get apigeeroutes
- 针对上述每条路线,运行以下命令:
kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
- 或者,您也可以运行并提供 Apigee Hybrid Must-Gather 信息。