热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何通过Kubernetes网络策略进行应用程序微分段

如何通过Kubernetes网络策略进行应用程序微分段,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决

如何通过Kubernetes网络策略进行应用程序微分段,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


在大多数生产环境中,需要实施网络访问控制。Kubernetes提供了一种方法来描述Pod 组应该如何通过使用NetworkPolicy资源进行通信。
与Kubernetes中的大多数事情一样,要使网络策略正常运行,您需要一个支持它们的Kubernetes CNI插件。

使用场景

在几乎所有环境中,为应用程序需要通信的组件建立明确的规则,都是一个好主意。Kubernetes网络策略规范是一种直接的方法,可让您将NetworkPolicy直接与应用程序清单集成在一起。
NetworkPolicy定义资源的方式,使您可以精确地指定哪些网络通信是被允许的,而哪些则不允许,同时使用podSelector定义处理在Kubernetes上运行的应用程序的动态属性。
这意味着您的策略可以针对单个Pod或Pod组,从而将安全范围“缩小”到Pod的大小。
严格定义的网络策略与default-deny配置相结合,可以避免由于恶意应用程序入侵,和/或行为不当,或者配置错误而造成的麻烦。例如,一个应用程序组件可能具有滞留的缓存DNS条目或错误的配置参数,导致它与错误的后端进行通信。或者应用程序可能会被攻陷并被用作跳板,执行侦查,尝试横向渗透,或者只是使用Pod对Kubernetes API的访问权限来启动一些加密货币挖矿Pod,以窃取您的计算资源。

使用网络策略保护示例应用程序的安全

网络策略设计的主题比本指南中允许的空间要大得多。在此示例中,我们将执行以下操作:
  • 为我们的default命名空间创建一个default-deny Ingress策略。这意味着命名空间内的所有传入Pods的连接必须明确被允许;

  • 为每个示例应用程序组件创建一个Ingress NetworkPolicy对象,仅允许那些我们确定的对象。


步骤1:明确哪些组件应当可以相互通信

首先,我们需要提醒自己,应用程序的各个组件应该如何通信。为此,我们将回到在简介中看到的应用程序图:

如何通过Kubernetes网络策略进行应用程序微分段


从该图中可以看到:
1. 外界需要到达yelb-ui的TCP端口80-(1)和(2)
2. yelb-ui需要到达yelb-appserver的TCP端口4567
3. yelb-appserver反过来将需要到达yelb-db的TCP端口5432,以及
4. .. yelb-cache的TCP端口6379。

步骤2:如何识别组件?

请记住,NetworkPolicy资源使用选择器来识别策略适用于哪个Pod,以及该策略将要控制的流量的源和目的地是什么。
在本演示中,我们将使用podSelectror方法,因此需要获取应用到应用程序Pod的标签列表。让我们查看cnawebapp-loadbalancer.yaml示例应用程序的清单,并收集标签:
如何通过Kubernetes网络策略进行应用程序微分段

现在准备编写我们的策略。

部署后,这些策略将以以下方式控制应用程序组件之间的通信:
如何通过Kubernetes网络策略进行应用程序微分段

步骤3:“default-deny”策略

确保您位于沙箱控制节点上,以root用户身份登录,并且位于正确的目录中:
# 确认您是root账户
whoami | grep root || sudo -s

# 切换到清单目录

cd /home/centos/yelb/deployments/platformdeployment/Kubernetes/yaml

在此步骤中,我们将创建一个策略,该策略将阻止所有未明确允许的网络通信。在这一演示中,我们将只限制Ingress流量;但实际上,您也可以控制Egress流量(但是这样做时要注意这可能会阻止DNS查询!):

如何通过Kubernetes网络策略进行应用程序微分段


该策略基本上说:“对于任何Pod,都应用一个没有规则的Ingress策略”,这将导致应用这个策略的,所有流向这个命名空间Pods的传入流量被丢弃掉。

步骤4:“yelb-ui”的策略

该yelb-ui和其他组件在某种意义上说有一些不同,因为它是唯一一个可以被从外部访问的组件。因此,其ingress:定义将使用ipBlock的0.0.0.0/0,以表示“每个人”:

如何通过Kubernetes网络策略进行应用程序微分段


该策略表示:“对于具有应用标签app: yelb-ui和tier: frontend的Pods,允许传入来自任何源IP的流量,只要它去往Pod的TCP端口80”。

步骤5:示例应用中其他Pod的策略

我们示例应用程序中的其他3个Pod仅会看到来自其他Pod的流量,因此其策略将使用带有允许发送流量的Pod标签的podSelector参数:
 

如何通过Kubernetes网络策略进行应用程序微分段

如何通过Kubernetes网络策略进行应用程序微分段

如何通过Kubernetes网络策略进行应用程序微分段


步骤6:在应用策略之前测试

为了能有一个“前后”对比,让我们部署示例应用程序并获取基线:

# 部署我们的应用

