kubernetes 使用Azure RBAC的AKS-通量应用程序群集管理员群集角色绑定显然不工作

2exbekwf  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(1)|浏览(140)

我的AKS群集配置了enableAzureRBAC=true
我试图通过通量安装ingress-nginx Helm 图
它抛出错误

reconciliation failed: failed to get last release revision: query: failed to query with labels: secrets is forbidden: User "system:serviceaccount:nginx:flux-applier" cannot list resource "secrets" in API group "" in the namespace "default": Azure does not have opinion for this user.

我可以看到flux设置了一个clusterrolebinding,以使flux应用程序成为群集管理员,我已经验证了这一点

Name:         flux-applier-binding
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  cluster-admin
Subjects:
  Kind            Name          Namespace

  ----            ----          ---------
  ServiceAccount  flux-applier  flux-system

因此,我假设我的问题是Azure不识别此ServiceAccount,并且它没有回退到内置角色?
https://github.com/kubeguard/guard/blob/master/authz/providers/azure/rbac/checkaccessreqhelper.go
Azure RBAC for AKS上的Azure文档明确指出:
如果发出请求的标识存在于Azure AD中,Azure将与Kubernetes RBAC协作对请求进行授权。如果该标识存在于Azure AD之外(即Kubernetes服务帐户),则授权将遵从正常的Kubernetes RBAC。
https://learn.microsoft.com/en-us/azure/aks/concepts-identity
但这似乎不是真的?或者也许Flux正在对ServiceAccounts做一些奇怪的事情?我这么说是因为在默认名称空间中没有flux-applier服务帐户,只有在flux-system名称空间中。然而,如果我通过Kubectl将cluster-admin分配给“ghost”服务帐户,事情就开始工作了。

kubectl create clusterrolebinding flux-nginx-cluster-admin --clusterrole=cluster-admin --serviceaccount=nginx:flux-applier

我想避免这样做,虽然,似乎不像是我应该负责的事情。

g6ll5ycj

g6ll5ycj1#

我尝试在我的环境中重现相同的问题,结果如下
我已经创建了配置了RABC的AKS群集
将此链接用于reference files

  • 已创建ClusterRole以授予对任何特定命名空间中的机密的读取访问权限 *
vi clusterrole.yaml
kubectal apply -f clusterrole.yaml
  • 我已经创建了角色绑定,以在命名空间中授予pod-reader权限,并部署了文件 *
vi rolebinding.yaml
kubectl apply -f rolebinding.yml
  • 已创建群集绑定角色以向整个群集授予权限 *
vi clusterrolebinding.yaml
kubectl apply -f clusterrolebinding.yaml
  • 已创建角色绑定以将管理群集角色中的权限授予用户 *
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=namespace_name
  • 若要访问ClusterRole中的服务帐户,请使用以下命令 *
kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=namespace_name
  • 若要为整个群集授予群集角色,请使用以下命令 *
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
  • 我已经使用下面的命令创建了名为nginx-ingress-controller的名称空间 *
kubectl create namespace nginx-ingress-controller
  • 我用通量定义了舵 *
vi helmrepository-bitnami.yaml
kubectl apply -f helmrepository-bitnami.yaml
  • 我已在Flux存储库中创建了自定义文件以部署该文件 *
vi kustomization-nginx-ingress-controller.yaml
kubectl apply -f kustomization-nginx-ingress-controller.yaml
  • 我已创建配置Map文件 *
vi configmap.yaml
kubectl apply -f configmap.yaml
  • 到目前为止,我已经通过flux在nginx控制器中创建了helm repo *
  • 我已经部署了nginx入口控制器 *
kubectl get pods
kubectl get services
  • 在这里,我可以看到我创建的所有pod和服务 *

  • 授予群集权限后,必须更新或创建身份验证协调权限**通过使用以下命令,它将创建或更新缺少得字段或删除额外得权限 *
kubectl auth reconcile -f my-rbac-rules.yaml --dry-run=client
kubectl auth reconcile -f my-rbac-rules.yaml
kubectl auth reconcile -f my-rbac-rules.yaml --remove-extra-subjects --remove-extra-permissions

  • 我已根据需要将特定角色授予特定服务帐户**我们已使用以下命令为默认服务帐户授予权限 *
kubectl create rolebinding default-view \
      --clusterrole=view \
      --serviceaccount=my-namespace:default \
      --namespace=namespace_name

***注意:**如果Azure无法识别服务帐户,则必须给予默认服务的权限 *
有关详细信息,请参阅此url

相关问题