通过K8s服务域名配置Istio流量到Squid代理出现404路由未找到如何解决
Istio Squid代理404 NR路由缺失问题修复方案
根因分析
- ServiceEntry协议配置错误:当前配置中将3128端口的协议声明为TCP,而Squid是HTTP代理,需要处理HTTP CONNECT请求,Istio针对TCP协议的ServiceEntry不会生成HTTP路由规则,因此无法匹配CONNECT请求,返回404 NR错误。
- 主机名匹配不一致:测试时使用的代理地址为
squid.external:3128,但ServiceEntry中仅配置了全限定域名squid.external.svc.cluster.local,Istio路由会严格校验主机头,短域名与全限定域名不匹配会导致路由查找失败。 - 缺少解析规则配置:未配置
resolution字段,Istio无法正确解析集群内Squid服务的后端地址。
修复配置
修正后的Squid ServiceEntry配置
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: proxy spec: hosts: # 同时兼容短域名和全限定域名访问 - squid.external - squid.external.svc.cluster.local location: MESH_EXTERNAL exportTo: - "." ports: - number: 3128 name: http-proxy # 改为HTTP协议,支持处理CONNECT请求 protocol: HTTP # 集群内服务使用DNS解析 resolution: DNS
现有Squid Pod、K8s Service配置无需修改。
验证步骤
配置更新后执行原测试命令即可验证连通性:
HTTPS_PROXY=http://squid.external:3128 curl https://en.wikipedia.org/wiki/Main_Page
内容的提问来源于stack exchange,提问作者Maciek Leks
相关产品推荐
相关产品推荐

