实战:k8s中网络策略实验(成功测试-博客输出)-20211005
目录
文章目录
- 目录
- 写在前面
- 基础知识
- 实验环境
- 原课件内容
- 1、案例1:拒绝其他命名空间Pod访问
- 2、案例2:同一个命名空间下应用之间限制访问
- 3、案例3:只允许指定命名空间中的应用访问
- 总结
写在前面
本文,我将带你实战演示k8s中网络策略实验。
我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!
各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:
个人微信二维码:x2675263825 (舍得), qq:2675263825。
个人博客地址:www.onlyonexl.cn
个人微信公众号:云原生架构师实战
个人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相关推荐
- 实战:k8s中基于角色的权限访问控制-RBAC(成功测试-博客输出)-20211005
目录 文章目录 目录 写在前面 基础知识介绍 实验环境 实验软件 老师原课件内容 1..用K8S CA签发客户端证书 2. 生成kubeconfig授权文件 3. 创建RBAC权限策略 4.指定kub ...
- TS:linux根分区满了如何处理,查找大文件方法(成功测试-博客输出)-2022.2.11
TS:linux根分区满了如何处理,查找大文件方法(成功测试-博客输出)-2022.2.11 目录 文章目录 TS:linux根分区满了如何处理,查找大文件方法(成功测试-博客输出)-2022.2.1 ...
- 实战:部署一套完整的企业级高可用K8s集群(成功测试-博客输出)-20211019
目录 文章目录 目录 实验环境 实验软件 一.基础环境配置**(all节点均要配置)** 二.部署Nginx+Keepalived高可用负载均衡器**(只需在2个master节点配置即可)** 1.安 ...
- [文摘20070914]一个成功的博客必须知道的80个博客工具
不管你的博客流量大小与否,不管你的博客主题是什么,只要你想成为一个成功的博客,下面的博客工具肯定会对你有所帮助. 一般的博客工具: Backupmyblog:自动备份你的博客数据,只对于mysql数据 ...
- 有关网页抓取问题的一些经验总结 - passover【毕成功的博客】 - 51CTO技术博客
有关网页抓取问题的一些经验总结 - passover[毕成功的博客] - 51CTO技术博客 有关网页抓取问题的一些经验总结 2011-05-05 18:07:38 标签:爬虫 网页抓取 在写爬虫的时 ...
- 首个测试博客搜索引擎等你来体验!
我已经深深厌恶在多个测试博客网站来回切换看各种文章了,不知道你是否也是如此呢?所以我研究了一下开源爬虫WebCollector,并对其进行了改造以满足我的需求,可以轻松添加站点来爬取其页面内容,以后再 ...
- 北京地铁规划图_测试博客撰写增加图片的办法
测试博客撰写增加图片的办法
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客...
Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover[毕成功的博客] - 51CTO技术博客
- java输出当前时间_JAVA中获取当前系统时间 - Matrix54 - 博客园
JAVA中获取当前系统时间 - Matrix54 - 博客园 一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleD ...
最新文章
- linux系统安装后优化
- 基于AcrGIS平台实现三维场景下的积水效果动态模拟
- idea启动webservice_idea使用springboot的webservice基于cxf
- 160 - 40 DaNiEl-RJ.1
- 学分绩点计算编程java_方便我们计算学分绩点的JavaScript
- 6999元!红魔6S Pro推出战地迷彩主题限定套装:11月1日正式开售
- js 去除空格回车换行
- MT4系统自带指标代码
- dubbo面试题-dubbo源码解析
- C#开源代码Newbeecoder.UI控件库极力推荐
- VMware网络配置基础
- 服务器稳定时间,NTP时钟服务器网络时间服务器哪个更好呀?
- 笔记本电脑计算机的配置表,笔记本组装配置清单_笔记本电脑配置单及价格
- 学c语言推荐哪种笔记本电脑,哪款笔记本适合大学生 推荐学生党笔记本电脑
- vue控件a-date-picker设置默认值的方式以及注意事项
- 优秀的 Verilog/FPGA开源项目介绍(二十一)- 卷积神经网络(CNN)
- 我确实不知道如何使用计算机翻译,新视野大学英语4课后翻译
- VR虚拟现实技术类毕业论文文献都有哪些?
- win7安装解压版mysql_win7安装解压缩版mysql 5.7.19和卸载后重新安装
- 小程序真正实现多个文件上传,不通过循环调用uni.uploadFile