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

问题描述 投票:0回答:2

出于安全原因,我想阻止所有基于 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
kubernetes iptables
2个回答
0
投票

最佳实践是在专用服务器上仅运行 Kubernetes。运行集群使用的任何侧面应用程序或调整应用程序可能会对 Kubernetes 本身造成影响,因此不建议/支持。

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

您有几种选择来实现您的需求,其中之一是使用外部防火墙来保护您的服务器,如果您不能,我建议您使用为此目的创建的工具。

我认为最好的选择是使用 Calico 作为您的 CNI,因为它具有允许您阻止特定流量的功能。请参阅将 Calico 策略应用于 Kubernetes 节点端口

示例:(未测试)

  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

另一种选择是使用 网络策略,网络策略是关于如何允许 pods 组相互通信以及如何与其他网络端点通信的规范。

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


0
投票

iptables -t raw -I PREROUTING -s xxxx  -p tcp -m multiport --dports 30000:32767 -j DROP

© www.soinside.com 2019 - 2024. All rights reserved.