Iptables
在 RHEL 7 上使用 Kubeadm 引導 Kubernetes 集群 - 防火牆問題
我正在嘗試在 RHEL 7.8 上引導 Kubernetes 集群,但我的防火牆出現了一些問題。
nftables
Kubernetes不支持,iptables-legacy
必須安裝。雖然該iptables-legacy
軟體包存在於 Debian Buster 等發行版中,但它似乎不適用於 RHEL 7。但是,本文提到了安裝iptables-services
、禁用firewalld
和啟用iptables
。文章中的相關材料是:yum install iptables-services.x86_64 -y systemctl stop firewalld.service systemctl disable firewalld.service systemctl mask firewalld.service systemctl start iptables systemctl enable iptables systemctl unmask iptables iptables -F service iptables save
在此之後,如果我
iptables --version
在伺服器上執行,我可以看到它1.4.2
已安裝。由於這比上面連結的 GitHub 問題所暗示的 1.8 舊,所以這個版本應該沒問題。在
kubeadm join
從我的工作節點執行之前,以下 Ansible 任務針對我的主節點執行以配置iptables
:- iptables: chain: INPUT destination_port: "{{ port }}" jump: ACCEPT protocol: tcp loop: - 6443 - 2379:2380 - 10250:10252 loop_control: loop_var: port - command: service iptables save - systemd: name: iptables state: restarted
這對我的節點進行配置
iptables
:- iptables: chain: INPUT destination_port: "{{ port }}" jump: ACCEPT protocol: tcp loop: - 10250 - 30000:32767 loop_control: loop_var: port - command: service iptables save - systemd: name: iptables state: restarted
在此之後,我可以確認該規則存在於記憶體中:
$> iptables -S | grep 6443 -A INPUT -p tcp -m tcp --dport 6443 -j ACCEPT
然後,當我
kubeadm join
從工作節點執行時,它無法連接:I0406 22:07:19.205714 5715 token.go:73] [discovery] Created cluster-info discovery client, requesting info from "https://192.168.50.10:6443" I0406 22:07:19.206720 5715 token.go:78] [discovery] Failed to request cluster info: [Get https://192.168.50.10:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: dial tcp 192.168.50.10:6443: connect: no route to host] I0406 22:07:19.206749 5715 token.go:191] [discovery] Failed to connect to API Server "192.168.50.10:6443": Get https://192.168.50.10:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: dial tcp 192.168.50.10:6443: connect: no route to host I0406 22:07:24.207648 5715 token.go:188] [discovery] Trying to connect to API Server "192.168.50.10:6443
但是,如果我
systemctl stop iptables
在主節點上,那麼工作節點可以毫無問題地加入。向我表明主伺服器上的防火牆配置錯誤?
Ansible 模組預設
iptables
使用該append
操作。這導致reject
規則不在應有的位置。添加action: insert
到我iptables
在 Ansible 中的任務解決了這個問題。