使用NGINX入口的Kubernetes角色管理



我有一个在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角色中按名称指定特定资源。

创建一个允许完全访问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

创建允许读取访问所有其他播客和服务的角色:

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-资源

相关内容

  • 没有找到相关文章