EKS集群中对接Jaeger Agent DaemonSet时UDP连接被拒求助
看起来你遇到了Jaeger Agent DaemonSet模式下的UDP连接拒绝问题,我之前在EKS集群里也碰到过类似的情况,结合你的配置和报错信息,给你梳理下排查方向和解决方案:
核心问题定位
你的应用通过status.hostIP(Node IP)访问Agent的6831 UDP端口时被拒绝,但Sidecar模式正常,且节点安全组无限制,大概率是DaemonSet的端口没有映射到Node主机上,导致Node的6831端口并没有被Agent容器占用。
1. 修复DaemonSet的端口映射配置
你当前的DaemonSet只定义了containerPort,这个端口仅在容器内部可见,并没有绑定到Node的主机端口上。应用访问Node的6831端口时,没有对应的进程监听,自然会拒绝连接。
修改后的DaemonSet配置(添加hostPort):
apiVersion: apps/v1 kind: DaemonSet metadata: name: jaeger-agent labels: app: jaeger app.kubernetes.io/name: jaeger app.kubernetes.io/component: agent namespace: observability spec: selector: matchLabels: app: jaeger app.kubernetes.io/name: jaeger app.kubernetes.io/component: agent template: metadata: labels: app: jaeger app.kubernetes.io/name: jaeger app.kubernetes.io/component: agent spec: containers: - name: jaeger-agent image: jaegertracing/jaeger-agent:1.18.0 args: ["--reporter.grpc.host-port=<collector-name>:14250"] ports: - containerPort: 5775 hostPort: 5775 # 绑定到Node主机端口 protocol: UDP - containerPort: 6831 hostPort: 6831 # 绑定到Node主机端口 protocol: UDP - containerPort: 6832 hostPort: 6832 # 绑定到Node主机端口 protocol: UDP - containerPort: 5778 hostPort: 5778 # 绑定到Node主机端口 protocol: TCP
提示:
hostPort会将容器端口直接映射到Node的对应端口,确保应用通过Node IP访问时能路由到Agent容器。
2. 检查集群NetworkPolicy限制
即使节点安全组没有限制,EKS集群内部的NetworkPolicy可能会阻止跨命名空间的UDP流量。你需要检查应用所在命名空间(比如你的HotRod在default命名空间)和Agent所在的observability命名空间是否有NetworkPolicy规则拦截了6831端口的流量。
如果存在NetworkPolicy,需要添加允许应用访问Agent的规则,示例如下:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-hotrod-to-jaeger-agent namespace: default spec: podSelector: matchLabels: app: hotrod policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: observability podSelector: matchLabels: app.kubernetes.io/component: agent ports: - protocol: UDP port: 6831
3. 验证端口监听状态
修改DaemonSet后,登录到应用所在的Node节点,执行以下命令检查6831端口是否被Agent进程监听:
sudo netstat -ulpn | grep 6831
如果输出中能看到jaeger-agent进程监听0.0.0.0:6831,说明端口映射成功。
4. 备选检查:客户端端口配置
默认情况下Jaeger客户端使用6831端口发送UDP Span,但如果你的Agent有自定义端口配置,需要在HotRod应用中添加JAEGER_AGENT_PORT环境变量指定对应端口。不过从你的报错信息来看,应用确实在访问6831端口,这一步可以作为兜底检查。
内容的提问来源于stack exchange,提问作者Maor Goldberg

