我在 Kubernetes 集群上运行 canal CNI,需要阻止命名空间间通信。因此,每次创建新命名空间时,我都需要创建一个默认的拒绝网络策略。
我可以从 Kubernetes 外部执行此操作。即 cron bash 脚本或 ansible playbook,获取集群中的所有命名空间,并对每个存在的命名空间应用此默认拒绝。但这感觉不太干净。
Rancher 可以创建阻止项目间通信的策略,但这并不能完全满足我的用例。如果命名空间 A 和命名空间 B 属于同一个项目,则这些命名空间内的 pod 将能够相互通信。
是否有任何插件、附加组件、CRD 或可变 webhook 可以帮助实现此目的?我搜索了几次,但没有找到任何具体信息。
答案1
据我所知,Kubernetes 不提供此功能。
解决这个问题的一种方法是编写自己的操作符 - 使用 operator-sdk 可以很容易地做到这一点。我曾经编写过一个用于监视命名空间资源/无 CRD(在我无法再访问的私有 Git 上)的操作符。我看到其他人引入了 CRD [1],这可以提供更大的灵活性。
使用一些准入控制器也可以达到同样的效果[2]。
同时,OKD / OpenShift 提供了一些“默认项目模板”,您可以编辑添加自己的对象,更改授予请求创建该项目的用户的默认角色绑定/权限。
类似主题@SO: