首页 > 解决方案 > 使用 oauth2 进行命名空间授权

问题描述

我有以下场景:

在此处输入图像描述

user1 将只能在 中访问服务,namespace1但不能在namespace2. 我将使用OAuth2作为身份服务器。问题是,如何配置入口控制器,它只user1被授权访问namespace1.

user2试图访问 中的服务时namespace1,它将拒绝该请求。

还有其他解决方案吗?

标签: kubernetesoauth-2.0istio

解决方案


您不能在 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 和其他属性,但不是基于用户的身份。

请注意,入口控制器本身将在命名空间中运行,因此您的用户需要首先访问它(在经过身份验证和授权之后),然后被拒绝,这听起来并不正确。


推荐阅读