使用NGINX Ingress进行Kubernetes角色管理

时间:2020-03-20 17:57:36

标签: azure kubernetes

我有一个运行在Azure(AKS)上的Kubernetes集群,前面是NGINX Ingress。

我有点困惑如何将多个用户的不同资源上的访问分开。

用户应在应用程序上工作。这就是为什么如果他们可以读取日志,描述并在Pod中执行某些命令的原因。但是他们绝不应该调整某些Ingress资源。

Microsoft提供了一个很好的教程,介绍如何在AKS上处理类似的案例:https://docs.microsoft.com/en-us/azure/aks/azure-ad-rbac

有一个示例,说明如何向整个命名空间的组添加权限。

我的问题是,我如何才能将组的权限添加到名称空间内的特定资源。

例如,我有以下资源:

ressource              type        namespace     

ingress-controller     pod         nginx-ingress
ingress-service        service     nginx-ingress
ingress-nginx          ingress     nginx-ingress
app1-service           service     nginx-ingress
app1                   pod         nginx-ingress
app2-service           service     nginx-ingress
app2                   pod         nginx-ingress

据我了解,我需要将所有它们都部署在同一个命名空间中,否则入口无法转发请求。 但是我如何才能授予对app1和app1-service的group1读取,写入,执行权限,并读取其余内容?

2 个答案:

答案 0 :(得分:1)

您可以在resourceNames字段中按名称指定RBAC角色中的特定资源。

创建一个角色,该角色可以完全访问app1app1-service

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: app1-admin
rules:
- apiGroups:
  - ""
  resourceNames:
  - app1
  - app1-service
  resources:
  - pods
  - pods/exec
  - service
  verbs:
  - get
  - list
  - watch
  - create

创建允许对所有其他Pod和服务进行读取访问的角色:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: read-all
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - service
  verbs:
  - get
  - list
  - watch

创建两个RoleBindings,将这两个角色都绑定到group1组:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app1-admin-group1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: app1-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: group1
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-all-group1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: read-all
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: group1

现在,group1的成员应该具有对Pod app1和服务app1-service的完全访问权限,但仅具有对所有其他资源的读取访问权限。

答案 1 :(得分:0)

我根本不认为这是真的,您可以在不同的命名空间中拥有入口资源。另外,您实际上可以在rbac中引用资源名称。

https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-resources