在建立安全 TLS 连接之前,客户端网络套接字已断开 - nodejs 应用程序和 aks 节点

问题描述 投票:0回答:1

我有在 aks 上运行的 Nodejs 应用程序。该应用程序的 6 个 Pod 正在运行。应用程序洞察在 aks 中配置。我在应用程序洞察中遇到异常,说

FetchError:对 https://www.xxxxxxx.com/WebAPI/api/OJJ/Appointments/1 的请求失败,原因:在建立安全 TLS 连接之前,客户端网络套接字已断开连接

我们只是间歇性地收到此异常。 2-3天不会出现错误,然后就会出现这个异常。

最近 7 天内发生异常 enter image description here

为了调试问题,我在aks节点进行了数据包捕获。

  • 10.50.38.233是aks节点的IP。
  • 192.168.19.160 是我们负载均衡器的 IP。 www.xxxxxxx.com 位于此 LB 后面,并且 LB 上也有 SSL 卸载。

LB 中禁用 TLS v1.0 和 v1.1,仅启用 TLS v1.2 和 v1.3。

当我们变得频繁时在aks节点捕获的数据包

enter image description here

无异常情况下aks节点捕获的数据包

enter image description here

成功的通信发生在 TLS v1.3 上,所有失败的通信发生在 v1.0 或 v1.1 上。

问题:我们如何确保应用程序仅通过 TLS v1.2 或 v1.3 与服务器进行通信? 是否需要从应用程序代码、容器映像或 aks 节点配置中完成某些操作。

node.js ssl azure-aks tls1.3
1个回答
0
投票

为了解决间歇性 TLS 问题,您遇到在 AKS 中运行的 Node.js 应用程序,其中使用 TLS v1.3 成功通信,但尝试使用较旧的 TLS 版本时会发生故障,您可以查看以下内容例子-

您的问题 - 是否需要通过应用程序代码完成某些操作? 是的,请确保 Node.js 应用程序发起的每个 HTTPS 请求都指定 TLS v1.2 或 v1.3。这可以使用 Node.js 中的 https 模块,配置

minVersion
maxVersion
选项来完成。

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

const options = {
  hostname: 'www.example.com',
  port: 443,
  path: '/api/data',
  method: 'GET',
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem'),
  ca: fs.readFileSync('ca.pem'),
  minVersion: 'TLSv1.2', // Minimum version of TLS
  maxVersion: 'TLSv1.3'  // Maximum version of TLS
};

const req = https.request(options, (res) => {
  console.log(`STATUS: ${res.statusCode}`);
  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

req.end();

或者,您可以通过将

NODE_OPTIONS
环境变量分别设置为
--tls-min-v1.2
--tls-min-v1.3
,将容器映像配置为仅使用 TLS v1.2 或 v1.3。最后,您可以通过修改 Schannel 特定的注册表项将 AKS 节点配置为仅允许 TLS v1.2 和 v1.3,如TLS 1.2 升级工作流程文章

中所述
ENV NODE_OPTIONS="--tls-min-v1.2"

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.