基于角色的访问控制(RBAC)
概述
本示例适用于在启用RBAC的环境中部署ingress-nginx-controller的情况。
基于角色的访问控制包含四个层级:
ClusterRole
- 应用于整个集群的权限角色ClusterRoleBinding
- 将ClusterRole绑定到特定账户Role
- 应用于特定命名空间的权限角色RoleBinding
- 将Role绑定到特定账户
要为ingress-nginx-controller应用RBAC,该控制器应分配给一个ServiceAccount
。这个ServiceAccount
应该绑定到为ingress-nginx-controller定义的Role
和ClusterRole
。
本示例创建的服务账户
本示例创建了一个服务账户ingress-nginx
。
本示例授予的权限
本示例定义了两组权限:由ClusterRole
(名为ingress-nginx
)定义的集群范围权限,以及由Role
(名为ingress-nginx
)定义的命名空间特定权限。
集群权限
这些权限授予ingress-nginx-controller,使其能够作为集群范围的ingress正常工作。这些权限授予名为ingress-nginx
的ClusterRole
:
• 对configmaps
、endpoints
、nodes
、pods
、secrets
的list和watch权限
• 对nodes
的get权限
• 对services
、ingresses
、ingressclasses
、endpointslices
的get、list和watch权限
• 对events
的create和patch权限
• 对ingresses/status
的update权限
• 对leases
的list和watch权限
命名空间权限
这些权限特定于ingress-nginx命名空间。这些权限授予名为ingress-nginx
的Role
:
• 对configmaps
、pods
、secrets
的get权限
• 对endpoints
的get权限
此外,为了支持领导者选举,ingress-nginx-controller需要访问使用resourceNameingress-nginx-leader
的leases
:
注意:resourceNames不能用于限制使用”create”动词的请求,因为授权者只能访问从请求URL、方法和标头中获取的信息(”create”请求中的资源名称是请求体的一部分)。
• 对leases
的get和update权限(针对resourceNameingress-controller-leader
)
• 对leases
的create权限
这个resourceName是由ingress-controller定义的election-id
,默认为:
• election-id
: ingress-controller-leader
• resourceName
: <election-id>
如果您在启动ingress-nginx-controller时覆盖了这些参数,请相应调整。
绑定
服务账户ingress-nginx
被绑定到Roleingress-nginx
和ClusterRoleingress-nginx
。
部署中容器关联的serviceAccountName必须与服务账户匹配。部署元数据、容器参数和POD_NAMESPACE中的命名空间引用应该在ingress-nginx命名空间中。