kubernetes - Kubernetes中微服务的基于路径的授权
问题描述
我的任务是将 AWS lambda 微服务迁移到 Kubernetes。为简单起见,有两个服务端点:您可以在/admin
其中/user
GET 或 POST 请求以完成某事。
您必须在admin
组中(在外部 authZ 提供程序中定义)才能命中/admin
端点,否则,您会得到 401。您必须在user
组中才能访问/user
端点。
我会将每个端点公开为在 docker 容器中运行的服务。问题是——在 Kubernetes 中添加路由和基于路径的授权的正确方法是什么?
比如,如果我/admin
在浏览器中访问,我需要 Kubernetes 检查我是否在admin
组中,然后将我路由到admin
服务;否则,它应该返回 401。
我可以自己编写这个路由器,但我想检查一下 Kubernetes 中是否有内置的解决方案。
解决方案
检查 Kubernetes 中是否有内置解决方案
不,没有针对 L7 网络策略的内置解决方案。Kubernetes 中的网络策略处于 L4 级别,因此无法实现速率限制、基于路径的防火墙规则等。尽管您可以查看 Service Mesh,例如Linkerd、Istio,甚至使用基于 Cilium 等不同的CNIeBPF
插件。
Cilium 有一个 CRDCiliumNetworkPolicy
可以帮助你处理你的用例。如果您想卸载身份验证/授权过程,您可以将任何代理(如 Nginx/Caddy/HAProxy)或 API 网关(如 Kong)放在其前面。您可以应用以下网络策略,这将限制/admin
任何带有标签的 pod 上的端点,app: customapp
并且只允许它来自带有标签的 pod app: proxyapp
。
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "allow-from-proxy"
specs:
- endpointSelector:
matchLabels:
app: customapp
ingress:
- fromEndpoints:
- matchLabels:
app: proxyapp
toPorts:
- ports:
- port: "8080"
protocol: "TCP"
rules:
http:
- method: "GET"
path: "/admin"
推荐阅读
- c++ - 在 C++ 中获取数组中相同值的数量
- windows - Artifactory 升级 6.16.2 -> 7.12.6 失败,应用程序无法初始化:不可用:网络因未知原因关闭
- java - Spring Cloud Stream 在发送后处理消息
- python - Pandas 通过为数据帧之间的每个重复行仅删除一行来合并两个数据帧
- php - 如何在一个 Query PHP 中加入 mongoDB 中的多个集合以获取具体数据
- sql - PostgreSQL DROP ROLE 抛出错误:无法删除角色,因为它是数据库系统需要的
- javascript - 如何选择特定的 ID 来做某事?
- python-3.x - 没有为所有循环参数运行python multiprocessing for loop
- discord - 删除消息命令,仅适用于所有者、管理员和版主
- freertos - FreeRTOS - 堆栈增加的原因?