ubernetes提供了namesapce,用来做多租户隔离,但是如果不配置网络策略,namespace的隔离也仅仅是作用于在kubernetes编排调度时的隔离,实际上不同namespace下的pod还是可以相互串通的。此时就需要使用Kubernetes提供的networkPolicy,用于隔离不同租户的应用并减少攻击面。networkpolicy通过标签选择器来模拟传统的网络物理隔离,并通过不同的策略完成访问方向的管控。
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网段访问策略后,外网访问可成功
原文:https://www.cnblogs.com/gaoyuechen/p/14864380.html