flannel最大弊端就是没有网络策略,为了弥补这个弊端今天我们来说说cannel。cannel是flannel和calicod结合体,cannel规则和iptable类似也把一个资源分为出站和入站来分别控制。如果要限制namespace中的Pod访问就要在出站处写规则,如果要限制namespace中的Pod提供的服务就要在入站处写规则。
NetworkPolicy
cannel下载:
curl https://docs.projectcalico.org/v3.7/manifests/canal.yaml -O
#下载yaml文件
kubectl apply -f canal.yaml
#部署
入站规则例子:
拒绝其他namespace访问:
apiVesion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: tmp-net-po #只里不写namespace需要在部署的时候指定namespace
spec:
podSelector: {} #没有指定pod则表示该namespace中的全部Pod
policyTypes: #指定启动出站规则或入站
- Ingress
允许指定IP访问服务:
apiVesion: networking.k8s.io/v1
kind: NetwordPolicy
metadata:
name: tmp-net-po2
spec:
podSelector:
matchLaels:
app: nginx #对有app:nginx标签的Pod做策略
ingress:
- from:
- ipBlock:
cidr: 192.168.1.0/24 #允许192.168.1.0/24网段访问
except:
- 192.168.1.11/32 #拒绝192.168.1.11主机服务
ports:
- protocol: TCP
port: 80
出站:
出站和入站写法差不多只是把Ingress改成Engress就可以了。