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

如何配置Nginx Ingress后端仅使用TLSv1.3协议

问题描述

我使用Nginx Ingress代理一个采用自签名证书、暴露8443(SSL)端口的应用。HTTP访问正常,但HTTPS访问时出现以下错误:

2022/10/31 18:04:28 [error] 39#39: *1855 SSL_do_handshake() failed (SSL: error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:SSL alert number 70) while SSL handshaking to upstream, client: 127.0.0.1, server: _, request: "GET /web-service/ HTTP/2.0", upstream: "https://10.2.1.37:8443/web-service/", host: "localhost:8443"

排查后确认,该web-service仅支持:

"TLSv1.3" and "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AE"

使用curl测试时,若不明确指定TLSv1.3会触发类似错误;将web-service降级至TLSv1.2可正常工作,但这并非理想方案。

请问能否在Ingress本身配置Nginx后端仅使用TLSv1.3及上述加密套件?比如类似ssl_protocols TLSv1.3;的后端级注解?我尝试过代码片段,但似乎未应用到正确层级。

当前Ingress配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-world-ingress2
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "off"
    nginx.ingress.kubernetes.io/rewrite-target: /web-service/$1
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /web-service/(.*)
        pathType: Prefix
        backend:
          service:
            name: my-web-service
            port:
              number: 8443        
解决方案

可以通过Nginx Ingress的配置片段注解,为代理后端指定TLS协议和加密套件。核心是使用Nginx针对上游代理的SSL配置指令,注入到Ingress对应的配置块中。

修改后的Ingress配置

在原配置的metadata.annotations中添加以下配置片段:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-world-ingress2
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "off"
    nginx.ingress.kubernetes.io/rewrite-target: /web-service/$1
    # 新增:配置代理后端的SSL协议与加密套件
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_ssl_protocols TLSv1.3;
      proxy_ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AE";
      proxy_ssl_verify off;
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /web-service/(.*)
        pathType: Prefix
        backend:
          service:
            name: my-web-service
            port:
              number: 8443        

配置说明

  • proxy_ssl_protocols TLSv1.3;:强制Nginx代理与后端通信时仅使用TLSv1.3协议,匹配web-service的支持范围
  • proxy_ssl_ciphers "...":指定与后端通信时使用的加密套件,完全对应web-service支持的列表
  • proxy_ssl_verify off;:关闭对后端自签名证书的验证(自签名证书无法被默认CA信任,必须关闭该验证才能建立SSL连接)

应用该配置后,Nginx Ingress即可与后端web-service正常完成TLSv1.3握手,无需降级TLS版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:10:33