Docker hyperkube代理,kubelet可以';t查找iptables链,rkt运行--net=host

Docker hyperkube代理,kubelet可以';t查找iptables链,rkt运行--net=host,docker,kubernetes,iptables,rkt,kubelet,Docker,Kubernetes,Iptables,Rkt,Kubelet,我的kubelet抱怨说: E1201 09:00:12.562610 28747 kubelet_网络。go:365]未能确保 在过滤器链中丢弃由KUBE-MARK-drop标记的数据包的规则 KUBE-FIREWALL:附加规则时出错:退出状态1:iptables:否 按该名称进行链/目标/匹配 这通常发生在您忘记使用--net主机运行rkt时,但我没有 export RKT_OPTS=“--volume var log,kind=host,source=/var/log\ --mount

我的kubelet抱怨说:

E1201 09:00:12.562610 28747 kubelet_网络。go:365]未能确保 在过滤器链中丢弃由KUBE-MARK-drop标记的数据包的规则 KUBE-FIREWALL:附加规则时出错:退出状态1:iptables:否 按该名称进行链/目标/匹配

这通常发生在您忘记使用--net主机运行rkt时,但我没有

export RKT_OPTS=“--volume var log,kind=host,source=/var/log\
--mount volume=var log,target=/var/log \--卷dns,kind=host,source=/etc/resolv.conf \--mount volume=dns,target=/etc/resolv.conf--net=host”

以下内容确认我的kube代理(由kubelet启动)与拥有iptables链的主机位于同一命名空间中:

root@i8:/etc# d exec -it 738 readlink /proc/self/ns/net
net:[4026531963]

root@i8:/etc# readlink /proc/self/ns/net
net:[4026531963]

root@i8:/etc# docker ps
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS                           NAMES
738ed14ec802        quay.io/coreos/hyperkube:v1.4.6_coreos.0   "/hyperkube proxy --m"   44 minutes ago      Up 44 minutes                                       k8s_kube-proxy.c445d412_kube-proxy-192.168.101.128_kube-system_438e3d01f328e73a199c6c0ed1f92053_10197c34
代理类似地抱怨“没有该名称的链/目标/匹配”

我还验证了iptables链:

# Completed on Thu Dec  1 01:07:11 2016
# Generated by iptables-save v1.4.21 on Thu Dec  1 01:07:11 2016
*filter
:INPUT ACCEPT [4852:1419411]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5612:5965118]
:DOCKER - [0:0]
:DOCKER-ISOLATION - [0:0]
:KUBE-FIREWALL - [0:0]
:KUBE-SERVICES - [0:0]
-A INPUT -j KUBE-FIREWALL
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A OUTPUT -j KUBE-SERVICES
-A OUTPUT -j KUBE-FIREWALL
-A DOCKER-ISOLATION -j RETURN
-A KUBE-FIREWALL -m mark --mark 0x8000/0x8000 -j DROP
COMMIT
这满足了错误消息中的投诉(我想),并匹配了无问题coreos worker(与我比较的不同机器)上的过滤器链

问题工人是运行docker 1.12.3和rkt 1.18.0的Debian Jessie

优秀工作者和问题工作者都运行相同版本的iptables,1.4.21

KUBELET_版本=v1.4.6_coreos.0

问题的症候是,问题工作者的kubernetes没有安装任何iptables规则,如KUBE-NODEPORTS,因此该工作者无法侦听NodePort服务。我想这是因为上述原因

问题工作者在运行主节点调度的吊舱时没有问题

问题工作者上的POD正在为来自运行在不同(coreos)工作者上的代理的OK请求提供服务

我在用法兰绒做网络

如果有人想知道,我需要让kubernetes在Debian上工作(是的,说来话长)


我还可以做些什么来隔离kubelet似乎看不到主机iptables的内容?

经过多次故障隔离后,我找到了原因和解决方案

在我的例子中,我正在运行一个定制的内核pkg(linux映像),它缺少几个与iptables相关的内核模块。因此,当kubelet试图附加包含注释的iptables规则时,出现了错误,因为未加载xt_注释

这些是我缺少的模块:ipt_拒绝、nf_conntrack_netlink、nf_拒绝、ipv4、sch_fq_codel(可能不需要)、xt_注释、xt_标记、xt_最近、xt_统计


为了获得我可能需要的模块的完整列表,我登录了CoreOS kubernetes worker并查看了它的
lsmod
。然后将这个列表与我的“问题”机器进行比较。

经过多次故障隔离后,我找到了原因和解决方案

在我的例子中,我正在运行一个定制的内核pkg(linux映像),它缺少几个与iptables相关的内核模块。因此,当kubelet试图附加包含注释的iptables规则时,出现了错误,因为未加载xt_注释

这些是我缺少的模块:ipt_拒绝、nf_conntrack_netlink、nf_拒绝、ipv4、sch_fq_codel(可能不需要)、xt_注释、xt_标记、xt_最近、xt_统计


为了获得我可能需要的模块的完整列表,我登录了CoreOS kubernetes worker并查看了它的
lsmod
。然后将该列表与我的“问题”机器进行比较。

我在使用rancher的K3D1.3.1运行k8s时,在一个带有自定义内核配置的gentoo机器上遇到了这个问题。用所有健全的iptables+xt_注释重建内核为我解决了这个问题

在使用rancher的K3D1.3.1运行k8s时,我在一个带有自定义内核配置的gentoo box上遇到了这个问题。用所有健全的iptables+xt_注释重建内核为我解决了这个问题