目录

文章目录

  • 目录
  • 写在前面
  • 基础知识
  • 实验环境
  • 原课件内容
  • 1、案例1:拒绝其他命名空间Pod访问
  • 2、案例2:同一个命名空间下应用之间限制访问
  • 3、案例3:只允许指定命名空间中的应用访问
  • 总结

写在前面

本文,我将带你实战演示k8s中网络策略实验。

我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!

各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:

  1. 个人微信二维码:x2675263825 (舍得), qq:2675263825。

  2. 个人博客地址:www.onlyonexl.cn

  3. 个人微信公众号:云原生架构师实战

  4. 个人csdn

    https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

基础知识

实验环境

实验环境:
1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点k8s version:v1.21CONTAINER-RUNTIME:docker://20.10.7

原课件内容

网络策略:案例案例1:拒绝其他命名空间Pod访问
案例2:同一个命名空间下应用之间限制访问
案例3:只允许指定命名空间中的应用访问附:准备环境快捷命令
kubectl run busybox --image=busybox -n test -- sleep 12h
kubectl run web --image=nginx -n test
kubectl exec busybox -n test -- ping 10.244.169.135

1、案例1:拒绝其他命名空间Pod访问

案例1:拒绝其他命名空间Pod访问需求:test命名空间下所有pod可以互相访问,也可以访问其他命
名空间Pod,但其他命名空间不能访问test命名空间Pod。apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-namespaces namespace: test
spec:podSelector: {} # 未配置,匹配本命名空间所有podpolicyTypes:- Ingressingress:- from:- podSelector: {} # 未配置,匹配本命名空间所有pod#说明
一般情况,我们配置的ingress规则会多些,而出规则egress很少去配置的;

准备测试环境:

先创建下test命名空间:

[root@k8s-master ~]#kubectl create ns test
namespace/test created

再创建2个pod:

[root@k8s-master np]#kubectl run web --image=nginx -n test
pod/web created
[root@k8s-master ~]#kubectl run busybox --image=busybox -n test -- sleep 24h
pod/busybox created#查看
[root@k8s-master ~]#kubectl get pod -n test
NAME                  READY   STATUS    RESTARTS   AGE
busybox               1/1     Running   0          9s
web-96d5df5c8-7r6w6   1/1     Running   0          3m11s
[root@k8s-master ~]#kubectl get pod -n test -o wide
NAME      READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
busybox   1/1     Running   0          21h     10.244.169.148   k8s-node2   <none>           <none>
web       1/1     Running   0          7h26m   10.244.169.151   k8s-node2   <none>           <none>#默认情况下,`Kubernetes 集群网络没任何网络限制,Pod 可以与任何其他 Pod 通信`
[root@k8s-master ~]#kubectl exec busybox -n test -- ping 10.244.169.151
PING 10.244.169.151 (10.244.169.151): 56 data bytes
64 bytes from 10.244.169.151: seq=0 ttl=63 time=0.283 ms
64 bytes from 10.244.169.151: seq=1 ttl=63 time=0.126 ms
^C
[root@k8s-master ~]#

我们再次在默认命名空间下创建一个pod,并测试不同命名空间下的pod是否可以进行通信:=>是可以通信的

[root@k8s-master ~]#kubectl run busybox --image=busybox -- sleep 24h[root@k8s-master ~]#kubectl get pod -o wide
[root@k8s-master ~]#kubectl get pod -o wide -n test
[root@k8s-master ~]#kubectl exec busybox -- ping 10.244.169.157

现在进行按题目需求进行限制:

拒绝其他命名空间Pod访问
需求:test命名空间下所有pod可以互相访问,也可以访问其他命名空间Pod,但其他命名空间不能访问test命名空间Pod。
创建np目录:

[root@k8s-master ~]#mkdir np
[root@k8s-master ~]#cd np/
[root@k8s-master np]#vim deny-all-namespaces.yaml #配置yaml,这就是所谓的白名单
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-namespaces namespace: test
spec:podSelector: {} # 未配置,匹配本命名空间所有podpolicyTypes:- Ingressingress:- from:- podSelector: {} # 未配置,匹配本命名空间所有pod

apply并测试效果:=>完全符合预期效果。

 #apply下[root@k8s-master np]#kubectl apply -f deny-all-namespaces.yaml
