首页 > 解决方案 > 如何通过 iptables 从外部控制对某些 Nodeport 的访问

问题描述

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

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

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

具体来说,我在以下领域感到困惑:

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

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

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

k8s 版本:1.9.5 网络插件:weave

此致!

/分类支持

标签: kubernetesiptables

解决方案


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

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

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


推荐阅读