📅  最后修改于: 2023-12-03 15:26:43.425000             🧑  作者: Mango
在 Kubernetes 集群中,网络通讯是通过 iptables 来管理的。在某些情况下,我们需要检查 Kubernetes 服务中的 iptables 规则,以了解网络通讯的细节。
以下是一个 Shell-Bash 脚本,可以用来检查 Kubernetes 服务中的 iptables 规则。
#!/bin/bash
KUBECTL=$(which kubectl)
# 获取所有节点的IP地址
NODES=$($KUBECTL get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}')
# 在所有节点上运行 iptables-save 命令,并输出到文件中
for NODE in $NODES; do
echo "Checking iptables rules on ${NODE}..."
ssh ${NODE} sudo iptables-save > ${NODE}-iptables.txt
done
# 将所有结果合并到一个文件中,并使用 markdown 格式输出
echo "## iptables rules" > iptables-rules.md
for NODE in $NODES; do
echo "" >> iptables-rules.md
echo "### ${NODE}" >> iptables-rules.md
echo "" >> iptables-rules.md
cat ${NODE}-iptables.txt >> iptables-rules.md
done
# 清理中间文件
rm *-iptables.txt
# 输出 markdown 格式的 iptables 规则
cat iptables-rules.md
该脚本首先使用 kubectl
命令获取所有节点的 IP 地址,并在每个节点上运行 iptables-save
命令,将结果输出到文件中。然后将所有结果合并到一个 markdown 文件中,并清理中间文件。最后,输出 markdown 格式的 iptables 规则。
以下是一个示例输出(部分内容已省略):
## iptables rules
### 10.0.0.1
# Generated by iptables-save v1.6.1 on Fri Jul 16 01:15:47 2021
*nat
:PREROUTING ACCEPT [647:58715]
:INPUT ACCEPT [647:58715]
:OUTPUT ACCEPT [535:32871]
:POSTROUTING ACCEPT [535:32871]
:KUBE-FIREWALL - [0:0]
:KUBE-NODE-PORTS - [0:0]
:KUBE-POSTROUTING - [0:0]
:KUBE-SEP-3WBCVZPLBXRPKE3E - [0:0]
:KUBE-SEP-65NUMW4JPPJOP5OL - [0:0]
:KUBE-SEP-6GNXKHA5PHFERPWV - [0:0]
:KUBE-SEP-C2K6X2U7UEJLITRZ - [0:0]
:KUBE-SEP-CP7HTLSMR6XGFRZ5 - [0:0]
:KUBE-SEP-P4SO4GWZVKG4UB3L - [0:0]
:KUBE-SERVICES - [0:0]
:KUBE-SVC-M56JJE5XOZZ7OUYQ - [0:0]
[...]
我们可以将输出复制到任何 markdown 编辑器中,来查看 iptables 规则。
以上就是一个简单的脚本,可以用来检查 Kubernetes 服务中的 iptables 规则。