networkpolicy.networking.k8s.io/deny-all-namespaces created#验证效果
[root@k8s-master np]#kubectl exec busybox -- ping 10.244.169.157 #做了网络策略限制后,从默认命名空间下不能ping通test命名空间下的web pod了。
^C#但在test下不同pod是依然可以访问的
[root@k8s-master np]#kubectl exec busybox -n test -- ping 10.244.169.157
PING 10.244.169.157 (10.244.169.157): 56 data bytes
64 bytes from 10.244.169.157: seq=0 ttl=63 time=0.245 ms
64 bytes from 10.244.169.157: seq=1 ttl=63 time=0.307 ms
^C#test命名空间下也是可以直接访问外网的;
[root@k8s-master np]#kubectl exec busybox -n test -- ping www.baidu.com
PING www.baidu.com (180.101.49.11): 56 data bytes
64 bytes from 180.101.49.11: seq=0 ttl=127 time=12.591 ms
64 bytes from 180.101.49.11: seq=1 ttl=127 time=9.736 ms
^C
[root@k8s-master np]##至此,案例1测试成功!

2、案例2:同一个命名空间下应用之间限制访问

案例2:同一个命名空间下应用之间限制访问需求:将test命名空间携带run=web标签的Pod隔离,只允许test
命名空间携带run=client1标签的Pod访问80端口。apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: app-to-appnamespace: test
spec:podSelector:matchLabels:run: webpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:run: client1ports:- protocol: TCPport: 80

我们这边做测试时,先把上面的网络策略规则给删除掉:

[root@k8s-master ~]#cd np
[root@k8s-master np]#kubectl delete -f deny-all-namespaces.yaml
networkpolicy.networking.k8s.io "deny-all-namespaces" deleted
[root@k8s-master np]#

创建2个test命名空间下的不同label的测试pod:

[root@k8s-master np]#kubectl get pod -n test --show-labels
NAME      READY   STATUS    RESTARTS   AGE   LABELS
busybox   1/1     Running   1          22h   run=busybox
web       1/1     Running   1          8h    run=web[root@k8s-master np]#kubectl run  client1 -l run=client1 --image=busybox -n test -- sleep 12h
pod/client1 created
[root@k8s-master np]#kubectl run  client2 -l run=client2 --image=busybox -n test -- sleep 12h
pod/client2 created[root@k8s-master np]#kubectl get pod -n test --show-labels
NAME      READY   STATUS    RESTARTS   AGE   LABELS
busybox   1/1     Running   1          22h   run=busybox
client1   1/1     Running   0          33s   run=client1
client2   1/1     Running   0          20s   run=client2
web       1/1     Running   1          8h    run=web
[root@k8s-master np]#

配置前测试:默认同一个命名空间下的pod都是可以直接访问的:

现在开始配置网络策略:

[root@k8s-master np]#vim app-to-app.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: app-to-appnamespace: test
spec:podSelector:matchLabels:run: webpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:run: client1ports:- protocol: TCPport: 80
[root@k8s-master np]#kubectl apply -f app-to-app.yaml
networkpolicy.networking.k8s.io/app-to-app created

测试失效效果:=>符合预期。

至此,案例2实验完成。

3、案例3:只允许指定命名空间中的应用访问

案例3:只允许指定命名空间中的应用访问需求:只允许dev命名空间中的Pod访问test命名空间中的pod 80端口
命名空间打标签: kubectl label namespace dev name=dev

删除原来网络策略:

[root@k8s-master np]#kubectl delete -f app-to-app.yaml
networkpolicy.networking.k8s.io "app-to-app" deleted

创建dev命名空间:

[root@k8s-master np]#kubectl create ns dev
namespace/dev created

在dev命名空间里创建测试pod:

[root@k8s-master np]#kubectl run busybox --image=busybox -n dev -- sleep 12h
pod/busybox created
[root@k8s-master np]#

给命名空间打label:

[root@k8s-master np]#kubectl label namespaces dev name=dev
namespace/dev labeled
[root@k8s-master np]#kubectl get ns --show-labels
NAME                   STATUS   AGE     LABELS
default                Active   34d     <none>
dev                    Active   3m25s   name=dev
kube-node-lease        Active   34d     <none>
kube-public            Active   34d     <none>
kube-system            Active   34d     <none>
kubernetes-dashboard   Active   33d     <none>
test                   Active   23h     <none>
[root@k8s-master np]#

配置网络策略:

[root@k8s-master np]#vim allow-port-from-namespace.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-port-from-namespacenamespace: test
spec:podSelector: {} policyTypes:- Ingressingress:- from:- namespaceSelector: # 匹配命名空间标签matchLabels:name: devports:- protocol: TCPport: 80[root@k8s-master np]#kubectl apply -f allow-port-from-namespace.yaml
networkpolicy.networking.k8s.io/allow-port-from-namespace created
[root@k8s-master np]#

测试效果:=>符合预期效果。

总结

​ 好了,关于k8s中网络策略实验实验就到这里了,感谢大家阅读,最后贴上我的美圆photo一张,祝大家生活快乐,每天都过的有意义哦,我们下期见!

