gpt4 book ai didi

kubernetes - 如何向 Kubernetes(kubectl)添加用户?

转载 作者:行者123 更新时间:2023-12-03 05:39:26 24 4
gpt4 key购买 nike

我已在 AWS 上使用 kops 创建了一个 Kubernetes 集群。并可以从我的本地计算机通过 kubectl 成功管理它。

我可以使用 kubectl config view 查看当前配置,也可以直接访问 ~/.kube/config 中存储的状态,例如:

apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://api.{CLUSTER_NAME}
name: {CLUSTER_NAME}
contexts:
- context:
cluster: {CLUSTER_NAME}
user: {CLUSTER_NAME}
name: {CLUSTER_NAME}
current-context: {CLUSTER_NAME}
kind: Config
preferences: {}
users:
- name: {CLUSTER_NAME}
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
password: REDACTED
username: admin
- name: {CLUSTER_NAME}-basic-auth
user:
password: REDACTED
username: admin

我需要允许其他用户也进行管理。这个user guide描述了如何在另一台用户计算机上定义这些,但没有描述如何在集群本身内实际创建用户的凭据。你如何做到这一点?

此外,仅共享 cluster.certificate-authority-data 是否安全?

最佳答案

有关身份验证的完整概述,请参阅 Authentication 上的官方 Kubernetes 文档。和 Authorization

对于用户来说,最好使用 Kubernetes 的身份提供程序 (OpenID Connect)。

如果您使用 GKE/ACS,则可以与相应的身份和访问管理框架集成

如果您自行托管 kubernetes(使用 kops 时就是这种情况),您可以使用 coreos/dex与 LDAP/OAuth2 身份提供商集成 - 一个很好的引用是详细的 2 部分 SSO for Kubernetes文章。

kops (1.10+) 现在内置 authentication support如果您使用的是 AWS,这可以简化与作为身份提供商的 AWS IAM 的集成。

对于 Dex,有一些开源 cli 客户端,如下所示:

如果您正在寻找一种快速、简单(从长远来看不是最安全且易于管理)的开始方式,您可能会滥用 serviceaccounts - 有 2 个用于控制专门策略的选项使用权。 (见下文)

注意,从 1.6 开始,强烈建议使用基于角色的访问控制!这个答案不包括 RBAC 设置

编辑:很棒,但已经过时了(2017-2018),由 Bitnami 在 User setup with RBAC 上指导也可用。

启用服务帐户访问的步骤如下(具体取决于您的集群配置是否包含 RBAC 或 ABAC 策略,这些帐户可能拥有完整的管理员权限!):

编辑:Here is a bash script to automate Service Account creation - see below steps

  1. 为用户Alice创建服务帐户

    kubectl create sa alice
  2. 获取相关 secret

    secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
  3. 从 secret 中获取 ca.crt(使用 OSX base64-D 标志进行解码)

    kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
  4. 从 secret 中获取服务帐户 token

    user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
  5. 从 kubectl 配置中获取信息(当前上下文、服务器......)

    # get current context
    c=$(kubectl config current-context)

    # get cluster name of context
    name=$(kubectl config get-contexts $c | awk '{print $3}' | tail -n 1)

    # get endpoint of current context
    endpoint=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}")
  6. 在新机器上,按照以下步骤操作(鉴于上面检索到的 ca.cert$endpoint 信息:

    1. 安装kubectl

       brew install kubectl
    2. 设置集群(在存储ca.crt的目录中运行)

       kubectl config set-cluster cluster-staging \
      --embed-certs=true \
      --server=$endpoint \
      --certificate-authority=./ca.crt
    3. 设置用户凭据

       kubectl config set-credentials alice-staging --token=$user_token
    4. 定义 alice 用户与临时集群的组合

       kubectl config set-context alice-staging \
      --cluster=cluster-staging \
      --user=alice-staging \
      --namespace=alice
    5. 将用户的当前上下文切换到 alice-staging

       kubectl config use-context alice-staging

要使用策略控制用户访问(使用 ABAC ),您需要创建 policy文件(例如):

{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "system:serviceaccount:default:alice",
"namespace": "default",
"resource": "*",
"readonly": true
}
}

在每个主节点上配置此 policy.json 并添加 --authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json API 服务器的标志

这将允许 Alice(通过她的服务帐户)仅对默认命名空间中的所有资源具有只读权限。

关于kubernetes - 如何向 Kubernetes(kubectl)添加用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42170380/

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