gpt4 book ai didi

docker - Kubernetes仪表板不接受仅查看服务帐户 token

转载 作者:行者123 更新时间:2023-12-02 20:36:32 25 4
gpt4 key购买 nike

所以我按照官方说明对kubernetes仪表板进行了基本设置。它与cluser-admin角色serviceaccount token 完美配合。但是,当我用它自己的ClusterRole和CluserRoleBinding创建另一个服务帐户时,无法通过“身份验证失败。请重试”登录到仪表板。信息。

这是我采取的步骤。

1 kubectl create serviceaccount dashboard-reader -n kube-system
2

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: dashboard-reader
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["get", "watch", "list"]
EOF

3
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: dashboard-reader
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: dashboard-reader
subjects:
- kind: ServiceAccount
name: dashboard-reader
namespace: kube-system
EOF

然后,我从dashboard-reader-xyz secret中获取 token ,并将其应用于Dashboard登录页面。
我要实现的目标是拥有具有各种权限的单独 token ,例如管理员可以使用一个 token 登录到仪表板并具有完全权限,开发人员可以使用其他 token 登录并且只能看到资源,等等。

仪表板版本为1.10.1。
Kubernetes版本是1.13.5

最佳答案

可以在k8s中创建service-account并将其限制为特定的 namespace 。

跟着这些步骤:

  • 我假设在您的k8s集群上安装了k8s-dashboard。
  • 我还假设您已经通过执行these步骤创建了admin-user来访问k8s-dashboard。
  • 现在将开发人员限制为k8s上的特定 namespace ,创建一个包含以下内容的服务帐户:
  • ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: mynamespace-user
    namespace: mynamespace

    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
    name: mynamespace-user-full-access
    namespace: mynamespace
    rules:
    - apiGroups: ["", "extensions", "apps"]
    resources: ["*"]
    verbs: ["*"]
    - apiGroups: ["batch"]
    resources:
    - jobs
    - cronjobs
    verbs: ["*"]

    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
    name: mynamespace-user-view
    namespace: mynamespace
    subjects:
    - kind: ServiceAccount
    name: mynamespace-user
    namespace: mynamespace
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: mynamespace-user-full-access

    mynamespace替换为要限制开发人员的 namespace 的名称。
  • 您可以使用访问 token 登录k8s-dashboard,该 token 可以使用此命令来检索。
  • kubectl -n mynamespace describe secret $(kubectl -n flow get secret | grep mynamespace-user | awk '{print $1}')
  • 您还可以使用kube config登录k8s-dashboard。 kube配置内容将是:
  • apiVersion: v1
    kind: Config
    preferences: {}

    # Define the cluster
    clusters:
    - cluster:
    certificate-authority-data: PLACE CERTIFICATE HERE
    # You'll need the API endpoint of your Cluster here:
    server: https://YOUR_KUBERNETES_API_ENDPOINT
    name: my-cluster

    # Define the user
    users:
    - name: mynamespace-user
    user:
    as-user-extra: {}
    client-key-data: PLACE CERTIFICATE HERE
    token: PLACE USER TOKEN HERE

    # Define the context: linking a user to a cluster
    contexts:
    - context:
    cluster: my-cluster
    namespace: mynamespace
    user: mynamespace-user
    name: mynamespace

    # Define current context
    current-context: mynamespace
  • 可以使用此命令
  • 来检索证书
    kubectl -n mynamespace get secret $(kubectl -n flow get secret | grep mynamespace-user | awk '{print $1}') -o "jsonpath={.data['ca\.crt']}"

    我已经在我的环境中尝试了这些步骤,并且效果很好。

    有关更多信息,请引用 this

    希望这可以帮助。

    关于docker - Kubernetes仪表板不接受仅查看服务帐户 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57075425/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com