gpt4 book ai didi

Kubernetes/kops : Default user and permissions

转载 作者:行者123 更新时间:2023-12-01 05:57:49 25 4
gpt4 key购买 nike

使用 kubectlkops 1.8
aws 中旋转集群时使用 kops创建的客户端证书(在 client-certificate-data~/.kube/config 字段中显示为字符串)具有以下值:

    Subject: O=system:masters, CN=kubecfg

除非我错了,从 kubernetes 1.4 开始, O 的值rganitazion 被解释为 group信息(与 CN 值关联的字符串就是所谓的用户,因为 k8s 本身并没有这样的概念)

1 : 如何查看与 system:masters 关联的权限组和/或 kubecfg用户?
  • (与上述有关):我现在使用的开箱即用的授权方式是什么? RBAC ?我怎样才能检查这个?

  • 2 : 为什么我的 ~/.kube/config 中的条目做 不是 合并 kubecfg用户? (而是一个拥有我的集群名称的用户和另一个名为 admin 的用户?)
    $ kubectl config view
    apiVersion: v1
    clusters:
    - cluster:
    certificate-authority-data: REDACTED
    server: <server_url>
    name: <my_cluster_name>
    contexts:
    - context:
    cluster: <my_cluster_name>
    user: <my_cluster_name>
    name: <my_cluster_name>
    current-context: <my_cluster_name>
    kind: Config
    preferences: {}
    users:
    - name: <my_cluster_name>
    user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    password: <some_pass>
    username: admin
    - name: <my_cluster_name>.local-basic-auth
    user:
    password: <some_pass>
    username: admin

    归根结底,执行 kubectl 时,我正在与哪个用户执行 api 调用命令?

    更新 : 我试图弄乱 client-certificate-data 的值在我的 ~/.kube/config我得到了

    error: tls: private key does not match public key



    我假设这意味着我正在使用 x509基于身份验证 (?)

    所以我将 api 调用设为 kubecfg ?

    最佳答案

    请注意,有一个 difference 之间认证授权 .

  • 身份验证确保用户是他们所说的那样。对 Kubernetes API 的调用始终需要成功的身份验证。
  • 授权确定用户是否有权访问特定的 Kubernetes API 资源(通过 RBAC)。 RBAC 必须作为 kube-apiserver 的配置选项显式启用。服务器。

  • Kubernetes 认证
  • 在 Kubernetes 中有很多 mechanisms可用于对用户进行身份验证,例如 token 、密码、OIDC 连接 token 和 SSL x509 客户端证书。
  • 正如您在上面发现的,kops将自动生成带有嵌入式 SSL x509 客户端证书的 ~/.kube/config 文件。
    将客户端证书与对 kube-apiserver 的任何 REST 调用一起提供,允许 kube-apiserver 通过验证客户端证书已由集群证书颁发机构 (CA) 签名来验证调用者。如果客户端证书已正确签名,那么调用者就是他们所说的那个人。
  • 客户端证书持有者的身份由 SSL x509 客户端证书的主题字段确定。
  • 主题公用名确定用户身份。 (例如 CN=Bob)
  • 主题组织确定用户的组。 (例如 O=admins,O=system:masters)。请注意,可以指定多个组织(即组)。
  • 请注意 user kubeconfig 文件中的 name 只是为了方便 kubectl 工具的一个不透明值用户。 user的真实身份是嵌入在 SSL x509 客户端证书或任何其他 token 中的内容。
  • 请注意,典型 Kubernetes 部署中每个组件(例如 kubelet、调度程序、etcd)的每个实例都有自己的 SSL x509 客户端证书,用于在与其他组件通信时进行身份验证。看到这个link

  • Kubernetes 授权
  • 在 Kubernetes 中,RBAC roles and rolebindings准确确定特定用户可以访问哪些 kube-apiserver REST 端点,以及 verb 是什么允许操作(例如“get”、“list”、“watch”、“create”、“update”、“patch”、“delete”)。
  • 可以创建一个 role这是一组权限,用于定义对 kube-apiserver REST 端点的访问。
  • 然后可以创建一个 rolebinding它将用户 ID 或组 ID 绑定(bind)到特定的 role .
  • 请注意,集群范围和命名空间范围的角色绑定(bind)都可用。
  • 这是一个例子:

  • apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
    name: role-grantor
    rules:
    - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["rolebindings"]
    verbs: ["create"]
    - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterroles"]
    verbs: ["bind"]
    resourceNames: ["admin","edit","view"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
    name: role-grantor-binding
    namespace: user-1-namespace
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: role-grantor
    subjects:
    - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: user-1
  • RBAC 只是一种可能的授权机制。 Kubernetes ABAC不太受欢迎。

  • 检查您是否启用了 RBAC

    只需验证 kube-apiserver 启动选项。如果 kube-apiserver 作为 pod 运行,您可以像这样检查它:
    $ kubectl get po kube-apiserver-ubuntu-18 -n kube-system -o name |grep api
    pod/kube-apiserver-ubuntu-18

    $ kubectl get po kube-apiserver-ubuntu-18 -n kube-system -o yaml
    # THEN SEARCH FOR RBAC
    spec:
    containers:
    - command:
    - kube-apiserver
    - --authorization-mode=Node,RBAC

    关于Kubernetes/kops : Default user and permissions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48188932/

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