基于服务网格的集群访问控制
随着容器化、云原生等概念的火热,越来越多的应用都开始选择支持云原生部署,但是对于大型企业应用来说,各种为服务的拆分会导致集群运维的压力越来越大,尤其是服务之间的安全通信至关重要。
在容器化集群中,传统的基于IP或端口的访问控制方式已经无法满足需求。引入服务网格(如Istio)不仅可以简化服务间的通信,还能通过强大的访问控制策略增强安全性。下面我们将通过一个简单的示例来说明如何利用Istio中的AuthorizationPolicy资源实现细粒度的访问控制。
1. 什么是服务网格?
服务网格是一种轻量级的基础设施层,用于服务间的网络通信。它提供了一种统一的方式来管理服务之间的交互,包括身份验证、授权、监控等。Istio 是一个非常流行的服务网格框架实现,可以帮助我们轻松实现这些功能。
2. 实现细粒度访问控制
对于在集群中服务网格的访问控制主要有以下两种场景:
-
集群外请求访问集群内应用
-
集群内应用之间的互相调用
假设我们有一个简单的微服务架构,包含两个服务:frontend 和 backend。我们需要实现两个需求
-
只有1.2.3.4/16IP段能访问frontend
-
只有frontend才能访问 backend 应用服务。
3. 示例实现
配置1:只有1.2.3.4/16IP段能访问frontend
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:name: test
spec:action: DENYrules:- from:- source:ipBlocks:- 1.2.3.4/16selector:matchLabels:app: frontend
配置2: 只有default资源池下的frontend才能访问 backend 服务。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:name: test
spec:action: DENYrules:- from:- source:ipBlocks:- 1.2.3.4/16selector:matchLabels:app: frontend
通过以上的配置1,frontend应用(选择器为app:frontend)只会接受1.2.3.4/16网段的请求访问,而在集群内惊醒服务调用backend时,配置2通过集群RBAC机制的ServiceAccount识别,只允许frontend通过GET或POST访问/api/*接口,由此可实现简易的集群访问控制。
对于集群外访问的应用控制,Heimdall云原生网关系统提供了黑白名单相关功能用以实现对集群外访问的IP(段)地址或域名进行访问权限的控制。通过提供的菜单页面可以快速实现IP(段)以及域名黑白名单,可以为紧急安全事件提供快捷处理的入口。
以上只是istio服务网格在访问控制方面的简单应用。随着其不断迭代升级,现在的istio通过AuthorizationPolicy等诸多资源的配合,可实现鉴权、认证、访问控制、外接三方认证以及自定义扩展等与权限相关的功能,通过这些功能可以实现各种细粒度需求的权限控制。
欢迎大家积极留言共建,期待与各位技术大咖的深入交流!
此外,欢迎大家下载我们的inBuilder低代码平台开源社区版,可免费下载使用,加入我们,开启开发体验之旅!