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

GKE环境配置Istio后指定域名访问服务返回502/404错误求助

问题根因
  • 流量路径不匹配:你当前配置GKE Ingress使用GCP托管证书,GCP的负载均衡层已经完成了HTTPS请求的TLS终结,所有请求会以HTTP协议转发到istio-ingressgateway的80端口,Gateway中配置的443端口TLS透传(PASSTHROUGH)规则完全不会被命中,属于无效配置。
  • Host头匹配失败:默认配置下GCP负载均衡转发请求到后端服务时,不会透传原始请求的Host头,导致到达istio-ingressgateway的HTTP请求的Host字段不是你配置的httpbin.test.com,指定具体域名的Gateway和VirtualService规则匹配失败返回404;换成通配符*可以匹配任意Host,因此访问正常。
解决方案

如果你要保留GCP托管证书、在GCP负载均衡层终结TLS的方案,按照以下步骤配置即可:

  1. 配置FrontendConfig开启Host头透传
    你已经在Ingress注解中关联了ingress-frontend-config,只需修改该FrontendConfig资源,添加自定义请求头规则透传原始Host:
apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: ingress-frontend-config
  namespace: istio-system
spec:
  customRequestHeaders:
    headers:
    - "Host: {host}"

{host}为GCP负载均衡的内置变量,会自动替换为用户请求的原始Host值。

  1. 精简Istio配置
    删除Gateway中无用的443端口配置,仅保留80端口的HTTP规则即可:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
  namespace: svc
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "httpbin.test.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin-vs
  namespace: svc
spec:
  hosts:
  - "httpbin.test.com"
  gateways:
  - httpbin-gateway
  http:
  - route:
    - destination:
        host: httpbin   
        port:
          number: 8000

配置更新后等待GCP负载均衡规则生效,即可通过指定域名正常访问服务。

如果需要将TLS透传给Istio处理,需将GKE Ingress调整为TCP负载均衡模式,开放443端口的NodePort转发,同时关闭GCP层的TLS终结配置,此时Gateway的443端口PASSTHROUGH规则才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:36:08