Kubernetes NetworkPolicy的应用
文章目录一、前言二、K8S网络类型的更改1. 查看当前集群的网络类型2. 更改网络类型三、部署calico网络1. 下载calico网络需要用到的镜像2.下载calico网络的yaml部署文件一、前言NetworkPolicy(网络策略)是基于网络插件来实现的,默认情况下,整个集群中所有的pod都是可以互通的,但是针对一些特殊的需求,我们就需要用网络策略来对相应的pod做出隔离。NetworkPo
·
文章目录
一、前言
NetworkPolicy(网络策略)是基于网络插件来实现的,默认情况下,整个集群中所有的pod都是可以互通的,但是针对一些特殊的需求,我们就需要用网络策略来对相应的pod做出隔离。NetworkPolicy依赖于网络插件,但不是所有的网络插件都支持网络策略,比如:calico支持网络策略,而flannel不支持。
二、K8S网络类型的更改
1. 查看当前集群的网络类型
[root@master ~]# cat /etc/cni/net.d/10-flannel.conflist
{
"name": "cbr0",
"cniVersion": "0.3.1",
"plugins": [
{ #类型为flannel 不支持网络策略需更改
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
2. 更改网络类型
卸载flannel(使用最开始创建的yaml文件)
[root@master ~]# kubectl delete -f /home/yaml/flannel/kube-flannel.yaml
podsecuritypolicy.policy "psp.flannel.unprivileged" deleted
clusterrole.rbac.authorization.k8s.io "flannel" deleted
clusterrolebinding.rbac.authorization.k8s.io "flannel" deleted
serviceaccount "flannel" deleted
configmap "kube-flannel-cfg" deleted
daemonset.apps "kube-flannel-ds" deleted
删除网卡(master节点和node节点都要执行)
[root@master ~]# ip link delete cni0
[root@master ~]# ip link delete flannel.1
三、部署calico网络
1. 下载calico网络需要用到的镜像
[root@master ~]# docker pull docker.io/calico/cni:v3.21.1
[root@master ~]# docker pull docker.io/calico/pod2daemon-flexvol:v3.21.1
[root@master ~]# docker pull docker.io/calico/node:v3.21.1
[root@master ~]# docker pull docker.io/calico/kube-controllers:v3.21.1
2. 下载calico网络的yaml部署文件
[root@master ~]# wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
查看镜像是否正确
[root@master ~]# cat calico.yaml | grep image
image: docker.io/calico/cni:v3.21.1
image: docker.io/calico/cni:v3.21.1
image: docker.io/calico/pod2daemon-flexvol:v3.21.1
image: docker.io/calico/node:v3.21.1
image: docker.io/calico/kube-controllers:v3.21.1
部署calico网络
[root@master ~]# kubectl apply -f calico.yaml
查看pod是否正常运行
[root@master ~]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-77ff9c69dd-gpdj7 1/1 Running 0 28m
kube-system calico-node-8glhl 1/1 Running 0 28m
kube-system calico-node-8sjj2 1/1 Running 0 28m
四、NetworkPolicy的应用
1. NetworkPolicy资源示例
[root@master ~]# vi networkpolicy.yaml
apiVersion: networking.k8s.io/v1 #版本信息
kind: NetworkPolicy #资源名称
metadata:#元数据信息
name: network-policy
namespace: default #名称空间
spec:
podSelector: #选择做策略的pod
matchLabels: #通过标签来进行选择
app: busybox1
policyTypes:#设置策略类型为进站或者出战
- Ingress
- Egress
ingress:#设置进站规则白名单(没写该规则表示拒绝所有)
- from:
- ipBlock: #通过网段来进行匹配
cidr: 10.244.0.0/16 #设置网段或者主机
except: #设置不能够访问的主机
- 10.244.1.0/24
- namespaceSelector: #通过名称空间来匹配
matchLabels: #通过名称空间标签来进行选择
project: ns#该名称空间下所有pod都可以访问
- podSelector:#通过pod标签来匹配,只能够匹配当前名称空间下的
matchLabels:
app: busyboxy-admin
ports:#端口规则匹配
- port: 80 #只能够访问该pod的80端口
protocol: TCP#使用的协议为TCP
egress:#设置出战规则白名单(没写该规则表示拒绝所有)
- to:
- ipBlock:#设置该pod对外请求的网段
cidr: 10.244.0.0/24
ports:#对外请求的端口
- port: 80
protocol: TCP
2. 允许所有入站和出站的流量
可以根据需要进行设置 这里只是展示怎样写
[root@master ~]# vi allow.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- {}
egress:
- {}
3. 拒绝所有入站和出战的流量
[root@master ~]# vi deny.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
更多推荐
已为社区贡献5条内容
所有评论(0)