Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker K8S iptables与吊舱内容器的iptables之间的关系_Docker_Kubernetes_Iptables - Fatal编程技术网

Docker K8S iptables与吊舱内容器的iptables之间的关系

Docker K8S iptables与吊舱内容器的iptables之间的关系,docker,kubernetes,iptables,Docker,Kubernetes,Iptables,我在容器中启用了特权模式,并向其中添加了一条规则 iptables -N udp2rawDwrW_191630ce_C0 iptables -F udp2rawDwrW_191630ce_C0 iptables -I udp2rawDwrW_191630ce_C0 -j DROP iptables -I INPUT -p tcp -m tcp --dport 4096 -j udp2rawDwrW_191630ce_C0 并将ktexec放入容器中并使用iptables-table filte

我在容器中启用了特权模式,并向其中添加了一条规则

iptables -N udp2rawDwrW_191630ce_C0
iptables -F udp2rawDwrW_191630ce_C0
iptables -I udp2rawDwrW_191630ce_C0 -j DROP
iptables -I INPUT -p tcp -m tcp --dport 4096 -j udp2rawDwrW_191630ce_C0
并将ktexec放入容器中并使用iptables-table filter-L,我可以看到添加的规则

/ # iptables --table filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
udp2rawDwrW_191630ce_C0  tcp  --  anywhere             anywhere             tcp dpt:4096

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain udp2rawDwrW_191630ce_C0 (1 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
当我登录到容器所在的节点并运行sudoiptalbes-tablefilter-L时,我看不到相同的结果

我认为默认情况下,previleged会被删除,因为容器可能会利用它来更改节点中的iptables之类的内容,但是看起来不是这样


所以我的问题是K8S iptables和pod中容器的iptables之间的关系是什么?为什么我们阻止用户在没有特权字段的情况下修改容器的iptables?

如果您想要操纵节点的iptables,那么您肯定需要将pod放在主机的网络hostNetwork上:在pod的规范中为true。之后授予容器[i].securityContext.capabilities.add中的容器NET_ADMIN和NET_RAW功能就足够了。 json切片示例:

  "spec": {
    "hostNetwork": true,
    "containers": [{
      "name": "netadmin",
      "securityContext": {"capabilities": { "add": ["NET_ADMIN", "NET_RAW"] } }

我不确定特权模式是否与这些天操纵主机的iptables有关。

如果您想操纵节点的iptables,那么您肯定需要将pod放在主机的网络上hostNetwork:true在pod的规范内。在授予容器中的容器NET_ADMIN和NET_RAW功能之后[I].securityContext.capabilities.add已足够。 json切片示例:

  "spec": {
    "hostNetwork": true,
    "containers": [{
      "name": "netadmin",
      "securityContext": {"capabilities": { "add": ["NET_ADMIN", "NET_RAW"] } }

我不确定特权模式是否与这些天操纵主机的iptables有关。

Hi,我认为这是因为对节点iptables所做的修改在其动态修改中丢失了。请查看中的这一部分。请解释容器中启用的特权模式:您使用了什么命令/yaml?也是普通docker容器还是k8s吊舱?@morgwai,这里记录了特权模式:。它是k8s pod中的容器。@Piotrames,我认为节点的iptables实际上没有被容器修改过。我检查了节点的iptables规则,觉得有很多规则与流量相关,但没有反映在容器中。嗨,我认为这是因为对节点iptables所做的修改在其动态修改中丢失了。请查看中的这一部分。请解释容器中启用的特权模式:您使用了什么命令/yaml?也是普通docker容器还是k8s吊舱?@morgwai,这里记录了特权模式:。它是k8s pod中的容器。@Piotrames,我认为节点的iptables实际上没有被容器修改过。我检查了节点的iptables规则,觉得有很多规则与流量相关,但没有反映在容器中。谢谢,我认为如果有启用主机网络的选项,pod上的默认命名空间应该与主机上的命名空间不同。@DamonYuan你是说iptables命名空间对吗?不确定名称空间是否是iptables的正确术语,因此根据您的经验,但是说实话,我以前不知道:我认为在没有hostNetwork:true的情况下操作iptables基本上会产生一些错误。不,不会有任何错误-容器的iptalbe已经更改,而主机的iptalbe保持不变。谢谢,我想如果有启用主机网络的选项,那么pod上的默认名称空间应该与主机上的名称空间不同。@DamonYuan您的意思是iptables名称空间,对吗?不确定名称空间是否是iptables的正确术语,因此根据您的经验,但是说实话,我以前并不知道:我认为在没有hostNetwork:true的情况下操作iptables基本上会产生一些错误。不,不会有任何错误-容器的iptalbe已经更改,而主机的iptalbe保持不变。