版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhonglinzhang/article/details/85252962
默认 Pod 是未隔离的,它们可以从任何的源接收请求。Pod 的使用网络策略后,Pod 就会变成隔离的。 一旦 Namespace 中配置的网络策略能够选择一个特定的 Pod,这个 Pod 将拒绝任何该网络策略不允许的连接。(Namespace 中其它未被网络策略选中的 Pod 将继续接收所有流量)
默认情况下,每个Pod之间是可以相互访问的。但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制
前提
需要有一个支持网络策略的 Kubernetes 集群。支持 NetworkPolicy 的网络如下:
- Calico
- Romana
- Weave 网络
测试例子
1. 创建nginx deployment并将服务暴露
kubectl run nginx --image=nginx --replicas=2
kubectl expose deployment nginx --port=80
2. 测试服务能够被其它的 pod 访问
与nginx的80通
3. 添加networkpolicy限制访问 nginx 服务
kubectl apply -f
拥有标签 access: true 的 pod 可以访问
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
run: nginx
ingress:
- from:
- podSelector:
matchLabels:
access: "true"
4. 当访问标签没有定义时测试访问服务
[root@httpserver-7777-845f5fd9c8-7tpw6 /]# curl nginx:80
curl: (7) Failed connect to nginx:80; Connection timed out