Kubernetes 为容器启用net.ipv4.ip_转发

Kubernetes 为容器启用net.ipv4.ip_转发,kubernetes,Kubernetes,是否可以在容器的网络命名空间上启用net.ipv4.ip\u forward 手册 从主机上,我可以手动启用它 sudo nsenter -t \ $(docker inspect --format '{{.State.Pid}}' $CONTAINER_NAME) \ -n sysctl -w net.ipv4.ip_forward=1 并确认集装箱内开始进行转运 是否有一种方法可以在避免特权容器的同时自动执行此操作?对于某些sysctl参数,是net.是命名空间的,因此可

是否可以在容器的网络命名空间上启用
net.ipv4.ip\u forward


手册

从主机上,我可以手动启用它

sudo nsenter -t \
    $(docker inspect --format '{{.State.Pid}}' $CONTAINER_NAME) \
    -n sysctl -w net.ipv4.ip_forward=1
并确认集装箱内开始进行转运


是否有一种方法可以在避免特权容器的同时自动执行此操作?

对于某些sysctl参数,是
net.
是命名空间的,因此可以为每个Pod(每个容器)启用
net.ipv4.ip_forward

请按照指南了解详细信息和问题

更长的答案 虽然
net
具有名称空间,但并非所有sysctl变量都可以在名称空间中设置。有些只是等待补丁,但有些可能永远无法实现。在
net.ipv4
的特定示例中,可以浏览查看目前支持的内容。当然,这种支持取决于实际的内核版本

如果您想“经验性地”验证sysctl(实际的内核工具,而不是工具)是否支持特定变量,您可以这样做(作为root):

正如您所看到的,在新名称空间中运行的sysctl(该工具)可以设置
net.ipv4.ip_forward=0
;而且它不会影响父命名空间

无法在命名空间中设置的变量示例(目前不支持该变量):

未命名空间的变量示例为
vm.nr\u hugepages
。此变量存在于名称空间中,但
vm
子系统本身是(设置此变量将影响所有进程):


您是否介意添加对某些代码或内核文档的引用,以指示
net.*
具有名称空间?我可以看到kubernetes文档间接地谈论它,但我很想看到linux文档;我已经编辑过了。
# cat /proc/sys/net/ipv4/ip_forward
1
# unshare --net sysctl -w net.ipv4.ip_forward=0
net.ipv4.ip_forward = 0
# cat /proc/sys/net/ipv4/ip_forward
1
# cat /proc/sys/net/ipv4/icmp_msgs_burst
50
# unshare --net sysctl -w net.ipv4.icmp_msgs_burst=42
sysctl: cannot stat /proc/sys/net/ipv4/icmp_msgs_burst: No such file or directory
# sysctl vm.nr_hugepages
vm.nr_hugepages = 0
# unshare sysctl vm.nr_hugepages=1
vm.nr_hugepages = 1
# sysctl vm.nr_hugepages
vm.nr_hugepages = 1