本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
故障排除 AWS OpsWorks for Chef Automate
重要
AWS OpsWorks for Chef Automate 已于 2024 年 5 月 5 日停用,新客户和现有客户均已禁用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。如果您有任何疑问,可以通过 re AWS : Post 或通过 Pre
本主题包含一些常见 AWS OpsWorks for Chef Automate 问题以及这些问题的建议解决方案。
一般故障排除技巧
如果您无法创建或使用 Chef 服务器,可查看错误消息或日志来帮助您对问题进行故障排除。下列任务描述了在您排除 Chef 服务器问题故障时通常应从哪些方面入手。有关特定错误和解决方案的信息,请参阅本主题的针对特定错误进行故障排除部分。
在 Chef 服务器无法启动时,使用 AWS OpsWorks for Chef Automate 控制台查看错误消息。在 Chef 服务器详细信息页面上,与服务器启动和运行相关的错误消息将显示在页面顶部。错误可能来自用于创建 Chef 服务器的服务 AWS OpsWorks for Chef Automate AWS CloudFormation、或 Amazon EC2。在详细信息页面上,您还可查看正在运行的服务器上发生的事件,其中可能会包含故障事件消息。
要帮助解决 EC2 问题,请通过使用 SSH 连接到您的服务器实例并查看日志。EC2 实例日志存储在
/var/log/aws/opsworks-cm
目录中。这些日志在 AWS OpsWorks for Chef Automate 启动 Chef 服务器时捕获命令输出。
针对特定错误进行故障排除
主题
服务器处于连接丢失状态
问题:服务器的状态显示为连接丢失。
原因:这种情况最常发生在外部实体对 AWS OpsWorks for Chef Automate 服务器或其支持资源 AWS OpsWorks 进行更改时。 AWS OpsWorks 无法连接到处于连接丢失状态的 Chef Automate 服务器来处理维护任务,例如创建备份、应用操作系统补丁或更新 Chef Automate。因此,您的服务器可能缺少重要更新,容易受到安全问题的影响,或者无法按预期运行。
解决方案:尝试以下步骤来恢复服务器的连接。
请确保您的服务角色具有所有必需的权限。
在服务器的设置页面上,在网络和安全中,选择服务器正在使用的服务角色的链接。这将将服务角色打开以供在 IAM 控制台中查看。
在权限选项卡上,确认
AWSOpsWorksCMServiceRole
是否在权限策略列表中。如果未列出该托管策略,请手动将AWSOpsWorksCMServiceRole
托管策略添加到角色中。在信任关系选项卡上,验证服务角色是否具有信任
opsworks-cm.amazonaws.com
服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或 AWS 安全博客文章《如何在 IAM 角色中使用信任策略》。
请确保您的实例配置文件具有所有必需的权限。
在服务器的设置页面上,在网络和安全中,选择服务器正在使用的实例配置文件的链接。这将打开实例配置文件以在 IAM 控制台中查看。
在权限选项卡上,确认
AmazonEC2RoleforSSM
和AWSOpsWorksCMInstanceProfileRole
是否在权限策略列表中。如果未列出其中一个或两个托管策略,请手动将这些托管策略添加到角色中。在信任关系选项卡上,验证服务角色是否具有信任
ec2.amazonaws.com
服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或 AWS 安全博客文章《如何在 IAM 角色中使用信任策略》。
在 Amazon EC2 控制台中,确保您与 AWS OpsWorks for Chef Automate 服务器所在区域位于同一区域,然后重启服务器正在使用的 EC2 实例。
选择名为
aws-opsworks-cm-instance-
服务器名称
的 EC2 实例。在实例状态菜单,选择启动实例。
等待最多 15 分钟让您的服务器重新启动并完全联机。
在 AWS OpsWorks for Chef Automate 控制台的服务器详细信息页面上,验证服务器状态现在是否正常。
如果执行上述步骤后服务器状态仍为连接丢失,请尝试以下方法之一。
-
通过创建新服务器并删除原始服务器来替换服务器。如果当前服务器上的数据对您很重要,请从最近的备份中恢复服务器,并验证数据是否为最新,然后再删除未响应的原始服务器。
托管节点显示在 Chef Automate 控制面板的“Missing”列中
问题:一个托管节点显示在 Chef Automate 控制面板的 Missing 列中。
原因:如果某个节点未连接到 Chef Automate 服务器的时间超过 12 小时,并且 chef-client
无法在该节点上运行,则该节点的状态将从 12 小时前的状态发生变化,并移动到 Chef Automate 控制面板的 Missing 列中。
解决方案:确认该节点处于联机状态。尝试运行 knife node show
以查看 node_name
--run-listchef-client
能否在该节点上运行,或运行 knife
node show -l
以显示有关该节点的所有信息。该节点可能处于脱机状态或已断开网络连接。node_name
无法创建 Chef 保险库;knife vault
命令失败并返回错误
问题:您尝试运行 knife vault
命令来在您的 Chef Automate 服务器上创建一个保管库,例如一个用于存储基于 Windows 的节点加入域所用的凭证的保管库。该命令返回类似以下的错误消息。
WARN: Auto inflation of JSON data is deprecated. Please pass in the class to inflate or use #edit_hash (CHEF-1) at /opt/chefdk/embedded/lib/ruby/2.3.0/forwardable.rb:189:in `edit_data'.Please see https://docs.chef.io/deprecations_json_auto_inflate.html for further details and information on how to correct this problem. WARNING: pivotal not found in users, trying clients. ERROR: ChefVault::Exceptions::AdminNotFound: FATAL: Could not find pivotal in users or clients!
当您远程运行 knife user list
时未返回关键用户,但当您在 Chef Automate 服务器上本地运行 chef-server-ctl user-show
命令时,可在结果中看到关键用户。换句话说,您的 knife vault
命令无法找到关键用户,但您知道它存在。
原因:虽然关键用户在 Chef 中被视为超级用户,并且具有完整权限,但它不属于任何组织,包括在 AWS OpsWorks for Chef Automate中使用的 default
组织。命令 knife user list
将返回属于您的 Chef 配置中的当前组织中的所有用户。chef-server-ctl user-show
命令将返回包括关键用户在内的所有用户,而不论用户属于哪个组织。
解决方案:要修复此问题,请通过运行 knife opc
将关键用户添加到默认组织。
首先,您需要安装 knife-opc
chef gem install knife-opc
安装此插件后,运行以下命令将关键用户添加到默认组织。
knife opc org user add default pivotal
您可通过再次运行 knife user list
来确认关键用户是否为默认组织的一部分。pivotal
应会在结果中列出。然后,尝试再次运行 knife vault
。
服务器创建失败,并返回“requested configuration is currently not supported”消息
问题:您尝试创建一台 Chef Automate 服务器,但服务器创建失败,并返回与“The requested configuration is currently not supported。Please check the documentation for supported configurations.”类似的错误消息。
原因:可能为 Chef Automate 服务器指定了不支持的实例类型。如果您选择在具有非默认租赁的 VPC 中创建 Chef Automate 服务器,例如适用于专用实例的 VPC,则指定 VPC 内的所有实例也必须为专用或主机租赁。由于某些实例类型 (如 t2) 只适用于默认租赁,指定 VPC 可能不支持 Chef Automate 服务器实例类型,因此服务器创建失败。
解决方案:如果您选择具有非默认租赁的 VPC,请使用 m4 实例类型,此类型可以支持专用租赁。
Chef 服务器未识别 Chef Automate 控制面板中添加的组织名称
问题:您已在 Chef Automate 控制面板中添加新的工作流程组织名称,或在无人参与节点关联脚本中指定了 "default"
之外的 CHEF_AUTOMATE_ORGANIZATION
值,但节点关联失败。您的 AWS OpsWorks for Chef Automate 服务器未识别新的组织名称。
原因:工作流程组织名称和 Chef 服务器组织名称不同。您可在基于 Web 的 Chef Automate 控制面板中创建新的工作流程组织,而不是 Chef 服务器组织名称。您只能使用 Chef Automate 控制面板查看现有 Chef 服务器组织。您在 Chef Automate 控制面板中创建的新组织是一个工作流程组织,Chef 服务器未能识别。您无法通过在节点关联脚本中指定新的组织名称来创建它们。当在节点关联脚本中引用某个组织名称时,如果在此之前未将该组织添加到 Chef 服务器,则将导致节点关联失败。
解决方案:要创建在 Chef 服务器上识别的新组织,请使用 knife opc
org create
chef-server-ctl org-create
无法创建服务器的 Amazon EC2 实例
问题:服务器创建失败,并返回类似以下的错误消息:“The following resource(s) failed to create: [EC2Instance]。Failed to receive 1 resource signal(s) within the specified duration.”
原因:很可能的原因是 EC2 实例没有网络访问权限。
解决方案:确保实例具有出站 Internet 访问权限,并且 AWS 服务代理能够发出命令。请确保您的 VPC (具有单一公有子网的 VPC) 已启用 DNS resolution,并且您的子网已启用 Auto-assign Public IP 设置。
服务角色错误阻止服务器创建
问题:服务器创建失败,并显示一条错误消息,上面写着 “未授权执行 sts:” AssumeRole。
原因:当您使用的服务角色缺少足够的权限创建新服务器时,可能会出现此问题。
解决方案:打开 AWS OpsWorks for Chef Automate 控制台;使用控制台生成新的服务角色和实例配置文件角色。如果您希望使用自己的服务角色,请将AWSOpsWorksCMServiceRole策略附加到该角色。验证 opsworks-cm.amazonaws.com 在角色的 Trust Relationships 中随服务一起列出。验证与 Chef 服务器关联的服务角色是否已附加AWSOpsWorksCMServiceRole托管策略。
超出弹性 IP 地址限制
问题:服务器创建失败,并返回错误消息,指示“The following resource(s) failed to create: [EIP, EC2Instance]。Resource creation cancelled, the maximum number of addresses has been reached.”
原因:当您的账户已使用最大数量的弹性 IP (EIP) 地址时,将会出现此问题。默认的 EIP 地址数量限制为 5。
解决方案:您可以释放现有 EIP 地址或删除您的账户未使用的 EIP 地址,也可以联系 Cust AWS omer Support 以增加与您的账户关联的 EIP 地址的限制。
无法登录 Chef Automate 控制面板
问题:Chef Automate 控制面板显示类似以下的错误:“Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://myserver-name.region.opsworks-cm.io/api/v0/e/default/verify-token。(Reason: CORS header 'Access-Control-Allow-Origin' missing)”。错误也可能类似于“The User Id / Password combination entered is incorrect.”
原因:Chef Automate 控制面板显式设置了 FQDN,并且不接受相对 URL。此时,您无法使用 Chef 服务器的 IP 地址登录;您只能使用服务器的 DNS 名称登录。
解决方案:使用 Chef 服务器的 DNS 名称条目而不是其 IP 地址来登录 Chef Automate 控制面板。您也可通过运行 AWS CLI 命令尝试重置 Chef Automate 控制面板凭证,如 重置 Chef Automate 控制面板的凭证中所述。
无人参与节点关联失败
问题:新的 Amazon EC2 节点的无人参与或自动关联失败。应该已经添加到 Chef 服务器的节点未显示在 Chef Automate 控制面板中,并且未在 knife client show
或 knife node show
命令的结果中列出。
原因:当您未将 IAM 角色设置为允许 opsworks-cm
API 调用与新的 EC2 实例通信的实例配置文件时,可能会出现此问题。
解决方案:将一个策略附加到您的 EC2 实例配置文件以允许 AssociateNode
和 DescribeNodeAssociationStatus
API 调用与 EC2 一起工作,如在中自动添加节点 AWS OpsWorks for Chef Automate中所述。
系统维护失败
AWS OpsWorks CM 每周执行系统维护,以确保最新次要版本的 Chef Server 和 Chef Automate Server(包括安全更新)始终在 AWS OpsWorks for Chef Automate 服务器上运行。如果由于任何原因导致系统维护失败,则 AWS OpsWorks CM 会通知您该故障。有关系统维护的更多信息,请参阅 中的系统维护 AWS OpsWorks for Chef Automate。
本节介绍可能的失败原因并提出解决方案。
服务角色或实例配置文件错误会阻止系统维护
问题:系统维护失败,并显示一条错误消息,上面写着 “未授权执行 sts:AssumeRole” 或类似的权限错误消息。
原因:当您使用的服务角色或实例配置文件缺少在服务器上执行系统维护的足够权限时,可能会发生这种情况。
解决方案:确保您的服务角色和实例配置文件具有所有必需的权限。
请确保您的服务角色具有所有必需的权限。
在服务器的设置页面上,在网络和安全中,选择服务器正在使用的服务角色的链接。这将将服务角色打开以供在 IAM 控制台中查看。
在权限选项卡上,验证
AWSOpsWorksCMServiceRole
是否已附加到该服务角色。如果AWSOpsWorksCMServiceRole
未列出,则将此策略添加到角色。验证 opsworks-cm.amazonaws.com 在角色的 Trust Relationships 中随服务一起列出。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或 AWS 安全博客文章《如何在 IAM 角色中使用信任策略》
。
请确保您的实例配置文件具有所有必需的权限。
在服务器的设置页面上,在网络和安全中,选择服务器正在使用的实例配置文件的链接。这将打开实例配置文件以在 IAM 控制台中查看。
在权限选项卡上,确认
AmazonEC2RoleforSSM
和AWSOpsWorksCMInstanceProfileRole
是否在权限策略列表中。如果未列出其中一个或两个托管策略,请手动将这些托管策略添加到角色中。在信任关系选项卡上,验证服务角色是否具有信任
ec2.amazonaws.com
服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或 AWS 安全博客文章《如何在 IAM 角色中使用信任策略》。
其他帮助和支持
如果本主题没有描述您的特定问题,或者您已尝试本主题中的建议,但问题仍然存在,请访问 AWS OpsWorks
论坛
您也可访问 AWS Support Center