Istio服务网格中连接AWS RDS MySQL报上游连接错误的求助
解决Istio服务网格连接AWS RDS MySQL的
upstream connect error or disconnect/reset before header错误 我来帮你定位并解决这个问题——你碰到的这个连接错误,核心原因是Egress规则里对MySQL 3306端口的协议配置错了。
问题分析
MySQL使用的是原生的TCP/MySQL协议,而你的Egress规则里把3306端口的协议设成了https,这就导致Istio用HTTPS的逻辑去处理MySQL的流量,自然会出现连接重置或者错误。另外你提到的几个对比场景也能佐证这点:
- EC2上的独立MySQL能正常连接:没有Istio拦截,直接走原生TCP通信
- 未启用Istio时能连RDS:同样没有Istio的协议校验,TCP连接正常
修复方案
只需要修改Egress规则里3306端口的协议为tcp或者mysql(Istio都支持这两种来处理MySQL流量),具体步骤如下:
- 更新你的Egress规则yaml文件:
apiVersion: config.istio.io/v1alpha2 kind: EgressRule metadata: namespace: <our-namespace> name: rds-egress-rule-with spec: destination: service: <RDS End point> ports: - port: 80 protocol: http - port: 443 protocol: https - port: 3306 protocol: tcp # 替换成mysql也可以 - 应用更新后的配置:
kubectl apply -f <你的Egress规则文件名>.yaml - 重启网格内需要连接RDS的服务Pod,确保新规则生效。
额外说明
因为你的Istio已经禁用了双向TLS,所以不需要额外配置mTLS相关的规则,只要协议匹配上,流量就能正常转发到RDS了。
内容的提问来源于stack exchange,提问作者Anuranjit Maindola
相关产品推荐
相关产品推荐

