OpenShift 4 - 通过设置SDN的NetworkPolicy定义Pod访问策略
《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.9环境中验证
文章目录
- NetworkPolicy简介
- 应用环境和测试方法
- 部署测试应用
- 测试验证
- NetworkPolicy策略
- 拒绝所有Pod直接访问
- 拒绝有 Pod 的 Egress 流量
- 只允许来自相同项目的Pod访问
- 只允许来自同一项目的指定Pod访问
- 只允许从其他项目访问
- 只允许从指定的项目访问
- 只允许从指定项目的指定Pod访问
- 只允许从指定的端口访问
- 混合策略
- 其它参考
NetworkPolicy简介
NetworkPolicy是Kubernetes和OpenShift定义通过网络访问Pod的安全策略,利用它可以在不通的Project和Pod之间定义细粒度的应用访问策略。
在NetworkPolicy中以白名单的方式定义了针对“XXX项目”的“XXXPod”可以让“XXX项目”的“XXXPod”通过“XXX方式”访问,不在白名单都无法进行访问。
应用环境和测试方法
部署测试应用
创建如下资源:
$ oc new-project project1
$ oc label namespace project1 name=project1
$ oc new-project project2
$ oc label namespace project2 name=project2
$ oc new-project project3
$ oc label namespace project3 name=project3
$ oc new-app -n project1 openshiftroadshow/parksmap --name=web-db
$ oc new-app -n project1 openshiftroadshow/parksmap --name=web
$ oc new-app -n project1 openshiftroadshow/parksmap --name=db
$ oc new-app -n project1 openshiftroadshow/parksmap --name=mail
$ oc new-app -n project1 openshiftroadshow/parksmap --name=foobar
$ oc new-app -n project1 openshiftroadshow/parksmap --name=foo
$ oc new-app -n project1 openshiftroadshow/parksmap --name=bar
$ oc new-app -n project1 openshiftroadshow/parksmap --name=api
$ oc new-app -n project1 openshiftroadshow/parksmap --name=monitoring
$ oc new-app -n project1 openshiftroadshow/parksmap --name=project1-app
$ oc new-app -n project2 openshiftroadshow/parksmap --name=project2-app
$ oc new-app -n project3 openshiftroadshow/parksmap --name=project3-app
测试验证
通过以下方法验证可从应用的Pod中访问到同一项目或不同项目的应用Service地址。以下是从project2的project2-app的Pod经过project1的project1-app的Service的CLUSTER-IP访问project1-app的Pod的说明。
$ oc get svc project1-app -n project1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
project1-app ClusterIP 172.30.144.211 <none> 8080/TCP 2m8s
$ oc project project2
$ oc get pod | grep Running
NAME READY STATUS RESTARTS AGE
project2-app-l7jqd 1/1 Running 0 102s
$ oc rsh project2-app-l7jqd
sh-4.2$ curl 172.30.144.211:8080
NetworkPolicy策略
以下每个 NetworkPolicy 策略都提供了 OpenShift 控制台的配置截图和 editor.cilium.io 的配置截图。
拒绝所有Pod直接访问
- 创建NetworkPolicy策略实施于project1。注意:为了不相互影响,需要将其它策略删除。
$ cat << EOF | oc apply -f -
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: deny-all-ingressnamespace: project1
spec:podSelector: {}policyTypes:- Ingress
EOF
- 通过“测试验证”步骤确认已经无法从任何项目的Pod访问到project1-app1的Service了。
拒绝有 Pod 的 Egress 流量
以下是拒绝某个项目 Pod 的所有 Egress 流量的策略。注意:不过该策略不支持 OpenShift SDN网络环境。
$ cat << EOF | oc apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-egressnamespace: project1
spec:podSelector: {}policyTypes:- Egress
EOF
只允许来自相同项目的Pod访问
- 创建NetworkPolicy策略实施于project1。注意:为了不相互影响,需要将其它策略删除。
$ cat << EOF | oc apply -f -
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: allow-same-namespacenamespace: project1
spec:podSelector: {}ingress:- from:- podSelector: {}policyTypes:- Ingress
EOF
- 通过“测试验证”步骤确认只能从project1的Pod访问project1-app的Service了。
只允许来自同一项目的指定Pod访问
- 创建NetworkPolicy策略实施于project1。注意:为了不相互影响,需要将其它策略删除。
$ cat << EOF | oc apply -f -
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: allow-mail-access-dbnamespace: project1
spec:podSelector:matchLabels:app: dbingress:- from:- podSelector:matchLabels:app: mailpolicyTypes:- Ingress
EOF
- 通过“测试验证”步骤确认只能从mail访问db的Service了。
只允许从其他项目访问
- 创建NetworkPolicy策略实施于project1。注意:为了不相互影响,需要将其它策略删除。
$ cat << EOF | oc apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-other-namespacenamespace: project1
spec:podSelector:matchLabels:app: web-dbingress:- from:- namespaceSelector: {}
EOF
- 通过“测试验证”步骤确认只能从其它项目的Pod访问web-db的Service了。
只允许从指定的项目访问
- 创建NetworkPolicy策略实施于project1。注意:为了不相互影响,需要将其它策略删除。
$ cat << EOF | oc apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-other-projectnamespace: project1
spec:podSelector:matchLabels:app: webingress:- from:- namespaceSelector:matchLabels:name: project2
EOF
- 通过“测试验证”步骤确认只能从project2项目的Pod访问project1项目web的Service了。
只允许从指定项目的指定Pod访问
- 创建NetworkPolicy策略实施于project1。注意:为了不相互影响,需要将其它策略删除。
$ cat << EOF | oc apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-other-project-podnamespace: project1
spec:podSelector:matchLabels:app: dbingress:- from:- namespaceSelector:matchLabels:project: project2podSelector:matchLabels:app: mail
EOF
注意:以上代码的namespaceSelector和podSelector是“并且”的关系。而以下代码namespaceSelector和podSelecto是“或者”的关系。
- from:- namespaceSelector:matchLabels:project: project2- podSelector:matchLabels:app: mail
- 通过“测试验证”步骤确认只能从project2项目中mail的Pod访问project1项目web的Service了。
只允许从指定的端口访问
- 创建NetworkPolicy策略实施于project1。注意:为了不相互影响,需要将其它策略删除l。
$ cat << EOF | oc apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-portnamespace: project1
spec:podSelector:matchLabels:app: apiingress:- from:- podSelector:matchLabels:app: monitoringports:- protocol: TCPport: 80- protocol: TCPport: 443
EOF
混合策略
如果一个Pod被不同的NetworkPolicy定义了访问策略,则这些访问策略的全集适用于这个Pod。
其它参考
- https://kubernetes.io/docs/concepts/services-networking/network-policies/
- https://blog.openshift.com/whats-new-in-openshift-3-5-network-policy-tech-preview/
- https://editor.cilium.io/
OpenShift 4 - 通过设置SDN的NetworkPolicy定义Pod访问策略相关推荐
- OpenShift 4之设置用户/组对项目的访问权限
OpenShift 4之设置用户/组对项目的访问权限 环境与目标 用户 组 项目 目标 实现 创建资源 关联用户和组 设置组权限 验证 环境与目标 假设OpenShift环境中有以下User.Grou ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- OpenShift Security (12) - 用 RHACS 管理容器之间的网络访问策略
<OpenShift 4.x HOL教程汇总> 本文在 OpenShift4.9 + RHACS 环境中进行验证. 演示视频 部署测试应用资源 oc new-project project ...
- OpenShift Security (6) - 用网络图可视化网络访问策略
<OpenShift 4.x HOL教程汇总> 本文在 OpenShift 4.9 和 RHACS 3.67.1 环境中进行验证. 文章目录 网络图 跟踪查看网络访问通道 网络策略模拟器 ...
- Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析
Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...
- 计算机无法启用媒体流,win7开启媒体流功能提示“媒体流已被管理员定义的组策略禁用”如何解决...
win7系统自带有媒体流功能功能,一些喜欢玩影音的用户都会使用计算机中的媒体流功能,使电脑.电视和手机的媒体文件在同一个局域网内,互联播放.但是最近有用户说无法开启媒体流,提示"媒体流已被管 ...
- Win2003共享文件夹权限设置以及如何不需要密码访问共享文件?
在局域网中我们常常需要在服务器上共享一些文件供局域网用户使用,本文以图文并茂的方式汇总了Windows 2003 server共享文件设置的一些方法技巧.用户既可以设置需要用户名和密码并且访问权限不同 ...
- Python使用property函数定义属性访问方法如果不定义fget会怎么样?
我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...
- Python基础day04【字典(介绍、定义与访问、操作数据、常见操作)】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] 目录 1. 复习反馈 判断一个方法是否有返回值 列表中的删除操作 新建day04项目 2. ...
最新文章
- seaborn可视化绘制双变量分组条形图(Customizing Annotation of Bars: Side-by-side)、添加数值标签进行标记、并自定义条形图数值标签的格式
- 浅谈Web中前后端模板引擎的使用
- mysql乐观锁总结和实践--转
- 获取this_带你彻底弄清JavaScript的关键字this
- Java 并发编程—核心理论
- 【百度地图API】如何调整结果面板的样式?如何获取指定页码的结果?
- 电脑技巧:盘点常用的Win组合快捷键
- SpringBoot2.x(3)---基础入门
- 设计灵感|色彩与形状巧妙运用在创意时尚海报设计中
- 利用Docker一键部署若依前后端分离项目详细教程
- 分布式系统负载均衡策略分析与研究
- axure sketch 对比_Sketch 画原型比 Axure 好用吗?为什么
- IPsec简单实验-IKE协商
- [LuoGu] P3957 跳房子
- Python语音助手
- 聚合路由器的原理和应用
- 学习Python人工智能前景如何
- 大学生为什么要学Linux?Linux有什么优点?
- libjpeg解码 jpeg文件
- HTML - label标签
热门文章
- python单片机编程软件下载_Python开发例程大全
- python音频特征提取_使用Python对音频进行特征提取
- springboot2 war页面放在那_亚马逊产品页面如何优化?这些技巧要知道
- php echo nbsp,关于include里面的函数echo的问题
- android 获取sd卡视频文件名,android – 如何获取SD卡上的视频列表
- python元胞自动机模拟交通_基于立体网格的放射性污染物扩散过程模拟与表达
- 2021牛气新年素材模板,你真的不来看一看吗?
- 完整的金融类APP UI设计素材,深度学习临摹
- mysql pdo prepare_php pdo prepare真的安全吗
- linux parted命令,Linux分区之parted命令详解