我正在尝试通过 k3s nodePort 公开 UDP 服务 (tftp),但似乎无法连接。TCP 服务工作正常,但 UDP 服务似乎没有公开。
部署列出了端口:
...
ports:
- containerPort: 3000
- containerPort: 69
protocol: UDP
服务定义如下:
apiVersion: v1
kind: Service
metadata:
name: netboot-nodeports
spec:
selector:
app: netboot
type: NodePort
ports:
- name: tftp
port: 69
targetPort: 69
nodePort: 32069
protocol: UDP
- name: webui
port: 3000
targetPort: 3000
nodePort: 32070
从节点或网络上的另一台机器(即 )连接到 TCP 端口的curl http://192.168.1.154:32070
工作方式与预期一致。我可以从容器内部(即kubectl exec -it netboot-64565b9c69-bmvs4n -- tftp localhost 69
)连接到 tftp UDP 服务,但从节点或网络上的另一台机器(即tftp 192.168.1.154 32069
)连接失败并出现超时错误。
所有这些都在单个节点上的 nixOS 上的 k3s 中运行。没有运行防火墙(configuration.nix: networking.firewall.enable = false;
)。我在 k3s 日志中没有看到任何相关错误。nix k3s 配置非常简单:
services.k3s.enable = true;
services.k3s.role = "server";
services.k3s.extraFlags = toString [];
答案1
你的 k3s nodePort 中未暴露 UDP 的原因可能有以下几种:
可能是 flannel 配置在使用覆盖网络的默认 CNI 中。如果 flannel 配置错误,则可能会影响 UDP 路由覆盖。为了进行故障排除,您可以检查 Flannel pod 日志以查找与 UDP 流量路由相关的任何错误。
可能是 k3s 服务使用了该
ClusterIP
类型,使得它们仅在集群内部可见。您可以尝试将服务定义设置为type: NodePort.