私のkubeletは文句を言います:
E1201 09:00:12.562610 28747 kubelet_network.go:365] フィルター チェーン KUBE-MARK-DROP でマークされたパケットをドロップするルールを確認できませんでした KUBE-FIREWALL: 追加ルールのエラー: 終了ステータス 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"
以下は、(kubelet によって開始された) 私の kube-proxy が、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
問題のワーカーの kubernetes が KUBE-NODEPORTS などの iptables ルールをインストールしないため、このワーカーは NodePort サービスをリッスンできません。上記の理由だと思います。
問題のワーカーは、マスター ノードがスケジュールするポッドを問題なく実行できます。
問題のワーカーの Pod は、別の (coreos) ワーカーで実行されているプロキシからのリクエストを正常に処理しています。
ネットワークにはフランネルを使用しています。
疑問に思っている人がいれば、Debian で kubernetes を動作させる必要があります (ええ、長い話です)。
ホストの iptables を認識していない kubelet のように見えるものを分離するには、他に何ができますか?