AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

如何通过 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:003427

评论

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

为什么企业们更偏好使用华为云CDN?

清欢科技

React组件复用的发展史

夏天的味道123

React

Webpack完整打包流程分析

Geek_02d948

webpack

弹性伸缩,轻松上云-华为云弹性云服务器 ECS

清欢科技

机器学习服务文本识别能力演进,大幅提升识别准确率

HarmonyOS SDK

机器学习

和至少为 K 的最短子数组

掘金安东尼

算法 10月月更

今天终于知道 Redis 为什么要用跳跃表了

C++后台开发

redis 中间件 后端开发 跳表 C++开发

Vue响应式依赖收集原理分析-vue高级必备

yyds2026

Vue

怎样徒手写一个React

helloworld1024fd

JavaScript

React组件设计模式-纯组件,函数组件,高阶组件

xiaofeng

React

Vue中的diff算法深度解析

yyds2026

Vue

一站式全覆盖数据 I/O 平台 - Alluxio 与 Aunalytics 的完美结合

Alluxio

分布式 presto Alluxio 大数据 开源 #开源

融云一站式「云市场」上线,携手生态伙伴,共建价值平台

融云 RongCloud

通讯协议 市场 CND

为什么普通用户也需要认识华为云CDN?

清欢科技

一文读懂 DevSecOps:工作原理、优势和实现

SEAL安全

DevOps 云原生 敏捷开发 DevSecOps 企业号十月 PK 榜

前端展示中实现批量标签动态生成

葡萄城技术团队

批量 BI 报表 商业智能 打印

Go语言入门07—指针

良猿

Go golang 后端 10月月更

Webpack中的高级特性

Geek_02d948

webpack

Nodejs:ESModule和commonjs,傻傻分不清

coder2028

node.js

手写JS函数的call、apply、bind

helloworld1024fd

JavaScript

【一Go到底】第二十六天---数组入门

指剑

Go golang 10月月更

看完这份SpringBoot神级文档,面试真的可以为所欲为

程序知音

Java spring JAVA开发 springboot 后端技术

如何判断等保测评机构有资质?符合要求?

行云管家

等保 等级保护 等保测评 等保测评机构

在 Java 代码中来一段 JavaScript?聊聊 Flowable 中的脚本任务

江南一点雨

Java springboot workflow flowable

C++栈/队列/堆使用及模拟

可口也可樂

c++ 数据结构 10月月更

React组件复用的技巧

夏天的味道123

React

React组件通信

xiaofeng

React

前端常见手写面试题(持续更新中)

helloworld1024fd

JavaScript

云安全企业有哪些?哪些比较知名?

行云管家

云计算 网络安全 云安全

龙蜥对Intel下一代芯片SPR的支持及Anolis 23 产品规划介绍 | 第 50 期

OpenAnolis小助手

开源 直播 intel 龙蜥大讲堂 月会

技术分享| 基于 Etcd 的分布式锁实现原理及方案

anyRTC开发者

分布式 etcd 存储系统

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