Bootstrap

k8s-NetworkPolicy

NetworkPolicy 是k8s中的网络策略可以限制pod以及namespace之间的访问流量

演示一下名称空间之间基于端口的访问限制

官方对networkpolicy的介绍

官方网址:        网络策略 |Kubernetes (简体中文)

一:创建NetworkPolicy 

vim  networkpolicy.yaml

apiVersion: networking.k8s.io/v1 
kind: NetworkPolicy  
metadata: 
  name: test-network-policy  # 策略的名称
  namespace: default  # 策略所在的命名空间
spec:  
  podSelector:  
    matchLabels: {}  # 空的标签选择器,意味着匹配default命名空间所有 Pod
  policyTypes:  
  - Ingress 
  ingress:  
  - from: 
    - namespaceSelector:  # 从特定命名空间选择器匹配的命名空间中的 Pod 允许访问
        matchLabels:  
          app: echo  
    ports:  # 定义允许访问的端口
    - protocol: TCP  
      port: 80  
    - protocol: TCP
      port: 8080

生成networkpolicy

kubectl  apply -f networkpolicy.yaml

kubectl  describe networkpolicy 

#查看详细信息,因为我的default命名空间只有一个networkpolicy,所以没指定名字

kubectl  get  networkpolicy

可以看到这个networkpolicy是限制有app=echo的名称空间中的pod只允许访问default名称空间下的所有pod的80和8080端口,其他端口不允许访问

二:创建具有app=echo的名称空间

kubectl   create  ns  test  #创建namespace可以简写ns

kubectl  label  ns test  app=echo  #给test命名空间打上app=echo的标签

kubectl  get  ns  --show-labels   #查看test命名空间的标签

三:验证

在default命名空间下创建两个pod,分别为nginx和tomcat。

nginx是80端口 tomcat是8080端口

vim  nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: default
spec:
  containers:
  - image: nginx:v1
    imagePullPolicy: IfNotPresent
    name: nginx
    ports:
    - containerPort: 80
      protocol: TCP

vim  tomcat.yaml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
  namespace: default
spec:
  containers:
  - image: tomcat:v1
    imagePullPolicy: IfNotPresent
    name: nginx
    ports:
    - containerPort: 8080
      protocol: TCP

创建出来 

kubectl  apply  -f  nginx.yaml  

kubectl  apply  -f  tomcat.yaml  

在test命名空间中创建一个pod进行访问验证

创建一个busybox

kubectl run busy-test --image=docker.io/library/busybox:1.28 --namespace=test -- /bin/sh -c "sleep 3600"

查看default命名空间下的pod ip

kubectl  get pod -owide

kubectl -n test exec -it busy-test -- /bin/sh  #进入容器内部

使用wget 来请求一下网页文件

可以看到80和8080都是可以下载到的

下面来多开两个终端进入到busybox容器里面用于下载网页文件,随后修改networkpolicy查看效果

看录屏查看效果

k8s-networkpolicy

这个测试方式就是上面的两个终端分别下载nginx和tomcat的网页文件

下面那个终端用于动态修改网络策略:第一次是取消掉了8080端口也就是tomcat的端口,可以发现tomcat的网页不被持续下载了,第二次我们又取消掉了nginx的80端口之后nginx的网页文件也不被下载了,第三次我们又恢复了80端口,可以看到nginx的网页文件又重新被下载了

;