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



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

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

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

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

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

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

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

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

谨致问候!

/分诊支持

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

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

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

最新更新