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

如何确保Node.js应用在AKS中仅使用TLS 1.2/1.3通信?

解决方案:强制Node.js应用使用TLS v1.2/v1.3通信

根据你的问题描述,失败请求因使用TLS v1.0/v1.1被后端LB拒绝,要解决这个问题,优先在应用代码或容器运行环境层面配置,AKS节点层面不推荐作为首选方案,具体操作如下:

1. 应用代码层面(显式指定TLS版本)

如果允许修改应用代码,可以通过Node.js的内置模块或请求库强制限制TLS版本:

原生https模块示例

const https = require('https');
const constants = require('constants');

const options = {
  hostname: 'www.xxxxxxx.com',
  path: '/WebAPI/api/OJJ/Appointments/1',
  method: 'GET',
  // 禁用TLS v1.0和v1.1
  secureOptions: constants.SSL_OP_NO_TLSv1 | constants.SSL_OP_NO_TLSv1_1
};

const req = https.request(options, (res) => {
  // 处理响应逻辑
});

req.on('error', (e) => {
  console.error(e);
});
req.end();

node-fetch库示例

如果使用node-fetch,可以通过自定义Agent来限制TLS版本:

const fetch = require('node-fetch');
const https = require('https');
const constants = require('constants');

const tlsAgent = new https.Agent({
  secureOptions: constants.SSL_OP_NO_TLSv1 | constants.SSL_OP_NO_TLSv1_1
});

fetch('https://www.xxxxxxx.com/WebAPI/api/OJJ/Appointments/1', { agent: tlsAgent })
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

全局配置(代码内设置环境变量)

在应用入口文件开头添加以下代码,全局强制Node.js使用TLS v1.2及以上版本:

process.env.NODE_OPTIONS = '--tls-min-v1.2';

2. 容器镜像/Deployment层面(无需修改代码)

如果不想改动应用代码,可以通过设置环境变量的方式,让Node.js进程启动时强制使用指定的最小TLS版本:

Dockerfile中添加环境变量

# 基础镜像之后添加
ENV NODE_OPTIONS="--tls-min-v1.2"

Kubernetes Deployment中配置环境变量

修改你的AKS Deployment YAML,为容器添加环境变量:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-node-app-deployment
spec:
  replicas: 6
  selector:
    matchLabels:
      app: your-node-app
  template:
    metadata:
      labels:
        app: your-node-app
    spec:
      containers:
      - name: your-node-app
        image: your-app-image:tag
        env:
        - name: NODE_OPTIONS
          value: "--tls-min-v1.2"
        # 其他容器配置(端口、资源限制等)

这种方式的优势是无需修改代码,直接通过运行环境配置生效,且仅针对你的Node.js应用,不会影响AKS节点上的其他服务。

3. AKS节点层面(不推荐)

如果要在节点级强制TLS版本,需要修改节点的系统SSL配置(如/etc/ssl/openssl.cnf),设置MinProtocol = TLSv1.2。但这种方式会影响节点上所有运行的容器和进程,维护成本高,风险较大,仅当所有应用都需要强制TLS v1.2+时才考虑使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:45:26