Network Policy(网络策略)

默认情况下,k8s集群网络是没有任何限制的,Pod可以和任何其他Pod通信,在某些场景下需要做网络控制,减少网络面的攻击,提高安全性,就会用到网络策略(Network Policy)。为了使用Network Policy,K8s引入了一个新的资源对象NetworkPolicy,供用户设置Pod间网络访问的策略。但仅定义一个网络策略是无法完成实际的网络隔离的,还需要一个策略控制器(Policy Controller)进行策略的实现。策略控制器由第三方网络组件提供,目前Calico、Cilium、Kube-router、Romana、Weave Net等开源项目均支持网络策略的实现。

Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制,设置方式为将Pod的Label作为查询条件,设置允许访问或禁止访问的客户端Pod列表。目前查询条件可以作用于Pod和Namespace级别。

网路策略的使用场景:

  • 应用程序之间访问控制,例如A不能访问B的Pod
  • 开发环境命名空间不能访问测试环境命名空间的Pod
  • 当Pod暴露到外部时,需要做Pod的白名单
  • 多租户网络环境隔离

网络策略示例:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default #针对default命名空间做网络策略
spec:
podSelector: #pod标签选择,针对default命名空间下的含有role=db的pod做限制
matchLabels:
role: db #pod标签
policyTypes: #网络策略
- Ingress #针对访问default命名空间下含有role=db标签的pod做限制
- Egress #针对default命名空间下含有role=db标签的pod做访问外部的限制
ingress: #外部访问含有标签的pod白名单
- from:
- ipBlock:
cidr: 172.17.0.0/16 #只允许访问的IP段
except:
- 172.17.1.0/24 #在上面的基础上,不允许这些IP访问
- namespaceSelector: #针对命名空间做限制
matchLabels:
project: myproject #允许这个命名空间下的pod访问
- podSelector: #pod选择,如果没有则默认上面命名空间中的所有pod允许访问
matchLabels:
role: frontend #允许myproject下的这个pod访问
ports:
- protocol: TCP #允许访问的网络协议
port: 6379 #允许访问的端口
egress: #针对default空间下含有role=db的标签访问外部策略
- to:
- ipBlock:
cidr: 10.0.0.0/24 #允许访问的IP段
ports:
- protocol: TCP #网路协议
port: 5978 #允许访问的端口

案例一

test命名空间下pod可以相互访问,拒绝其他命名空间所有pod访问,但是可以访问其他命名空间。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: reject-all-ingress
namespace:test
spec:
podSelector: {} #未配置,匹配本命名空间下所有pod
policyTypes:
- Ingress
ingress:
- form:
- podSelector: {} #未配置,匹配本命名空间下所有pod

案例二

同一命名空间下应用之间的限制访问:

test命名空间下标签为app=db的pod不允许被访问,只允许test命名空间下标签为app=web的标签访问3306端口

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-db-ingress
namespace:test
spec:
podSelector:
matchLabels:
app=db
policyTypes:
- Ingress
ingress:
- form:
- podSelector:
matchLabels:
app=web
ports:
- protocol: TCP
port: 3306

案例三

只允许指定命名空间下的应用访问

以上面为例,指定test2命名空间下的pod访问test命名空间下的app=db的pod的3306端口,其他的都不允许访问。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-db-ingress
namespace:test
spec:
podSelector:
matchLabels:
app=db
policyTypes:
- Ingress
ingress:
- form:
- namespaceSelector:
matchLabels:
name: test2
ports:
- protocol: TCP
port: 3306

