【问题标题】:Chef-(server): What is the difference between client and userChef-(server):客户端和用户有什么区别
【发布时间】:2024-01-06 01:57:01
【问题描述】:

我已经安装了开源的 chef-server (11.x)。我是厨师的新手。我可以看到users 带有密码和 pub/priv 密钥(通常是刀用户 (@workstations))。还有clients(厨师验证器,节点...)带有pub/priv键。

当我执行knife configuration --initial 时,它使用admin 用户名和私钥来创建新的工作站用户,例如johnnym。因此,具有密钥的管理员用户足够强大,可以创建用户、节点、客户端等。

但是当我 knife bootstrap ${FQDN} 时,它需要具有管理员权限(厨师验证器)的 client 才能对厨师服务器进行身份验证/验证并注册新节点/客户端。

我的问题是:如果客户和用户可以完成相同的任务,我们为什么要把他们分开?

【问题讨论】:

    标签: chef-infra knife


    【解决方案1】:

    在您的情况下,在 OSS Chef 的上下文中,user 也可以用作 client,并增加了通过用户名/密码组合使用 Web UI 的能力。

    您缺少的是 validator 客户端密钥。

    validator 是一个特殊的客户端,只有一个目的:允许节点将自己注册为 Chef 服务器上的客户端。它在第一次 Chef 运行时从节点内部使用。注册节点后,最好从节点中删除 validator 键。

    当您运行knife bootstrap 时,它会在运行chef-client 之前通过SSH 将密钥从您的工作站复制到节点。您面临的问题可能是因为您在工作站上没有validator 密钥,或者因为knife 无法找到它(检查您的knife.rb 文件以查看它希望在哪里找到密钥)。

    【讨论】:

    • 感谢您的回复!好消息是我没有问题……一切正常。我只是不明白为什么具有管理员权限的用户和具有管理员权限的客户端?他们是一样的!他们都使用密钥 auth/authz 并创建节点等?他们唯一的区别是密码属性?为什么我们在 OSS chef-server 中需要单独的实体来完成相同的工作?
    • 我认为users 与人员相关:他们登录Web UI,并且还通过knife 与Chef Server 交互(因此他们需要客户端密钥)。另一方面,Clients 仅供机器使用,与任何特定人类无关。如果我要允许我的 CI 服务器部署新节点,我会创建一个具有此类权限的 ci_server 客户端。如果有新厨师加入我的团队,我会为他/她创建一个新的user。另外,请注意validator 客户端不是 管理员。它的唯一目的是在 Chef 服务器上为新节点创建新的客户端对象。
    • 感谢您的回答。我怀疑客户端和用户的差异主要是在高级(人/机器)视图中,而不是在他们的功能中。
    【解决方案2】:

    我们对此主题进行了一些调试。 clientuser 的主要思想是绝对区分人和程序。他们是如何做到的,这是我们调试的。
    在数据库中,您可以看到users 可以有admin 组标志,clients 可以有admin 和=或validator 标志。
    users 可以使用 webUI(带有 webui client)并且可以使用 chefAPI。
    clients 只能使用 chefAPI。

    opscode_chef=# select username,admin from osc_users;
     username | admin 
    ----------+-------
     admin    | t
     johnnym  | t
     leki     | t
     nemadmin | f
    (4 rows)
                         name                  | admin | validator |                id                
    ---------------------------------------+-------+-----------+----------------------------------
     chef-validator                        | f     | t         | 0000000000006ab38d5bb2564bd91f5b
     chef-webui                            | t     | f         | 000000000000bd469d802db9a3fc3c88
     statictestXXxd.xxxxx.xxxxxxxx.private | f     | f         | 000000000000f106e5461e64a15d0662
     test-validator                        | f     | f         | 000000000000ea638b18e484e034b859
     cica                                  | f     | f         | 00000000000077dd4efbcd39a1fb10d3
    (5 rows)
    
    opscode_chef=# select name,environment,last_updated_by from nodes;
                     name                  | environment |         last_updated_by          
    ---------------------------------------+-------------+----------------------------------
     statictestXXxd.xxxxx.xxxxxxxx.private | _default    | 000000000000f106e5461e64a15d0662
     cica_node                             | _default    | 00000000000077dd4efbcd39a1fb10d3
    (2 rows)
    
    1. admin 成员(clientsusers)可以执行所有命令
    2. validator 成员(仅限 clients)只能执行节点命令
    3. 普通成员(clientsusers)只有在节点由与此请求相同的客户端更新时才能执行 client shownode 命令 (见上表) (00000000000077dd4efbcd39a1fb10d3)

    所以客户端的命令权限有限,范围也有限(只有最后更新的节点)。用户可以拥有所有权限,但不能更新节点。

    我还发现了这个page,它帮助我们研究了这个主题。

    【讨论】:

      最近更新 更多