kubectl create -f cnawebapp-loadbalancer.yaml

等待应用启动并在外部可用:
# 获得我们程序yelb-ui Service的外部DNS名字:
kubectl get svc -o wide | grep yelb-ui | awk '{print $4}'
我们应该可以看到类似a0b8dfc14916811e9b411026463a4a33-1258487840.us-west-1.elb.amazonaws.com的输出;在网络浏览器中打开它;样本应用程序应当加载了。
接下来,我们知道所有Pod通信都是不受限制的,因此我们应该能够从yelb-ui ping 到yelb-db——这是在应用程序正常运行且我们不进行故障排除动作的情况下,本来不应该发生的活动:

# 获得"yelb-ui"的完整Pod名字

src_pod=$(kubectl get pods | grep yelb-ui | awk '{print $1}')

# 获得"yelb-db"的IP:

db_pod_ip=$(kubectl get pods -o wide | grep yelb-db | awk '{print $6}')

#  从"yelb-ui" ping"yelb-db":

kubectl exec -it ${src_pod} ping ${db_pod_ip}


我们应该看到该ping命令正在接收响应;因此存在不受限制的网络连接。按^ C停止命令。

步骤7:部署策略并测试结果

在最后一步,我们将部署策略并观察其效果:
# 部署网络策略

kubectl create -f yelb-policy.yaml

运行上面的命令后,请等待几秒钟以稳定下来。Tungsten Fabric将在后台生成适当的安全组,并进行安装。让我们测试一下我们曾经可以正常运行的ping命令是否仍然有效:
# 从"yelb-ui" ping "yelb-db" again:

kubectl exec -it ${src_pod} ping ${db_pod_ip}

这次,我们看到没有响应,因为该通信现在已被该策略阻止。接下来,测试是否仍可以通过网络浏览器访问该应用——应该可以!

步骤8:探索Tungsten Fabric的安全流量组可视化

Tungsten Fabric包含一个功能,可在“项目”中实现流量可视化,在我们的案例中,该项目对应于Kubernetes Namespace。
要访问它,请访问Carbide Evaluation Page链接,用于获取访问沙箱控制节点——在顶部有一个名为Contrail UI的链接,完成login和password的输入。单击链接,然后在左上角单击“Monitor”图标,然后在菜单中单击“Security” -> “Traffic Groups”。然后在顶部的标签链,在其末尾选择“k8s-default”:
如何通过Kubernetes网络策略进行应用程序微分段
您应该看到类似于以下的图表:
如何通过Kubernetes网络策略进行应用程序微分段

继续测试。您看到的流,代表示例应用程序在做的事情,包括无法从 yelb-uiping到yelb-db,以及yelb-appserver的出站请求(如果我们去查看,将转到yelb-db的DNS查询)。

清理

一旦进行了足够的探索,可以随时清理:
# 卸载Network Policy

kubectl delete -f yelb-policy.yaml

# 删除我们的示例应用程序:

kubectl delete -f cnawebapp-loadbalancer.yaml

# 删除策略清单:
rm -f yelb-policy.yaml

回顾和资源

对于许多(即使不是全部)生产部署,控制应用程序的网络通信能力至关重要。在Kubernetes上运行的应用程序实现此类控件的方法是通过NetwokPolicy资源。但是,要使这些资源真正起作用,您需要一个支持它们的CNI插件。
Tungsten Fabric提供了完整的NetworkPolicy支持,无论集成Tungsten Fabric的Kubernetes在哪里运行,是在私有数据中心,还是在公共云中。
网络策略可以变得非常简单或非常复杂,而找出最适合您的应用程序的最佳方法,就是在我们提供的用例和示例基础上更深入地研究。

关于如何通过Kubernetes网络策略进行应用程序微分段问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程笔记行业资讯频道了解更多相关知识。


推荐阅读
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • 我创建了一个新的AWSSSO(使用内部IDP作为身份源,因此不使用ActiveDirectory)。我能够登录AWSCLI、AWSGUI,但 ... [详细]
  • 云原生SRE
    序言年底了,没有分手的朋友的赶紧分了,所谓新年新气象,年年不重样。去留无意,望看风卷残云。。。运维不会消失,但 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 本文介绍了在序列化时如何对SnakeYaml应用格式化,包括通过设置类和DumpSettings来实现定制输出的方法。作者提供了一个示例,展示了期望的yaml生成格式,并解释了如何使用SnakeYaml的特定设置器来实现这个目标。对于正在使用SnakeYaml进行序列化的开发者来说,本文提供了一些有用的参考和指导。摘要长度为169字。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了安全性要求高的真正密码随机数生成器的概念和原理。首先解释了统计学意义上的伪随机数和真随机数的区别,以及伪随机数在密码学安全中的应用。然后讨论了真随机数的定义和产生方法,并指出了实际情况下真随机数的不可预测性和复杂性。最后介绍了随机数生成器的概念和方法。 ... [详细]
author-avatar
rita
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有