基于角色的访问控制(RBAC)

概述

本示例适用于在启用RBAC的环境中部署ingress-nginx-controller的情况。

基于角色的访问控制包含四个层级:

  1. ClusterRole - 应用于整个集群的权限角色
  2. ClusterRoleBinding - 将ClusterRole绑定到特定账户
  3. Role - 应用于特定命名空间的权限角色
  4. RoleBinding - 将Role绑定到特定账户

要为ingress-nginx-controller应用RBAC,该控制器应分配给一个ServiceAccount。这个ServiceAccount应该绑定到为ingress-nginx-controller定义的RoleClusterRole

本示例创建的服务账户

本示例创建了一个服务账户ingress-nginx

本示例授予的权限

本示例定义了两组权限:由ClusterRole(名为ingress-nginx)定义的集群范围权限,以及由Role(名为ingress-nginx)定义的命名空间特定权限。

集群权限

这些权限授予ingress-nginx-controller,使其能够作为集群范围的ingress正常工作。这些权限授予名为ingress-nginxClusterRole

• 对configmapsendpointsnodespodssecrets的list和watch权限 • 对nodes的get权限 • 对servicesingressesingressclassesendpointslices的get、list和watch权限 • 对events的create和patch权限 • 对ingresses/status的update权限 • 对leases的list和watch权限

命名空间权限

这些权限特定于ingress-nginx命名空间。这些权限授予名为ingress-nginxRole

• 对configmapspodssecrets的get权限 • 对endpoints的get权限

此外,为了支持领导者选举,ingress-nginx-controller需要访问使用resourceNameingress-nginx-leaderleases

注意:resourceNames不能用于限制使用”create”动词的请求,因为授权者只能访问从请求URL、方法和标头中获取的信息(”create”请求中的资源名称是请求体的一部分)。

• 对leases的get和update权限(针对resourceNameingress-controller-leader) • 对leases的create权限

这个resourceName是由ingress-controller定义的election-id,默认为: • election-id: ingress-controller-leaderresourceName: <election-id>

如果您在启动ingress-nginx-controller时覆盖了这些参数,请相应调整。

绑定

服务账户ingress-nginx被绑定到Roleingress-nginx和ClusterRoleingress-nginx

部署中容器关联的serviceAccountName必须与服务账户匹配。部署元数据、容器参数和POD_NAMESPACE中的命名空间引用应该在ingress-nginx命名空间中。