# 官方提供@yunTaoScripts 网络策略 与 软件签名 🔥🔥

loading

默认在没有网络策略限制的时候,所有命名空间的网络是可以互相访问的。网络策略可以理解为防火墙,增加访问限制。

注意‼️

  1. 网络策略只能保护同一命名空间的pod,而不能保护其他命名空间的pod。
  2. 确认好是入流量还是出流量。
  • 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

总结

  1. 所有没写策略的情况下,所有流量默认代表允许。
  2. 所有写策略的情况下,没有明确允许的流量,代表拒绝 ❌。

# 修改默认策略

最初都是默认允许所有流量

# 修改为默认拒绝所有出入流量

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