terraform eks 设置 - 禁止命名空间:用户无法列出资源

Kay*_*Kay 4 kubernetes terraform amazon-eks

我一直在遵循有关如何使用 terraform 设置 AWS EKS 的指南。https://learn.hashicorp.com/tutorials/terraform/eks

我位于需要验证仪表板的部分。https://learn.hashicorp.com/tutorials/terraform/eks#authenticate-the-dashboard

  1. 我已经创建了簇卷装订
$ kubectl apply -f https://raw.githubusercontent.com/hashicorp/learn-terraform-provision-eks-cluster/master/kubernetes-dashboard-admin.rbac.yaml
Run Code Online (Sandbox Code Playgroud)
  1. 我已经生成了令牌
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep service-controller-token | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)
  1. 我已使用令牌登录 kubernetes 仪表板。kubectl proxy

但是,在我登录并尝试单击任何面板以查看资源后,我收到一组类似于以下内容的错误。

命名空间被禁止:用户“system:serviceaccount:kube-system:service-controller”无法在集群范围的 API 组“”中列出资源“命名空间”

cronjobs.batch 被禁止:用户“system:serviceaccount:kube-system:service-controller”无法在命名空间“default”的 API 组“batch”中列出资源“cronjobs”

这些消息向我表明,通过令牌登录的用户没有查看这些资源的权限。虽然我可以使用kubectlcli 工具查看它们。

kubectl describe clusterrole kubernetes-dashboard
Name:         kubernetes-dashboard
Labels:       k8s-app=kubernetes-dashboard
Annotations:  <none>
PolicyRule:
  Resources             Non-Resource URLs  Resource Names  Verbs
  ---------             -----------------  --------------  -----
  nodes.metrics.k8s.io  []                 []              [get list watch]
  pods.metrics.k8s.io   []                 []              [get list watch]
Run Code Online (Sandbox Code Playgroud)

Mei*_*bay 8

以下内容将使您以 的身份登录admin-user,这似乎是您正在寻找的行为。

$ ADMIN_USER_TOKEN_NAME=$(kubectl -n kube-system get secret | grep admin-user-token | cut -d' ' -f1)
$ echo $ADMIN_USER_TOKEN_NAME

admin-user-token-k4s7r
# The suffix is auto-generated

$ ADMIN_USER_TOKEN_VALUE=$(kubectl -n kube-system get secret "$ADMIN_USER_TOKEN_NAME" -o jsonpath='{.data.token}' | base64 --decode)
$ echo "$ADMIN_USER_TOKEN_VALUE"

eyJhbGciOiJ ...
.....................-Tg
# Copy this token and use it on the Kubernetes Dashboard login page
Run Code Online (Sandbox Code Playgroud)

本教程中使用的服务帐户是service-controller,它的权限似乎很少

$ kubectl -n kube-system describe clusterrole system:controller:service-controller
Name:         system:controller:service-controller
Labels:       kubernetes.io/bootstrapping=rbac-defaults
Annotations:  rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
  Resources             Non-Resource URLs  Resource Names  Verbs
  ---------             -----------------  --------------  -----
  events                []                 []              [create patch update]
  events.events.k8s.io  []                 []              [create patch update]
  services              []                 []              [get list watch]
  nodes                 []                 []              [list watch]
  services/status       []                 []              [patch update]
Run Code Online (Sandbox Code Playgroud)

如果您有任何问题,请告诉我。