node.js - 在 Azure AKS 上无限连接到我的 tcp 服务器的套接字是什么?
问题描述
我创建了一个干净的 Node.js 项目:
import * as net from "net";
net.createServer(socket => {
console.log('new client', socketToString(socket));
socket.on('data', data => console.log(data));
socket.on('end', () => console.log('client close', socketToString(socket)));
})
.listen(20202, () => console.log('listening on 20202'));
function socketToString(socket: net.Socket): string {
return `(local)=${socket.localAddress}:${socket.localPort} (remote)=${socket.remoteAddress}:${socket.remotePort}`;
}
在掌舵图中:
service:
type: LoadBalancer
spec:
ports:
- port: 20202
targetPort: 20202
protocol: TCP
name: tcp-server
使用 Azure Dev Spaces 我将我的项目推送到我的集群中,在日志中我可以看到客户端立即连接到我的服务器并在几秒钟后断开连接,而没有发送任何数据。当它立即断开连接时,会连接一个新的套接字。它是无限的。
listening on 20202
new client (local)=::ffff:10.244.0.141:20202 (remote)=::ffff:10.244.0.1:19114
client close (local)=undefined:undefined (remote)=::ffff:10.244.0.1:19114
new client (local)=::ffff:10.244.0.141:20202 (remote)=::ffff:10.244.0.1:52075
client close (local)=undefined:undefined (remote)=::ffff:10.244.0.1:52075
new client (local)=::ffff:10.244.0.141:20202 (remote)=::ffff:10.244.0.1:63285
client close (local)=undefined:undefined (remote)=::ffff:10.244.0.1:63285
对于服务类型 ClusterIP,它不会发生。动态或静态 IP 没有区别。使用kubectl describe service我可以看到:
Type: LoadBalancer
IP: 10.0.86.248
LoadBalancer Ingress: 20.54.185.111
Port: tcp-server 20202/TCP
TargetPort: 20202/TCP
NodePort: tcp-server 30132/TCP
Endpoints: 10.244.0.141:20202
所以Endpoints:匹配套接字的本地 IP。是什么原因造成的?这是某种环回吗?是 Azure Dev Spaces 造成的吗?
// 编辑
kubectl describe pod(IP 已更改,因为它是一个新实例): https ://drive.google.com/file/d/1UyjvthjGCwmwaG9nMH_UFyWT3TiMek0-
解决方案
推荐阅读
- azure - 有没有办法从天蓝色搜索索引中删除旧数据
- firebase - Flutter & Firebase:如何在我刚创建文档时将 documentID 放入文档字段?
- bash - 阅读以逗号分隔的每个单词
- javascript - 在 Material UI Chip 中对齐头像中心
- java - 在 Java 中使用字符数组执行数学运算的最有效方法是什么?
- react-native - 如何在 TensorflowJs 中将张量解码为 base64?
- node.js - 将标头发送到客户端后无法设置标头 - Node/Express/JWT
- celery - 芹菜守护进程问题
- php - 如何计算具有左连接和多个 where 条件的匹配行
- qt - 如何重置 Qt 窗口字体的大小?