k8s网路策略的更多相关文章

  1. K8s预选策略和优选函数简介

    调度器选择策略: 预选策略(Predicate) 1. 根据运行Pod的资源限制来排除不符合要求的Node 2. 根据运行Pod时,是否要求共享宿主机的网络名称空间来判断,如: 某Pod启动要共享宿主 ...

  2. 041.Kubernetes集群网络-K8S网络策略

    一 Kubernetes网络策略 1.1 策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定 ...

  3. K8S发布策略,无损发布

    大家好,相信大部分公司都已经使用K8S进行容器管理和编排了,但是关于K8S的发布策略,还有很多同学不太清楚,通过这篇文章的介绍,相信大家对目前K8S的发布情况有一个概括的认识.总结下来,共有如下几种: ...

  4. k8s重启策略

    Pod 的重启策略有 3 种,默认值为 Always. Always : 容器失效时,kubelet 自动重启该容器: OnFailure : 容器终止运行且退出码不为0时重启: Never : 不论 ...

  5. 十四,K8s集群网络flannel及canal策略

    目录 k8s网络CNI之flannel k8s网络通信模型 常见CNI插件(Container,Network,Interface) 插件通信一般的解决方案 网络插件的应用 Flannel插件 fla ...

  6. K8s创建pod yaml文件详解

    kubernetes创建pod的yaml文件,参数说明 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 ...

  7. k8s之yaml详解

    k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数 ...

  8. K8S创建的相关yaml文件

    一.K8S-yaml的使用及命令 YAML配置文件管理对象 对象管理: # 创建deployment资源 kubectl create -f nginx-deployment.yaml # 查看dep ...

  9. k8s补充

    k8s补充 容器云发展及主要内容 1.云计算,交付标准(iaas--openstack) 国内:阿里云一华为云(振兴杯)百度云(私有云) 国外:AWS 2.平台即服务(PAAS) 例如:新浪云(号称免 ...

  10. Centos7 安装部署Kubernetes(k8s)集群

    目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...

随机推荐

  1. overflow:scroll修改样式

    当overflow :scroll 出现滚动条后,默认的滚动条样式太丑了,不是我们想要的,那么我们来修改一下吧!~ 话不多说,直接上代码  /* 定义滚动条样式 */ ::-webkit-scroll ...

  2. 2022年7月14日,第四组 周鹏,认识JAVA的第二天(;´д`)ゞ(;д;)

    那天,我遇到了JAVA 然后,我失去了头发 无论我用了多少办法 还是放不下那个它 我哭的像个傻瓜 但也没能留住它 如果再有一次从来 我愿为它披上薄纱 愿它安稳有个家 可我终究还是失去了它 失去了原本为 ...

  3. ONNX模型分析与使用

    本文大部分内容为对 ONNX 官方资料的总结和翻译,部分知识点参考网上质量高的博客. 一,ONNX 概述 深度学习算法大多通过计算数据流图来完成神经网络的深度学习过程. 一些框架(例如CNTK,Caf ...

  4. Java读取文件后文件被占用

    Java读取文件响应后文件一直被占用问题 原因: 由于是封装的函数,请求和响应对象都是 形参地址 虽然在此函数里关闭了输出流,但是由于有返回值,调用未结束,输出流无法提前关闭 解决: 1:调用函数后, ...

  5. Zabbix与乐维监控对比分析(八)——其他功能篇

    前面我们详细介绍了Zabbix与乐维监控的架构与性能.Agent管理.自动发现.权限管理.对象管理.告警管理.可视化.图形图表及网络功能方面的对比分析,接下来我们将对二者其他功能进行对比分析. 本篇是 ...

  6. 【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob

    问题描述 在使用Azure的存储服务时候,如果上传的文件大于了100MB, 1GB的情况下,如何上传呢? 问题解答 使用Azure存储服务时,如果要上传文件到Azure Blob,有很多种工具可以实现 ...

  7. ubuntu20.04 gnome桌面系统添加开机自启动GUI程序

    在终端执行 gnome-session-properties,点击添加自己的脚本或执行文件,便可以在用户登录后自动执行.

  8. .NET周报 【2月第1期 2023-02-04】

    国内文章 .NET 入门到高级路线 https://www.cnblogs.com/hejiale010426/archive/2023/02/01/17083913.html 笔者介绍了.NET入门 ...

  9. 12月12日内容总结——Django之数据增删改查、Django请求生命周期流程图、Django路由层(路由匹配、转换器、正则匹配)、反向解析

    目录 一.可视化界面之数据增删改查 二.django请求生命周期流程图 三.django路由层 1.路由匹配 2.转换器 3.正则匹配 不同版本的区别 正则匹配斜杠导致的区别 4.正则匹配的无名有名分 ...

  10. 【LeetCode】三数之和+四数之和(双指针)

    之所以放在一起是因为,"四数之和"的解题方法基本与"三数之和"一致 由此我们可以推出n数之和的解法 本质上,我们只是使用双指针的方法降低此类问题的时间复杂度 当 ...