我有一个运行在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读取,写入,执行权限,并读取其余内容?
答案 0 :(得分:1)
您可以在resourceNames
字段中按名称指定RBAC角色中的特定资源。
创建一个角色,该角色可以完全访问app1
和app1-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