View a markdown version of this page

通过断开网络连接获得主机凭证 - Amazon EKS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过断开网络连接获得主机凭证

EKS 混合节点与 AWS 系统管理器 (SSM) 混合激活和 AWS IAM 角色任意位置集成在一起,用于临时的 IAM 证书,用于通过 EKS 控制平面对节点进行身份验证。SSM 和 IAM 角色Anywhere都会自动刷新他们在本地主机上管理的临时证书。建议在集群中的混合节点上使用单一凭证提供商——无论是 SSM 混合激活还是随处使用 IAM 角色,但不能同时使用两者。

SSM 混合激活

SSM 提供的临时证书有效期为一小时。使用 SSM 作为凭证提供者时,您无法更改凭证有效期限。临时证书在到期前由 SSM 自动轮换,轮换不会影响您的节点或应用程序的状态。但是,当 SSM 代理和 SSM 区域终端节点之间出现网络连接断开时,SSM 无法刷新凭据,证书可能会过期。

如果 SSM 无法连接到 SSM 区域终端节点,则使用指数回退进行凭据刷新重试。在 SSM 代理版本3.3.808.0及更高版本(2024 年 8 月发布)中,指数回退上限为 30 分钟。根据网络断开的持续时间,SSM 最多可能需要 30 分钟才能刷新证书,并且混合节点在刷新凭据后才会重新连接到 EKS 控制平面。在这种情况下,您可以重新启动 SSM 代理以强制刷新凭据。当前 SSM 凭据刷新行为的副作用是,节点可能会在不同的时间重新连接,具体取决于每个节点上的 SSM 代理何时设法刷新其凭据。因此,你可能会看到 Pod 从尚未重新连接的节点转移到已经重新连接的节点。

获取 SSM 代理版本。您还可以查看 SSM 控制台的舰队管理器部分:

# AL2023, RHEL yum info amazon-ssm-agent # Ubuntu snap list amazon-ssm-agent

重新启动 SSM 代理:

# AL2023, RHEL systemctl restart amazon-ssm-agent # Ubuntu systemctl restart snap.amazon-ssm-agent.amazon-ssm-agent

查看 SSM 代理日志:

tail -f /var/log/amazon/ssm/amazon-ssm-agent.log

网络断开期间的预期日志消息:

INFO [CredentialRefresher] Credentials ready INFO [CredentialRefresher] Next credential rotation will be in 29.995040663666668 minutes ERROR [CredentialRefresher] Retrieve credentials produced error: RequestError: send request failed INFO [CredentialRefresher] Sleeping for 35s before retrying retrieve credentials ERROR [CredentialRefresher] Retrieve credentials produced error: RequestError: send request failed INFO [CredentialRefresher] Sleeping for 56s before retrying retrieve credentials ERROR [CredentialRefresher] Retrieve credentials produced error: RequestError: send request failed INFO [CredentialRefresher] Sleeping for 1m24s before retrying retrieve credentials

IAM Roles Anywhere

默认情况下,IAM Roles Anywhere 预置的临时证书有效期为一小时。您可以通过您的 IAM 随处角色配置文件中的durationSeconds字段配置 IAM Roles Anywhere 的凭证有效期。最长凭证有效期为 12 小时。您的混合节点 IAM 角色的MaxSessionDuration设置必须大于您的 IAM 角色任意位置配置文件中的durationSeconds设置。

使用 IAM Roles Anywhere 作为混合节点的凭证提供者时,网络断开后重新连接到 EKS 控制平面通常会在网络恢复后的几秒钟内发生,因为 kubelet 会根据aws_signing_helper credential-process需要调用以获取证书。尽管与混合节点或网络断开没有直接关系,但在使用 IAM Roles Anywhere 时,您可以配置证书到期通知和警报。有关更多信息,请参阅在 IAM 角色中自定义 Anywhere 中的通知设置