【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

如何通过 Kubernetes 网络策略隔离 1500 个微服务

  • 2020-01-19
  • 本文字数:1184 字

    阅读完需:约 4 分钟

如何通过Kubernetes网络策略隔离1500个微服务

Monzo 安全团队撰文分享了他们实现 Kubernetes 网络策略的经历,该策略通过 Calico 的 API 为 1500 个微服务提供了隔离。


Monzo 是一家面向移动端的数字银行,它们在 AWS 上运行其核心基础设施。除了使用Kubernetes托管其微服务外,Monzo 还使用Apache Cassandra 作为主要数据库,使用 Apache Kafka 进行消息传递,并使用 Go 实现了其大部分程序代码。Monzo 安全团队将采用零信任网络作为他们的目标之一。零信任平台的原则是,网络内外的任何一个实体都是不被信任的,要访问私有信息必须要经过验证。Monzo 后端的每个服务只允许访问一个经过预先批准的服务列表。Monzo 大约拥有 1500 个服务,超过 9300 个服务间的交互,这也让该任务变得非常困难。在构建了一个通过分析代码来派生策略的自定义工具集之后,Monzo 团队在 Kubernetes 上使用了针对 Calico 的网络策略来提供隔离。


团队首先通过隔离一个服务来测试他们的初步方案。他们编写了一个名为 rpcmap 的自定义工具,这个工具可以通过分析静态代码来发现服务之间的依赖关系。根据 Monzo 后端工程师Jack Kleeman的说法,他们在集成测试或运行时选择静态分析的方式而不是观察的方式,主要是因为:


Monzo 有很多代码路径,没有一个可以涵盖所有内容的集成测试。在运行时,某项服务很少被调用并不意味着它从不会被调用;一间银行可以有一些每年只运行一次的服务进程。


规则必须按照可管理和可读的方式存储,而且不能破坏现有的服务。Monzo 安全团队采用了 Kubernetes 的 NetworkPolicy 来执行规则探测,并使用Calico网络插件来实现网络策略。这种初始方法在可测试性方面非常脆弱,并把维护规则列表的责任交由管理调用服务的团队负责。另一个引入的缺点就是开发团队必须手动编辑 Kubernetes 的配置文件。


为解决这些问题,Kleeman 说:“跟 Calico 社区讨论了网络策略的测试问题后,我们发现可以使用 Calico 的一些无法被 Kubernetes 访问的特性来测试我们的策略。”其中的一个特性允许流量访问网络策略通常不允许的内容,随后记录下来这种情况。Kubernetes网络策略通常采用选择器和标签的方式,在没有采用任何策略的时候,Kubernetes 允许 pod 之间的所有通信。Monzo 将他们的策略配置在最后运行,并监控网络流量来确定哪些服务会丢失数据包。


此后,团队将服务允许的流量列表切换为调用服务的一个属性,而不是目标服务的属性。服务通过标签声明它们在策略的入口(ingress)规范中需要访问到的服务。针对那些调用大量其他服务的服务,例如监控服务,则会按照“服务类型”进行分组,按照这样的准则,就没有必要列出每个服务了。rpcmap 被配置为每次提交时运行,部署管道把规则文件转换为服务标签。团队计划在未来使用服务网格而不是 CNI(容器网络接口)层来实现这一点,他们已经迁移到了一个使用 Envy 的自定义网格。


原文链接:


How Monzo Isolated Their Microservices Using Kubernetes Network Policies


2020-01-19 09:003110

评论

发布
暂无评论
发现更多内容

首发!这份阿里强推的图文并茂的Mybatis 源码笔记将理论和实战完美结合

了不起的程序猿

Java 后端 mybatis JAVA开发 框架

史上最全499道Java面试题:JVM+分布式+算法+锁+MQ+微服务+数据库

冉然学Java

Java 数据库 面试 算法 多线程

Vue讲解系列- - -Nginx和Postman讲解

叶秋学长

Vue 8月月更

关于Http协议,你必须要知道的

TimeFriends

8月月更

Kubernetes 动态扩缩容

CTO技术共享

开源 签约计划第三季 8月月更

大揭秘:云网流量采集方案关键点

阿泽🧸

签约计划第三季 8月月更 云网流量采集

体验家辛济云:CEM不是MarTech,不仅要“从0到1”,更要规避“从1到0”

B Impact

SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase

IT学习日记

数据库 分布式数据库 oceanbase 签约计划第三季 oracle迁移到oceanbase

构建在Findora上的Forlend,具备隐私特性的借贷协议

EOSdreamer111

知乎疯传,吹爆阿里P7《K8s+Jenkins》的技术手册

程序知音

Java 编程 程序员 后端技术 #k8s

Kubernetes宕机切换源码分析

黄继承

源码分析 kubelet Kubernetes 集群 宕机

千万级学生管理系统的考试试卷存储方案

张立奎

Kubernetes rubbish如何回收

CTO技术共享

开源 签约计划第三季 8月月更

为什么实际业务中不建议直接使用POI操作Excel?

IT学习日记

POI EasyExcel 签约计划第三季 java excel导出导入 poi和easyexcel对比

2022最新发布!不愧是保姆级的SpringSecurity笔记

了不起的程序猿

Java spring 后端 JAVA开发 java程序员

Kubernetes eBPF多种玩法

CTO技术共享

开源 签约计划第三季 8月月更

PyCharm 2022.2 发布了,支持最新 Python 3.11 和 PyScript 框架!

Python猫

废除“网络君主制”,认识 Usenet ~

掘金安东尼

前端 网络 8月月更

五分钟搞定YAML

俞凡

云原生 yaml

美团二面:如何解决 bin log 与 redo log 的一致性问题

飞天小牛肉

签约计划第三季

STM32入门开发 编写DS18B20温度传感器驱动(读取环境温度、支持级联)

DS小龙哥

8月月更

React Server Components 介绍 亮点

HullQin

CSS JavaScript html 前端 8月月更

涨薪了!拿着GitHub标星80k的阿里性能优化笔记,把项目优化个遍

程序知音

Java 编程 程序员 性能优化 后端技术

阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+

冉然学Java

Java 面试 springboot 秋招 java面试·

Forlend:构建在Findora上,且具备隐私特性的借贷协议

股市老人

史上最全的Java并发系列之Java中的锁的使用和实现介绍(二)

自然

多线程 并发 8月月更

如何正确理解Java领域中的多线程模型,主要用来解决什么问题?

PivotalCloud

计算机网络知识点全面总结(一篇全懂)

C++后台开发

网络编程 计算机网络 网络协议 底层原理 C/C++开发

开源一夏 | AngularJS实战之依赖注入与应用实践

恒山其若陋兮

开源 8月月更

史上最全的Java并发系列之Java中的线程池

自然

线程池 并发 8月月更

MySQL 原理与优化:意向锁,IS,IX

老崔说架构

如何通过Kubernetes网络策略隔离1500个微服务_容器_Hrishikesh Barua_InfoQ精选文章