【问题标题】:How to control the access to certain Nodeport from external via iptables如何通过 iptables 从外部控制对某些 Nodeport 的访问
【发布时间】:2018-12-07 08:33:34
【问题描述】:

我们有很多由 Nodeport 设置的服务,并且可以通过 <node_ip>:<node_port> 从外部获得。

我想控制对某些服务的访问应该是一个常见的要求,这意味着来自某些 IP 的请求可以访问它,而另一些则不能。

我们想使用iptables 来满足这个要求,这会引起很多困惑,因为 kubernetes 也使用它来建立通信。 我们是否有任何高级guidance 来设计/创建 iptable 规则来控制 k8s 服务?

具体来说,我在以下方面感到困惑:

  1. 我应该将规则附加到哪个表中?我发现nat and filter中的很多规则都是由K8s创建的
  2. 如果我要禁用从一个外部 IP 到某个节点的服务访问,例如 telnet <node_ip>:<node_port> 我应该直接拒绝FORWARDINPUT 还是PREROUTING
  3. 这些规则是否依赖于特定的网络插件(例如法兰绒或编织)?不同的插件是否有不同的规则配置方式?

对于我的场景,我需要设置以下规则:

  1. 集群中的所有节点应该有full accessto彼此
  2. 某些核心服务 (API) 只能由certain IP接受
  3. 端口范围内的某些服务可以被all IPs接受
  4. 拒绝从所有 IP(集群外)访问 any other 服务

k8s 版本:1.9.5 网络插件:编织

最好的问候!

/分类支持

【问题讨论】:

    标签: kubernetes iptables


    【解决方案1】:

    虽然您可以更改 K8s 节点上的 iptables,但我不建议您进行任何更改,因为 K8s(kube-proxy)会不断动态地更改规则。换句话说,Kubernetes 为你管理(与覆盖相结合)管理 iptables。

    为了阻止流量,我强烈建议使用NetworkPolicies。和/或如果您使用的是覆盖,您可以使用该覆盖提供的内容。比如 Calico 有自己的Network Policy

    控制进出流量的另一种方法是使用像Istio 这样的服务网格。

    【讨论】:

    • 谢谢,但据我所知,网络策略控制pods 级别之间的连接,但我需要控制来自external(internet) 请求的访问。符合要求吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2021-10-20
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多