networkpolicy用来控制pod与pod之间的网络通信,它也支持针对namespace进行限制。基于白名单模式,符合规则的对象通过,不符合的拒绝。 应用场景举例:
pod a不能访问pod b;
开发环境所有pod不能访问测试命名空间;
提供对外访问时,限制外部ip;
官方networkpolicy yaml示例:
apiversion: networking.k8s.io/v1kind: networkpolicymetadata: name: test-network-policy namespace: defaultspec: podselector: matchlabels: role: db policytypes: - ingress - egress ingress: - from: - ipblock: cidr: 172.17.0.0/16 except: - 172.17.1.0/24 - namespaceselector: matchlabels: project: myproject - podselector: matchlabels: role: frontend ports: - protocol: tcp port: 6379 egress: - to: - ipblock: cidr: 10.0.0.0/24 ports: - protocol: tcp port: 5978 说明:必需字段:apiversion、 kind 和 metadata 字段。
podselector:定义目标pod的匹配标签,即哪些pod会生效此策略;
policytypes:表示给定的策略是应用于目标pod的入站流量(ingress)还是出站流量(egress),或两者兼有。如果networkpolicy未指定policytypes则默认情况下始终设置ingress。
ingress:定义入流量限制规则,from用来定义白名单对象,比如网段、命名空间、pod标签,ports定义目标端口。
egress:定义出流量限制规则,定义可以访问哪些ip和端口
案例一: 需求:aming命名空间下所有pod可以互相访问,也可以访问其他命名空间pod,但其他命名空间不能访问aming命名空间pod。 首先创建几个pod:
kubectl run busybox --image=busybox -- sleep 3600 ## default命名空间里创建busybox podkubectl run busybox --image=busybox -n aming -- sleep 3600 ## aming命名空间里创建busybox podkubectl run web --image=nginx:1.23.2 -n aming ## aming命名空间里创建web pod 在没有创建networkpolicy的情况下测试 kubectl exec busybox -n aming -- ping 10.18.235.161 ##aming命名空间的busybox ping default命名空间的busybox ip kubectl exec busybox -n aming -- ping 10.18.235.162 ##aming命名空间的busybox ping aming命名空间的web ipkubectl exec busybox -- ping 10.18.235.162 ##default命名空间的busybox ping aming命名空间的web ip 创建networkpolicy的yaml vi deny-all-namespaces.yaml ##内容如下apiversion: networking.k8s.io/v1kind: networkpolicymetadata: name: deny-all-namespaces namespace: amingspec: podselector: {} # 为空,表示匹配本命名空间所有pod policytypes: - ingress ingress: - from: - podselector: {} # 为空,表示匹配该命名空间所有pod,即允许该命名空间所有pod访问,没有定义namespaceselector,也就是说不允许其它namespace的pod访问。 应用yamlkubectl apply -f deny-all-namespaces.yaml 测试: kubectl exec busybox -n aming -- ping 10.18.235.161 ##aming命名空间的busybox ping default命名空间的busybox ipkubectl exec busybox -n aming -- ping 10.18.235.162 ##aming命名空间的busybox ping aming命名空间的web ipkubectl exec busybox -- ping 10.18.235.162 ##default命名空间的busybox ping aming命名空间的web ip 将刚刚创建的所有资源删除: kubectl delete po busybox --forcekubectl delete po busybox -n aming --forcekubectl delete po web -n amingkubectl delete -f deny-all-namespaces.yaml案例二: 通过podselector限制 vi pod-selector.yaml ##内容如下apiversion: networking.k8s.io/v1kind: networkpolicymetadata: name: app-to-app namespace: amingspec: podselector: matchlabels: app: test policytypes: - ingress ingress: - from: - podselector: matchlabels: app: dev ports: - protocol: tcp port: 80 应用yamlkubectl apply -f pod-selector.yaml 创建测试pod kubectl run web01 --image=nginx:1.23.2 -n aming -l 'app=test' #创建pod时,指定labelkubectl get pod web01 -n aming --show-labels # 查看label# 如果label创建错了,也可以修改,在本实验中不需要做如下操作# kubectl label pod busybox app=test123 --overwrite kubectl run app01 --image=nginx:1.23.2 -n aming -l 'app=dev' kubectl run app02 --image=nginx:1.23.2 -n aming 查看web01的ipkubectl describe po web01 -n aming |grep -i ip 测试 kubectl exec -n aming app01 -- curl 10.18.235.170kubectl exec -n aming app02 -- curl 10.18.235.170 测试成功后,删除掉刚刚创建的资源 kubectl delete po app01 -n amingkubectl delete po app02 -n amingkubectl delete po web01 -n amingkubectl delete -f pod-selector.yaml 案例三: 限制namespacevi allow-ns.yaml #内容如下apiversion: networking.k8s.io/v1kind: networkpolicymetadata: name: allow-ns namespace: amingspec: podselector: {} policytypes: - ingress ingress: - from: - namespaceselector: matchlabels: name: test ports: - protocol: tcp port: 80 应用yamlkubectl apply -f allow-ns.yaml 创建测试ns kubectl create ns test 创建测试pod kubectl run web01 --image=nginx:1.23.2 -n amingkubectl run web02 --image=nginx:1.23.2 -n testkubectl run web03 --image=nginx:1.23.2 kubectl run web04 --image=nginx:1.23.2 -n aming 查看web01的ipkubectl describe po web01 -n aming |grep -i ip 查看ns labelkubectl get ns --show-labels 给ns设置标签kubectl label namespace test name=test 测试: kubectl -n test exec web02 -- curl 10.18.235.172 #可以访问kubectl exec web03 -- curl 10.18.235.172 #不可以访问kubectl -n aming exec web04 -- curl 10.18.235.172 #不可以访问,即使同一个命名空间也无法访问
以上为networkpolicy的主要内容,你看明白了吗?
Renesas与您相约2022 RT-Thread开发者大会
谷歌AI新进展:自然语言与翻译加入AutoML
芝杜全新产品问世:新固件推出全面杜比视界支持
XISEM西圣ASN十一秒杀促销,将终结高价暴利耳机市场!
电能表的发展历史及现状(交流感应式电能表)
k8s与pod之间是如何进行网络隔离的?
PID算法的代码实现
2017乱战开启:三星Note7起死回生、OPPOFind9售价超4000元、小米6涨价至2299元4月发售
软硬解耦、能力开放,中国电信加速5G终端融合创新
爱尔兰航空接收了空客首架远程型A321LR飞机
数字逻辑设计中锁存器和触发器的定义和比较
特斯拉自研AI芯片或将赶超英伟达?
宜普推出氮化镓场效应晶体管(eGaN FET)EPC2012
小米X1、红米Pro2什么时候上市?最新消息:小米全新机型震撼来袭!近期发布
三星黑科技?人工智能也识美酒
苹果有望在明年带来1TB版本的iPhone新机,且支持折叠屏方案
秀狐科技携手数创科教,共同打造XR人才培养新生态!
中国手机供应商凭借多功能及新潮外观转战高端产品市场
PCB设计如何快速选定性能最优、性价比最高的材料
诸多半导体企业披露上半年财报数据