kubernetes - 无法在不同机器上运行的 kubernetes pod 之间传输文件
问题描述
一年多以来,我将我的静态网站部署在只有一个节点的 Kubernetes 集群中(基本上遵循下面的场景 1)。
这些天,我在集群中添加了另一个节点,一切正常,除了一个奇怪的细节阻止我发布我的网站。
举例来说,假设我在pod1
node 上运行的 shell 中node1
。
场景 1. 如果我的网站在同一个 pod 上运行node1
,那么
// pod1
$ wget <static-website-pod-IP>:PORT/some-file.html
成功获取some-file.html
。
场景 2. 相比之下,如果我的网站在 pod 上运行node2
,那么同样的命令
// pod1
$ wget <static-website-pod-IP>:PORT/some-file.html
some-file.html
如果文件 < ~1.4KB(根据经验确定),则成功获取。如果
some-file.html
> ~ 1.4KB,则永远阻塞。
对于静态网站,我尝试了多个nginx
版本和配置以及 python 虚拟服务器。
我还使用 Kubernetes 最新 v1.18 和最新 v1.16 进行了测试。
知道为什么我不能从运行在不同节点上的 pod 下载更大的文件吗?
解决方案
我设法从@anton-matsiuk 的提示开始解决了这个问题。
使用的网络接口使用的 MTU 是 1450:
$ ip link show
...
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 86:00:00:53:4d:50 brd ff:ff:ff:ff:ff:ff
...
所以解决方案是根据这张表ConfigMap
将calico的默认参数修改veth_mtu: "1440"
为。veth_mtu: "1430"
谢谢你,@anton-matsiuk。
推荐阅读
- python - 由于只读属性错误,无法设置 protobuf 字段
- php - 如何正确设置用户设置膳食计划的方式?
- windows - Azure 文件共享映射驱动器对所有本地用户帐户都不可见,我们没有使用 Azure AD
- github-actions - Codecov 没有通过 Github 操作检查
- javascript - useContext 值更改不会更新组件
- java - 我正在尝试使用图像标题查询图像文件和 Back4App 上的描述,因为此应用程序不需要用户名
- javascript - 从不和谐机器人的 javascript 中的 fs.readdir 函数中断 for 循环
- encryption - make:为加密和解密文件删除了循环依赖项
- apk - 如何在 thunkable 中更改 apk 文件的版本代码?
- kotlin - Kotlin Webflux reactor 客户端重试