首页 > 解决方案 > 在 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-

标签: node.jssocketskubernetestcpazure-aks

解决方案


推荐阅读