首先我想说下Calico是支持同namespace下pod的隔离的,namespace对应kubesphere中则为“项目”,在项目中可以开启“网络隔离”,开启后会在集群中默认创建一个网络策略-即开启了项目隔离,但同项目中的pod可以随意访问,这个在客户环境中是不允许的,需要做到细颗粒度控制-即同一项目下pod间的隔离。如何实现尼?我尝试了很多次,发现是可以实现的。
那就是不开启项目隔离,直接编写网络策略,如下:

这样就隔离了项目kubesphere-sample-dev中所有pod的通信,然后再单独添加一个策略,比如:

只开放kubesphere-sample-dev中带有标签app: nginx-v1入口访问流量,而且只能是带有标签为app:nginx-v2的pod才能访问,nginx-v1和nginx-v2两个pod在同一项目下。
问题来了,我开启项目隔离后,有一条默认策略:

开启网络隔离

这条策略则开启了同一项目中pod间访问不受限制,相当于前面设置的pod间隔离策略自动失效,即使能改默认策略,但过会自动又刷新了。
这有点不符合常理,开启项目隔离反而把权限都开放,无法做到细颗粒的控制,想要细颗粒度控制就得把网络隔离关了,自己编写网络策略。
我认为既然集成了Calico,就应该把服务,pod,端口的隔离都能够通过kubesphere图像界面实现,而不是手动编写yaml文件,这个是否后续会有改进?
另外创建的策略不能修改,只能删除重来。。。
@Feynman

是的, k8s的网络策略是白名单模式, 匹配其中一个就放行了,所以要实现你的需求,后续得考虑加上黑名单。

3 年 后

不同企业空间下的项目隔离后,无法配置放通企业空间下各个项目相互访问白名单,在网络隔离功能模块哪里,这是一个很大的缺陷,ks3.3.2版本

15 天 后