实战:k8s中网络策略实验(成功测试-博客输出)-20211005相关推荐

  1. 实战:k8s中基于角色的权限访问控制-RBAC(成功测试-博客输出)-20211005

    目录 文章目录 目录 写在前面 基础知识介绍 实验环境 实验软件 老师原课件内容 1..用K8S CA签发客户端证书 2. 生成kubeconfig授权文件 3. 创建RBAC权限策略 4.指定kub ...

  2. TS:linux根分区满了如何处理,查找大文件方法(成功测试-博客输出)-2022.2.11

    TS:linux根分区满了如何处理,查找大文件方法(成功测试-博客输出)-2022.2.11 目录 文章目录 TS:linux根分区满了如何处理,查找大文件方法(成功测试-博客输出)-2022.2.1 ...

  3. 实战:部署一套完整的企业级高可用K8s集群(成功测试-博客输出)-20211019

    目录 文章目录 目录 实验环境 实验软件 一.基础环境配置**(all节点均要配置)** 二.部署Nginx+Keepalived高可用负载均衡器**(只需在2个master节点配置即可)** 1.安 ...

  4. [文摘20070914]一个成功的博客必须知道的80个博客工具

    不管你的博客流量大小与否,不管你的博客主题是什么,只要你想成为一个成功的博客,下面的博客工具肯定会对你有所帮助. 一般的博客工具: Backupmyblog:自动备份你的博客数据,只对于mysql数据 ...

  5. 有关网页抓取问题的一些经验总结 - passover【毕成功的博客】 - 51CTO技术博客

    有关网页抓取问题的一些经验总结 - passover[毕成功的博客] - 51CTO技术博客 有关网页抓取问题的一些经验总结 2011-05-05 18:07:38 标签:爬虫 网页抓取 在写爬虫的时 ...

  6. 首个测试博客搜索引擎等你来体验!

    我已经深深厌恶在多个测试博客网站来回切换看各种文章了,不知道你是否也是如此呢?所以我研究了一下开源爬虫WebCollector,并对其进行了改造以满足我的需求,可以轻松添加站点来爬取其页面内容,以后再 ...

  7. 北京地铁规划图_测试博客撰写增加图片的办法

    测试博客撰写增加图片的办法

  8. Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客...

    Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover[毕成功的博客] - 51CTO技术博客

  9. java输出当前时间_JAVA中获取当前系统时间 - Matrix54 - 博客园

    JAVA中获取当前系统时间 - Matrix54 - 博客园 一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleD ...

最新文章

  1. linux系统安装后优化
  2. 基于AcrGIS平台实现三维场景下的积水效果动态模拟
  3. idea启动webservice_idea使用springboot的webservice基于cxf
  4. 160 - 40 DaNiEl-RJ.1
  5. 学分绩点计算编程java_方便我们计算学分绩点的JavaScript
  6. 6999元!红魔6S Pro推出战地迷彩主题限定套装:11月1日正式开售
  7. js 去除空格回车换行
  8. MT4系统自带指标代码
  9. dubbo面试题-dubbo源码解析
  10. C#开源代码Newbeecoder.UI控件库极力推荐
  11. VMware网络配置基础
  12. 服务器稳定时间,NTP时钟服务器网络时间服务器哪个更好呀?
  13. 笔记本电脑计算机的配置表,笔记本组装配置清单_笔记本电脑配置单及价格
  14. 学c语言推荐哪种笔记本电脑,哪款笔记本适合大学生 推荐学生党笔记本电脑
  15. vue控件a-date-picker设置默认值的方式以及注意事项
  16. 优秀的 Verilog/FPGA开源项目介绍(二十一)- 卷积神经网络(CNN)
  17. 我确实不知道如何使用计算机翻译,新视野大学英语4课后翻译
  18. VR虚拟现实技术类毕业论文文献都有哪些?
  19. win7安装解压版mysql_win7安装解压缩版mysql 5.7.19和卸载后重新安装
  20. 小程序真正实现多个文件上传,不通过循环调用uni.uploadFile

热门文章

  1. Linux运维之网络的配置,四种ip方式的设定,网关,dns的设定及物理机的网络连接
  2. Unity和Autodesk:通过更高效的工作流程提供沉浸式体验
  3. Android - Broadcast
  4. BIM在工程中的20种典型功能
  5. php图片上传存储源码,可实现预览
  6. vue2和vue3的区别
  7. 【Apple Music如何开通学生会员:使用学校邮箱辅助验证】
  8. 【26个字母和数字符号ASCII码对照表】
  9. 大数据揭秘《都挺好》:比起樊胜美 女性更想当苏明玉
  10. ArcGis加载天地图山东WMTS服务