我的 kubelet 抱怨:
E1201 09:00:12.562610 28747 kubelet_network.go:365] 无法确保规则在过滤器链 KUBE-FIREWALL 中丢弃由 KUBE-MARK-DROP 标记的数据包:错误附加规则:退出状态 1:iptables:无链/目标/匹配用那个名字。
这通常发生在您忘记使用 --net-host 'rkt run' 时,但我没有。
export RKT_OPTS="--volume var-log,kind=host,source=/var/log \
--mount volume=var-log,target=/var/log \ --volume dns,kind=host,source=/ etc/resolv.conf \ --mount volume=dns,target=/etc/resolv.conf --net=host"
以下确认我的 kube-proxy(由 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 工作人员(我比较的不同机器)上的过滤器链。
问题工作者是运行 docker 1.12.3 和 rkt 1.18.0 的 Debian Jessie
好工人和问题工人都在运行相同版本的 iptables,1.4.21
KUBELET_VERSION=v1.4.6_coreos.0
症状是问题 worker 上的 kubernetes 没有安装任何 iptables 规则,例如 KUBE-NODEPORTS,因此该 worker 无法监听 NodePort 服务。我想是因为以上原因。
问题工作者运行主节点调度的 pod 没有问题。
问题工作人员上的 Pod 正在处理来自运行在不同(coreos)工作人员上的代理的请求。
我正在使用法兰绒进行联网。
如果有人想知道,我需要让 kubernetes 在 Debian 上工作(是的,说来话长)
我还能做些什么来隔离似乎 kubelet 没有看到主机的 iptables 的东西?