You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Istio Ingress配置ACM证书后出现上游连接终止错误求助

排查 Istio + AWS ELB SSL 配置导致的上游连接错误

根据你的描述,之前无SSL的配置正常,添加ELB SSL后出现upstream connect error or disconnect/reset before headers. reset reason: connection termination错误,核心问题出在ELB与Istio IngressGateway的流量协议不匹配,结合你的配置细节,我整理了以下排查步骤和解决方法:

核心原因分析

Istio IngressGateway容器默认在80端口监听HTTP流量,443端口监听HTTPS流量。而你的配置中:

  • ELB在443端口终止SSL后,用HTTP协议转发流量到IngressGateway的443端口
  • 你在Gateway配置里把443端口的协议设为HTTP,但IngressGateway容器的443端口默认期望的是HTTPS流量
  • 两者协议不匹配导致IngressGateway无法解析流量,直接断开连接,进而触发上游连接错误

解决方法(推荐方案)

调整ELB到IngressGateway的端口映射,让ELB终止SSL后的HTTP流量转发到IngressGateway的80端口(默认监听HTTP),同时修正Gateway配置避免循环重定向:

1. 更新Istio IngressGateway的Helm values配置

修改你的values.yaml中istio-ingressgateway部分,调整Service端口映射:

istio-ingressgateway:
  serviceAnnotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:ap-southeast-1:xxxxx:certificate/my-crt"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
    # 可选:让ELB自动把HTTP请求重定向到HTTPS(替代Gateway的redirect配置)
    service.beta.kubernetes.io/aws-load-balancer-redirect-http-to-https: "true"
  service:
    ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 80  # 将ELB的HTTPS流量转发到IngressGateway的HTTP监听端口

2. 修正Gateway配置

移除80端口的httpsRedirect配置(避免ELB转发后出现循环重定向):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-gateway
spec:
  selector:
    istio: ingressgateway #default istio ingressgateway
  servers:
  - port:
      number: 80
      name: http-istio-gateway
      protocol: HTTP
    hosts:
    - "*"
    # 移除httpsRedirect,因为ELB已处理SSL重定向
  - port:
      number: 443
      name: https-istio-gateway
      protocol: HTTP
    hosts:
    - "*"

3. 重新部署Istio和Gateway配置

# 重新生成Istio配置并应用
helm template ./istio/install/kubernetes/helm/istio --name istio --namespace istio-system --values ./mesh/values.yaml | kubectl apply -f -

# 重新应用Gateway配置
kubectl apply -f gateway.yaml

额外排查步骤

如果问题仍然存在,可以检查以下内容:

  • 后端服务状态:确认api-gateway和api-gateway-ws的Pod处于Running状态:
    kubectl get pods -n default
    
  • 服务Endpoint可用性:检查后端服务的Endpoint是否正常:
    kubectl get endpoints api-gateway -n default
    kubectl get endpoints api-gateway-ws -n default
    
  • IngressGateway日志:查看IngressGateway的日志获取更详细的错误信息:
    kubectl logs -n istio-system -l istio=ingressgateway --tail=50
    

内容的提问来源于stack exchange,提问作者pham cuong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:58:42