kubernetes - 如何通过 iptables 从外部控制对某些 Nodeport 的访问
问题描述
我们有很多由 Nodeport 设置的服务,可以从外部通过<node_ip>:<node_port>
.
我想控制对某些服务的访问应该是一个常见的要求,这意味着来自某些 IP 的请求可以访问它,而另一些则不能。
我们想用它iptables
来满足这个要求,这会引起很多混乱,因为 kubernetes 也使用它来建立通信。我们是否有任何高级guidance
设计/创建 iptable 规则来控制 k8s 服务?
具体来说,我在以下领域感到困惑:
- 我应该将规则附加到哪个表中?我发现很多规则
nat and filter
都是由 K8s 创建的 - 如果我要如何禁用从一个外部 IP 到某个节点的服务访问,例如
telnet <node_ip>:<node_port>
我应该 REJECT onFORWARD
orINPUT
,还是PREROUTING
直接? - 这些规则是否依赖于特定的网络插件(例如法兰绒或编织)?不同的插件是否有不同的方式来配置规则?
对于我的场景,我需要设置以下规则:
- 集群中的所有节点都应该
full access
相互拥有 - 某些核心服务 (API) 只能由IP接受
certain
- 端口范围内的某些服务可以被IP接受
all
- 拒绝来自所有 IP的服务访问
any other
(集群外)
k8s 版本:1.9.5 网络插件:weave
此致!
/分类支持
解决方案
尽管您可以更改 K8s 节点上的 iptables,但我不建议您进行任何更改,因为 K8s (kube-proxy) 会不断动态地更改规则。换句话说,Kubernetes 为您管理(与覆盖相结合)管理 iptables。
为了阻止流量,我强烈建议使用NetworkPolicies。和/或如果您使用的是覆盖,您可以使用该覆盖提供的内容。例如,Calico 有自己的Network Policy
另一种控制流量输入/输出的方法是使用像Istio这样的服务网格。
推荐阅读
- c# - 试图找到第 10001 个素数,c#
- c# - 'Ref' 和 'Out' 参数的内存分配,有什么区别吗?
- mysql - Why type data "long blob" in mysql read as "int8" in data explorer MATLAB?
- javascript - Gatsby v2 项目中的缓存问题
- ibm-cloud - 在没有 procfile 的 IBM Bluemix 上部署非 Web 应用程序 (python)?
- android - Ctrl + C vs Ctrl + Z for pausing repo sync?
- r - 使用公式(而不是函数)指定 map2() 的选项
- java - 在云环境中,使用哪些技术让客户端上传要处理的文件的好方法是什么?
- mysql - 插入选择语句
- javascript - 错误类型错误:无法在 Angular 6 中读取 null 的属性“推送”