【问题标题】:Is there a way to customize iptables rules in filter table on kubernetes master/worker node?有没有办法在 kubernetes 主/工作节点的过滤表中自定义 iptables 规则?
【发布时间】:2018-07-26 00:08:13
【问题描述】:

我正在开展一个项目,我们正在尝试将遗留产品(部署为独立 VM)转换为 kubernetes 基础设施。

我使用 KUBEROUTER 作为 CNI 提供者。

为了保护 VM 免受 DoS(并记录尝试),我们在 iptables 过滤表中添加了不同的链。 (这些包括 ping flood、syn flood 的规则——我认为网络策略/入口控制器可以管理 syn flood,但不确定如何处理 icmp flood。)

当我在我的 VM 上部署 kubernetes 时,我发现 kubernetes 会更新 iptables 并创建它自己的链。 (主要是 k8s 更新 NAT 规则,但过滤表中也添加了链)

我的问题是:

  1. 是否可以在运行 kubernetes 的 VM 上自定义 iptables?

  2. 如果我将自己的链(确保 k8s 链就位)添加到 iptables 配置中,它们会被 k8s 覆盖吗?

  3. 我可以使用普通的旧 iptables 命令添加链还是需要通过 kubectl 来添加链? (从 k8s 文档中,我得到的印象是我们只能使用 kubectl 更新 NAT 表中的规则)

如果有人知道更多,请告诉我,谢谢!

~Prasanna

【问题讨论】:

    标签: kubernetes iptables


    【解决方案1】:
    1. 是否可以在运行 kubernetes 的 VM 上自定义 iptables?

    是的,你可以正常管理你的VM的iptables,但是关于Kubernetes内部应用程序的规则应该从Kubernetes内部管理。

    1. 如果我将自己的链(确保 k8s 链就位)添加到 iptables 配置中,它们会被 k8s 覆盖吗?

    链不应被 Kubernetes 覆盖,因为 Kubernetes 会创建自己的链并对其进行管理。

    1. 我可以使用普通的旧 iptables 命令添加链还是需要通过 kubectl 来添加? (从 k8s 文档中,我得到一个印象,我们只能使用 kubectl 更新 NAT 表中的规则)

    您可以将 iptables 用于与 VirtualMachine 相关的规则。要管理防火墙规则,您应该使用 iptables,因为 kubectl 无法管理防火墙。对于 Kubernetes 集群中的入站和出站规则,请使用 Kubernetes 工具(您在其中指定网络策略的 .yaml 文件)。请注意不要创建可能与 iptables 规则冲突的services

    如果您打算通过使用NodePortLoadBalancing 服务类型向外部公开应用程序服务,则必须在您的iptables 规则集中启用流量转发。如果您发现无法从运行应用程序的 pod 使用的网络外部访问服务,请检查您的 iptables 规则集是否不包含类似于以下的规则:

    :FORWARD DROP [0:0]
    

    与标准基础架构/以网络为中心的标准防火墙相比,Kubernetes 网络策略以应用程序为中心。

    这意味着我们并没有真正使用基于 CIDR 或 IP 的网络策略,在 Kubernetes 中它们是基于 labels and selectors. 构建的

    关于 DDoS 保护和 ICMP 洪水攻击的详细信息:事实是“经典”缓解方法 - 限制 ICMP 响应/过滤技术将对合法流量产生影响。在流量巨大的 DDoS 攻击的“新时代”中,基于防火墙的解决方案是不够的,因为流量通常能够压倒它们。您可以考虑一些供应商特定的解决方案,或者如果您有这种可能性 - 准备您的基础设施以承受大量流量或实施解决方案,如 ping 大小和频率限制。此外,整体 DDoS 保护由许多级别和解决方案组成。有一些解决方案,如黑洞路由、速率限制、任播网络扩散、uRPF、ACL,它们也可以帮助解决应用级 DDoS 攻击。我可以推荐更多有趣的做法,但在我看来,制定手册和事件响应计划以应对这些攻击非常重要。

    【讨论】:

    • 感谢@aurelius 的详细回答 - 它为我清除了很多东西。让我尝试在 iptables 过滤表中添加我自己的链,看看效果如何。
    • 您知道 AWS K8S CNI 是否会覆盖 iptables 规则吗?我遇到了一个问题,即也在运行 docker 的 EKS 节点缺少来自 iptables 的 DOCKER 链。我必须运行 sudo systemctl restart docker.service 才能让链条出现。
    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多