如何通过iptables从外部控制对某些Nodeport的访问

时间:2018-12-06 18:23:58

标签: kubernetes iptables

Nodeport设置了许多服务,可以通过<node_ip>:<node_port>从外部获得这些服务。

我想控制对某些服务的访问应该是一个普遍的要求,这意味着某些IP的请求可以访问它,而其他IP则不能。

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

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

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

对于我的情况,我需要设置以下规则:

  1. 集群中的所有节点都应彼此full access
  2. 某些核心服务(API)只能通过certain个IP地址接受
  3. 端口范围内的某些服务可以通过all IP地址接受
  4. 拒绝从所有IP(群集外部)访问any other服务

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

最好的问候!

/分类支持

1 个答案:

答案 0 :(得分:2)

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

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

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