V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
soleils
V2EX  ›  Kubernetes

K8S 网关求助, 兼容老 HTTP 协议和老 TLS 版本

  •  
  •   soleils · 3 月 23 日 · 908 次点击
    客户大多数是银行的, 某些用的请求库都很老

    最近我们迁移云资源, 在新 K8S 里用了 envoy-gateway 1.6.5, 问 Gemini 说可以通过设置:
    tls:
    minVersion: "1.0"
    maxVersion: "1.3"
    来兼容 TLS1.0, http 设置了 http10: {}来兼容, 我本地用 curl 测试也没问题(后来发现没用).

    上线后少数银行客户报错: 要不然是 426, 要不然是 SSL 握手有问题. 现在我蛋疼的要死, 不能因为少部分客户又切回老云, 但线上想换 treafik 又来不及了, 现在怎么办

    (还是应该敬畏生产环境)
    8 条回复    2026-03-24 15:41:09 +08:00
    SingeeKing
        1
    SingeeKing  
    PRO
       3 月 23 日
    加一下 GODEBUG=tlsrsakex=1 环境变量试试,因为新版本 Go 老的加密算法默认禁用
    soleils
        2
    soleils  
    OP
       3 月 23 日
    心态炸裂了
    v1
        3
    v1  
       3 月 24 日
    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: EnvoyProxy
    metadata:
    name: eg-proxy-config
    namespace: default
    spec:
    tls:
    minVersion: "1.0"
    maxVersion: "1.3"
    ciphers: # 要显式包含 TLS1.0 的加密套件
    - ECDHE-ECDSA-AES128-SHA
    - ECDHE-RSA-AES128-SHA
    - AES128-SHA
    - ECDHE-ECDSA-AES256-SHA
    - ECDHE-RSA-AES256-SHA
    - AES256-SHA
    - ECDHE-ECDSA-AES128-GCM-SHA256
    - ECDHE-RSA-AES128-GCM-SHA256
    - ECDHE-ECDSA-AES256-GCM-SHA384
    - ECDHE-RSA-AES256-GCM-SHA384


    -----


    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
    name: eg
    namespace: default
    spec:
    gatewayClassName: eg
    envoyProxy:
    name: eg-proxy-config # 必须引用才可生效
    listeners:
    - name: https
    port: 443
    protocol: HTTPS
    tls:
    mode: Terminate
    certificateRefs:
    - kind: Secret
    name: example-cert
    soleils
        4
    soleils  
    OP
       3 月 24 日
    @v1 apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: ClientTrafficPolicy
    metadata:
    name: legacy-http10-temp
    namespace: envoy-gateway-system
    spec:
    targetRefs:
    - group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway
    sectionName: https-cn
    - group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway
    sectionName: https-com
    http1:
    http10: {}
    tls:
    minVersion: "1.0"
    maxVersion: "1.3"
    alpnProtocols:
    - h2
    - http/1.1
    - http/1.0
    ciphers:
    - ECDHE-ECDSA-AES128-GCM-SHA256
    - ECDHE-RSA-AES128-GCM-SHA256
    - ECDHE-ECDSA-AES256-GCM-SHA384
    - ECDHE-RSA-AES256-GCM-SHA384
    - ECDHE-ECDSA-CHACHA20-POLY1305
    - ECDHE-RSA-CHACHA20-POLY1305
    - ECDHE-RSA-AES128-SHA
    - ECDHE-RSA-AES256-SHA
    - AES128-SHA
    - AES256-SHA

    我也是这样配置的, 但我用的是 kind: ClientTrafficPolicy , 你用的是 kind: EnvoyProxy, 是这个关键区别吗?
    pckillers
        5
    pckillers  
       3 月 24 日
    我比较惊奇于用户竟然能直接连接到 k8s 的网关。 k8s 之前已经没有 waf 之类的 7 层网关了? 如果有的话 TLS 与 cipher 就是 waf 决定的了。
    soleils
        6
    soleils  
    OP
       3 月 24 日
    @pckillers 这个问题是有些客户会配置域名+host 绑定, 还会给域名和 IP 开白名单, 因为腾讯云 waf 的 vip 不保证不变, 他们说 5 月底会出一个不变 IP 的 waf vip, 但我们等不了那么久了, 所以这次没有上 waf, 只用了云防火墙
    soleils
        7
    soleils  
    OP
       3 月 24 日
    我废了老鼻子劲终于搞懂了, 这次的兼容性问题是一些老客户端不会自动带上 SNI, 我们又有多个证书, 导致了连接被重置.
    上面的设置是可以让 envoy-gateway 支持 TLS1.0 1.1 的, 原因不是设置问题

    实际兼容性原因:
    1, 有些客户端需要手动指定 SNI (一个 IP 多个证书)
    2, 如果用了 TLS1.0 , 1.1 , 最好加上-cipher "AES256-SHA:@SECLEVEL=0"
    soleils
        8
    soleils  
    OP
       3 月 24 日
    @soleils #7 这些问题是历史遗留问题, 项目是 10 年前的了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3473 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 10:50 · PVG 18:50 · LAX 03:50 · JFK 06:50
    ♥ Do have faith in what you're doing.