# 官方提供@yunTaoScripts 网络策略 与 软件签名 🔥🔥
默认在没有网络策略限制的时候,所有命名空间的网络是可以互相访问的。网络策略可以理解为防火墙,增加访问限制。
注意‼️
- 网络策略只能保护同一命名空间的pod,而不能保护其他命名空间的pod。
- 确认好是入流量还是出流量。
- pod1 和 pod2 处于同一命名空间,pod3属于单独命名空间。
root@vms33:~/networkpolicy# kubectl get pod -A -owide|grep -v system
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default pod3 1/1 Running 0 6m55s 10.244.194.137 vms34.rhce.cc
netpolicy pod1 1/1 Running 0 50m 10.244.194.135 vms34.rhce.cc
netpolicy pod2 1/1 Running 0 49m 10.244.194.136 vms34.rhce.cc
root@vms33:~/networkpolicy#
- 给pod1和pod2 增加svc
root@vms33:~/networkpolicy# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
pod1 LoadBalancer 10.96.23.136 192.168.26.240 80:32025/TCP 29m
pod2 LoadBalancer 10.99.226.99 192.168.26.241 80:31535/TCP 18m
- 在没有网络策略时,pod3 可以随意访问 pod1 pod2。
root@vms33:~/networkpolicy# kubectl -n default exec -it pod3 -- curl 192.168.26.240
<h1>Welcome to Pod1!</h1>
root@vms33:~/networkpolicy# kubectl -n default exec -it pod3 -- curl 192.168.26.241
<h1>Welcome to Pod2!</h1>
# 网路策略解释
# 入策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default ##不写默认当前命名空间。
spec:
podSelector: ##podSelector:{} 表示保护匹配所有pod
matchLabels:
role: db ##不写这行表示,表示也可以匹配所有pod。 ## 如果希望保护匹配多个pod,就给多个pod打上相同标签。
policyTypes:
- Ingress ##确认入流量还是出流量。
ingress: ##表示哪些pod可以访问。
- from: ##写多个from 就可以创建多条策略。
- ipBlock: ##满足以下任意一条规则,都可以访问。
cidr: 172.17.0.0/16 ##运行访问的IP地址段
except:
- 172.17.1.0/24 ##禁止访问的IP地址
- namespaceSelector: ##只允许含有标签的命名空间可以访问 ##namespaceSelector: {} 允许所有命名空间
matchLabels:
project: myproject ## 不写这行允许所有命名空间访问。但是集群外的主机不可以,因为没有命名空间的概念。写了这行就只能有特定标签的ns 可以访问。
- podSelector: ##注意只能是网络策略所在命名空间的pod ##podSelector:{} 表示保护匹配当前命名空间所有pod
matchLabels:
role: frontend ## 这行不写,也表示当前命名空间所有pod。
ports: ##不写端口这一段 默认可以访问所有端口。
- protocol: TCP ##写了端口,只能访问该端口。
port: 6379
允许所有命名空间,含有特定标签的pod访问。
- namespaceSelector: {} #允许所有命名空间,含有特定标签的pod访问。
podSelector:
matchLabels:
role: frontend
# 出策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Engress
engress:
- to:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector: ## 不写两个横行,代表和的意思
matchLabels: ## 匹配myproject 项目的 frontend 的pod
project: myproject
podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
总结
- 所有没写策略的情况下,所有流量默认代表允许。
- 所有写策略的情况下,没有明确允许的流量,代表拒绝 ❌。
# 修改默认策略
最初都是默认允许所有流量
# 修改为默认拒绝所有出入流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress ##拒绝入流量
- Egress ##拒绝出流量
# 允许出入流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress ## 允许出流量
- Igress ## 允许入流量
允许和拒绝优先级
同时生效上述两条策略,允许策略优先级更高 。
# 校验软件是否被篡改
- 通过哈希函数比较
root@vms33:~# sha512sum .profile
12dd3d49d0b7516c811868a01431b9d9cbbde5c4d1ff867d2bd6d9ab9a09ad2fee7c0ca42bd80b1f1a4dee94c602a9e9188036a79257e7dd6f376a42f0685cc5 .profile
root@vms33:~#
- uniq 检测两行区别
root@vms33:~/networkpolicy# cat txt
111
111
111
111
111
2222
3333
22
3333
root@vms33:~/networkpolicy# cat txt |uniq
111
2222
3333
22
3333
← 快速链接