Istio Envoy网关已连接上游但返回404问题排查求助
Istio Gateway/Virtual Service配置后返回404的排查与解决
核心问题分析
从你提供的istioctl pc routes输出可以明确:网关的HTTP/HTTPS路由均指向blackhole集群,说明Istio未将Virtual Service的路由规则正确关联到Gateway,所有外部请求被拦截返回404。
排查步骤与解决方案
1. 确认Virtual Service与Gateway的命名空间匹配
你的Virtual Service未指定metadata.namespace字段,默认会部署在当前命令执行的命名空间。如果它不在demoapp命名空间,跨命名空间的网关关联可能存在权限或配置同步问题:
- 执行命令检查Virtual Service所在命名空间:
kubectl get virtualservice vert-serv-from-gw -o jsonpath='{.metadata.namespace}' - 若不在
demoapp,修改Virtual Service的metadata.namespace为demoapp,确保与Gateway同命名空间。
2. 验证TLS证书配置有效性
虽然使用cert-manager自动生成证书,仍需确认demoapp-tls Secret是否正常生成:
kubectl get secret demoapp-tls -n demoapp -o yaml
检查data字段下是否存在tls.crt和tls.key,证书缺失或格式错误会导致Gateway无法正常加载TLS配置,进而阻止路由规则生效。
3. 统一Istio版本
你的istioctl客户端版本(1.20.0)与控制平面版本(1.19.3)不一致,小版本差异可能引发配置解析异常:
- 降级客户端版本至1.19.3,确保与控制平面版本匹配。
4. 强制刷新网关配置
即使istioctl proxy-status显示SYNCED,仍可能存在配置缓存未更新的情况:
# 重启网关Pod kubectl rollout restart deployment demoapp-gtw-istio -n demoapp # 或直接触发配置重载 istioctl pc reload demoapp-gtw-istio-674b96dcdb-mfsfg.demoapp
5. 检查Istiod日志
查看Istiod的错误日志,排查配置解析或推送失败的原因:
kubectl logs -n istio-system istiod-64c94c5d78-5879x | grep -E '(error|warning)'
若Virtual Service或Gateway存在语法错误,Istiod会在此输出相关信息。
6. 验证路由规则匹配
执行以下命令,确认网关是否加载了Virtual Service的路由规则:
istioctl pc routes demoapp-gtw-istio-674b96dcdb-mfsfg.demoapp -o json | jq '.routes[] | select(.virtualService != null)'
若输出为空,说明Virtual Service规则未被正确应用。
内容的提问来源于stack exchange,提问作者Jowz
相关产品推荐
相关产品推荐

