无法从Kubernetes群集中公开TFTP服务
我正在使用Rancher的nginx ingress控制器,无法从Kubernetes群集中公开TFTP服务,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我正在使用Rancher的nginx ingress控制器,Rancher/nginx ingress控制器:0.21.0-rancher3,它应该基于AFAIK 我的udp服务配置为: apiVersion: v1 kind: ConfigMap metadata: name: udp-services namespace: ingress-nginx data: 69: "default/tftp:69" 8881: "default/test:8881" 在default
Rancher/nginx ingress控制器:0.21.0-rancher3
,它应该基于AFAIK
我的udp服务配置为:
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
data:
69: "default/tftp:69"
8881: "default/test:8881"
在default/test
上运行nc-l-u-p8881
可以很好地与集群外客户端通信。这意味着udp代理可以工作,至少在某些情况下是这样。但是,tftp始终请求default/tftp
超时
大致而言,TFTP读取应按以下方式工作:
tcpdump
在tftp服务器上运行表明通信如下:
TIMESTAMP [error] ... upstream timed out (110: Connection timed out) while proxying connection, udp client: ::1, server: [::]:69, upstream: "...:69", bytes from/to client:..., bytes from/to upstream:...
来自集群中另一个容器的TFTP请求工作正常。这意味着TFTP服务器本身不是问题的直接来源。问题是入口控制器如何处理请求
我发现有一个--port range
参数,可以确定tftpd可以使用哪个端口响应。我试图将其固定到端口8881(——端口范围8881:8881
),但请求仍被丢弃
我猜入口不会将数据包重定向回客户端,因为应答不是来自端口69,而是来自端口B
有人成功地在Kubernetes集群中公开了TFTP服务吗?这不是100%的解决方案,但我找到了完全相同的解决方法。问题是tftp创建了主机状态表中未知的新出站UDP连接。因此,它将其视为发出的请求,而不是回复。我还将注意到,TFTP客户端应用程序可以很好地处理这个问题,但PXE驱动程序(至少是intel驱动程序)不能 如果您使用印花布作为CNI,则可以在IPPool上禁用“NATEOUTING”。如果需要NAT,可以创建第二个不带NAT的IPPool 我通过
calicotl get ippool-oyaml | sed's/natouting:true/natouting:false/g'| calicotl apply-f-
我相信其他CNI插件可能也有类似的解决方案,这不是100%的解决方案,但我找到了完全相同的解决方案。问题是tftp创建了主机状态表中未知的新出站UDP连接。因此,它将其视为发出的请求,而不是回复。我还将注意到,TFTP客户端应用程序可以很好地处理这个问题,但PXE驱动程序(至少是intel驱动程序)不能 如果您使用印花布作为CNI,则可以在IPPool上禁用“NATEOUTING”。如果需要NAT,可以创建第二个不带NAT的IPPool 我通过
calicotl get ippool-oyaml | sed's/natouting:true/natouting:false/g'| calicotl apply-f-
我相信其他CNI插件可能也有类似的解决方法您找到解决方案了吗?我需要同样的场景才能工作不。我在k8s集群外运行了一个直接为tftp服务的docker容器。有没有人在k8s内使用calico+metallb的tftp有什么运气?你找到解决方案了吗?我需要同样的场景才能工作不。我在k8s集群外运行一个直接为tftp提供服务的docker容器。有人在k8s内使用印花布+金属磅的tftp吗?感谢Roogles的领导!我的观点被限制在nginx。我暂时无法测试它。我将尝试并更新它,并尝试找出NATOUTION如何影响集群的其他部分。感谢Roogles的领导!我的观点被限制在nginx。我暂时无法测试它。我将尝试更新它,并尝试找出NATOUTION如何影响集群的其他部分。