我有一个在Azure(AKS(上运行的Kubernetes集群,前面有NGINX Ingress。
我有点困惑如何为多个用户分离对不同资源的访问。
用户应该使用这些应用程序。这就是为什么如果他们能够读取日志、描述并在pod中执行一些命令就可以了。但他们永远不应该调整一些Ingress资源。
微软提供了一个非常好的教程,如何处理AKS上的类似情况:https://learn.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
根据我的理解,我需要将所有这些部署在同一个命名空间中,否则ingress无法转发请求。但是,我如何为app1和app1服务向group1授予读、写、执行权限,并向其余部分授予读权限?
您可以在具有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
创建允许读取访问所有其他播客和服务的角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: read-all
rules:
- apiGroups:
- ""
resources:
- pods
- service
verbs:
- get
- list
- watch
创建两个RoleBinding,将这两个Role都绑定到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
的成员应该具有对Podapp1
和Serviceapp1-service
的完全访问权限,但只能读取对所有其他资源的访问权限。
我认为这根本不是真的,你可以在不同的命名空间中拥有入口资源。此外,您实际上可以在rbac中引用资源名称。
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-资源