calico
kubernetes提供了namesapce,用来做多租户隔离,但是如果不配置网络策略,namespace的隔离也仅仅是作用于在kubernetes编排调度时的隔离,实际上不同namespace下的pod还是可以相互串通的。此时就需要使用Kubernetes提供的networkPolicy,用于隔离不同租户的应用并减少攻击面。networkpolicy通过标签选择器来模拟传统的网络物理隔离,并通过不同的策略完成访问方向的管控。
环境
- Kubernetes 1.10.2
- Calico 3.1.0
步骤
calico 预先已部署完毕,参考官网即可,没有特殊配置
(下述代码中类似的均只写一份)
-
创建两个namespace: test1-ns test2-ns
test1-ns.yml
apiVersion:v1
kind: Namespace
metadata:
name: test1-ns
labels:
project: test1-ns
-
分别在两个namespace下创建pod: test1.yml test2.yml
test1.yml
apiVersion: apps/v1beta1 kind: Deployment metadata: name: test1 namespace: test1-ns spec: replicas: 1 selector: matchLabels: app: test1 template: metadata: name: test1 labels: app: test1 project: test1-ns spec: containers: - name: test1 image: hub.xxxxxxxx.com.cn/private/caiyt/hello:1.0.0 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: test1 namespace: test1-ns spec: selector: app: test1 type: NodePort ports: - name: test1-http port: 8080 targetPort: 8080 nodePort: 30451
测试互访

互访测试
目前可以看到,test1和test2是可以互相连通的
创建networkPolicy.yml
apiVersion: networking.k8s.io/v1
metadata:
name: test
namespace: test1-ns
spec:
podSelector:
matchLabels:
project: test1-ns
ingress:
- from:
- namespaceSelector:
matchLabels:
project: test1-ns
测试联通性

添加策略后的互访
因为针对test1的namespace做了策略限制,可见到由其他的命名空间中的pod无法访问test1-ns中的pod,但是反向即可。
外网访问测试
- ipBlock:
cidr: 10.20.1.0/24
添加calico所创建tunl0@NONE网段访问策略后,外网访问可成功

时来天地皆同力,运去英雄不自由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-06-08 ImportError: No module named mysql 报错python引用mysql报错