出于安全原因,我想阻止所有基于kubeadm的现场Kubernetes工作节点转发nodePort流量。
我试着在一个工人身上应用显而易见的方法:
iptables -I INPUT 1 -p tcp -m multiport --dports 30000:32767 -j DROP
但似乎没用
我也在-I FORWARD 1
上尝试了同样的事情,但服务似乎仍然打开。
有什么建议吗?
# iptables -L INPUT --line-numbers -n
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 127.0.0.1 0.0.0.0/0
2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10250 reject-with icmp-port-unreachable
3 KUBE-SERVICES all -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes service portals */
4 KUBE-EXTERNAL-SERVICES all -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes externally-visible service portals */
5 KUBE-FIREWALL all -- 0.0.0.0/0 0.0.0.0/0
6 WEAVE-NPC-EGRESS all -- 0.0.0.0/0 0.0.0.0/0
# iptables -L FORWARD --line-numbers -n
Chain FORWARD (policy DROP)
num target prot opt source destination
1 WEAVE-NPC-EGRESS all -- 0.0.0.0/0 0.0.0.0/0 /* NOTE: this must go before '-j KUBE-FORWARD' */
2 WEAVE-NPC all -- 0.0.0.0/0 0.0.0.0/0 /* NOTE: this must go before '-j KUBE-FORWARD' */
3 NFLOG all -- 0.0.0.0/0 0.0.0.0/0 state NEW nflog-group 86
4 DROP all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
7 KUBE-FORWARD all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes forwarding rules */
8 KUBE-SERVICES all -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes service portals */
9 DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
10 DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
11 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
12 DOCKER all -- 0.0.0.0/0 0.0.0.0/0
13 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
14 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2条答案
按热度按时间jchrr9hc1#
最佳实践是在专用服务器上只运行Kubernetes。运行集群使用的任何副应用程序或调优应用程序可能会对Kubernetes本身造成影响,不建议/不支持。
根据您的设置,Kubernetes使用iptables,因此您所做的任何更改都可能影响Kubernetes,也可能被Kubernetes破坏。
你有几个选择来实现你所需要的,一个是有一个外部防火墙保护你的服务器,如果你不能,我建议你使用的工具,在那里创建的目的。
在我看来,最好的选择是使用Calico作为您的CNI,因为它具有允许您阻止特定流量的功能。请参阅Apply Calico policy to Kubernetes node ports。
示例:(未测试)
另一种选择是使用Network Policies,网络策略是一种规范,说明如何允许pods组相互通信以及与其他网络端点通信。
最后,我推荐的最后一个选择是Istio。Istio无疑是最复杂的解决方案,但另一方面,它也是最强大的。
k7fdbhmy2#
iptables -t raw -I PREROUTING -s xxxx -p tcp -m multiport --dports 30000:32767 -j DROP