使用iptables阻止来自集群外部的所有Kubernetes节点端口通信

使用iptables阻止来自集群外部的所有Kubernetes节点端口通信,kubernetes,iptables,Kubernetes,Iptables,出于安全原因,我想阻止所有基于kubeadm的现场Kubernetes工作节点转发节点端口流量 我试着向一名工人申请显而易见的: iptables-I输入1-ptcp-m多端口-dports 30000:32767-j丢弃 但它似乎不起作用 我在-I FORWARD 1上也尝试了同样的方法,但服务仍然打开 有什么建议吗 #iptables-L输入-行号-n 链输入(策略接受) num目标保护选项源目标 1接受全部--127.0.0.1 0.0.0.0/0 2拒绝tcp--0.0.0.0/0.0

出于安全原因,我想阻止所有基于kubeadm的现场Kubernetes工作节点转发节点端口流量

我试着向一名工人申请显而易见的:

iptables-I输入1-ptcp-m多端口-dports 30000:32767-j丢弃
但它似乎不起作用

我在
-I FORWARD 1
上也尝试了同样的方法,但服务仍然打开

有什么建议吗

#iptables-L输入-行号-n
链输入(策略接受)
num目标保护选项源目标
1接受全部--127.0.0.1 0.0.0.0/0
2拒绝tcp--0.0.0.0/0.0.0.0/0 tcp dpt:10250拒绝,icmp端口不可访问
3 KUBE-SERVICES all--0.0.0.0/0.0.0/0 ctstate NEW/*kubernetes服务门户*/
4 KUBE-EXTERNAL-SERVICES all--0.0.0.0/0.0.0.0/0 ctstate NEW/*kubernetes外部可见服务门户*/
5 KUBE-FIREWALL all--0.0.0.0/0.0.0.0/0
6 WEAVE-NPC-ExpressAll--0.0.0.0/0.0.0.0/0
#iptables-L转发-行号-n
链前进(保单下降)
num目标保护选项源目标
1 WEAVE-NPC-Exgress all--0.0.0.0/0.0.0.0/0/*注:此项必须在“-j KUBE-FORWARD”之前*/
2 WEAVE-NPC all--0.0.0.0/0.0.0.0/0/*注意:这必须在“-j KUBE-FORWARD”之前*/
3 NFLOG all--0.0.0.0/0.0.0.0/0状态新NFLOG组86
4全部删除--0.0.0.0/0.0.0.0/0
5接受全部--0.0.0.0/0.0.0.0/0
6全部接受--0.0.0.0/0.0.0.0/0 ctstate相关,已建立
7 KUBE-FORWARD all--0.0.0.0/0.0.0/0/*kubernetes转发规则*/
8 KUBE-SERVICES all--0.0.0.0/0.0.0/0 ctstate NEW/*kubernetes服务门户*/
9 DOCKER-USER all--0.0.0.0/0.0.0.0/0
10 DOCKER-ISOLATION-STAGE-1 all--0.0.0.0/0.0.0.0/0
11接受全部--0.0.0.0/0.0.0.0/0 ctstate相关,已建立
12 DOCKER all--0.0.0.0/0.0.0.0/0
13全部接受--0.0.0.0/0.0.0.0/0
14接受全部--0.0.0.0/0.0.0.0/0

在专用服务器上只运行Kubernetes是最佳做法。运行集群使用的任何辅助应用程序或调优应用程序可能会对Kubernetes本身造成影响,因此不建议/不支持

根据您的设置,kubernetes使用iptables,因此您所做的任何更改都可能影响kubernetes,也可能被kubernetes破坏

你有几个选择来实现你所需要的,一个是有一个外部防火墙保护你的服务器,如果你不能,我建议你使用为这个目的而创建的工具

在我看来,最好的选择是使用印花棉布作为你的CNI,因为它的功能可以让你阻止特定的交通。请参阅

示例:(未测试)

另一种选择是使用,网络策略是一种规范,说明如何允许组之间以及其他网络端点进行通信


最后,我推荐的最后一个选择是。Istio无疑是最复杂的解决方案,但另一方面,它是最强大的。

sudo route-n
输出?
  apiVersion: projectcalico.org/v3
  kind: GlobalNetworkPolicy
  metadata:
    name: deny-nodeports
  spec:
    applyOnForward: true
    preDNAT: true
    ingress:
    - action: Deny
      destination:
        ports:
        - 30000:32767
      protocol: TCP
      source: {}
    - action: Deny
      destination:
        ports:
        - 30000:32767
      protocol: UDP
      source: {}
    selector: has(kubernetes-host)
    order: 1100
    types:
    - Ingress