kubernetes - 使用 oauth2 进行命名空间授权
问题描述
我有以下场景:
user1 将只能在 中访问服务,namespace1
但不能在namespace2
. 我将使用OAuth2作为身份服务器。问题是,如何配置入口控制器,它只user1
被授权访问namespace1
.
当user2
试图访问 中的服务时namespace1
,它将拒绝该请求。
还有其他解决方案吗?
解决方案
您不能在 Ingress Controller 级别执行此操作。您将通过 RBAC 规则来执行此操作。
像这样的东西:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: namespace1
name: deployment-manager
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["deployments", "replicasets", "pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: deployment-manager-binding
namespace: namespace1
subjects:
- kind: User
name: user1
apiGroup: ""
roleRef:
kind: Role
name: deployment-manager
apiGroup: ""
在 Ingress Controller 级别(取决于 Ingress Controller),您可以根据主机、路径拒绝请求;用户试图到达,headers 和其他属性,但不是基于用户的身份。
请注意,入口控制器本身将在命名空间中运行,因此您的用户需要首先访问它(在经过身份验证和授权之后),然后被拒绝,这听起来并不正确。
推荐阅读
- python - 将基于 Flask 的 API 转换为 AWS Lambda
- c# - 如何在 C# 中访问 Json(这是 HttpMessage 的结果)?
- google-api - 此 Google API 错误消息是什么意思?
- python - 使用 loglocator 和不同的 x 和 y 限制时,Matplotlib 日志图不显示所有主要和次要刻度
- css - 是否可以赋予身体背景图像不透明度?
- python - 带有 MQTT 的 Django 通道
- r - 在 R 中选择特定名称
- flutter - 如何使 DropDownButtons 的短 ListView 构建得更快?
- raspberry-pi - Electron RPi:未找到请求的设备(相机)
- java - 组合/合并列表中的对象成员