我们有很多由Nodeport设置的服务,可以通过<node_ip>:<node_port>
从外部获得。
我想控制对某些服务的访问应该是一个常见的要求,这意味着来自一些IP的请求可以访问它,而其他IP则不能。
我们希望使用iptables
来满足这一要求,因为kubernetes也使用它来设置通信,所以这会引起很多混淆。我们是否有任何高级guidance
来设计/创建iptable规则来控制k8s服务?
具体来说,我在以下方面感到困惑:
- 我应该将规则附加到哪个表中?我发现
nat and filter
中的许多规则都是由K8创建的 - 如果我要禁用从一个外部IP到某个节点的服务访问,例如
telnet <node_ip>:<node_port>
我应该直接拒绝FORWARD
、INPUT
还是PREROUTING
- 这些规则是否依赖于特定的网络插件(例如法兰绒或编织(?不同的插件是否有不同的方式来配置规则
对于我的场景,我有以下规则需要设置:
- 集群中的所有节点都应该彼此具有
full access
- 某些核心服务(API(只能由
certain
IP接受 - 端口范围内的某些服务可以被
all
IPACCEPT -
拒绝从所有IP(集群外(访问
any other
服务
k8s版本:1.9.5网络插件:编织
谨致问候!
/分诊支持
尽管您可以更改K8s节点上的iptables,但我不建议进行任何更改,因为K8s(kube代理(不断动态更改规则。换句话说,Kubernetes为您管理(与覆盖相结合(iptables。
为了阻止流量,我强烈建议使用NetworkPolicies。和/或如果您正在使用覆盖,您可以使用该覆盖提供的内容。例如,Calico有自己的网络策略
控制流量进出的另一种方法是使用像Istio这样的服务网格。