Azure Arc 启用的 AKS 中的证书管理概述

适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

由 Azure Arc 启用的 AKS 使用证书和基于令牌的身份验证的组合来保护负责平台内不同操作的服务(或代理)之间的通信。 基于证书的身份验证在授予对资源的访问权限之前使用数字证书来识别实体(代理、计算机、用户或设备)。

云代理

部署由 Arc 启用的 AKS 时,AKS 会安装用于在群集中执行各种功能的代理。 这些代理包括:

  • 云代理:负责基础平台业务流程的服务。
  • 节点代理:驻留在每个节点上的服务,执行虚拟机创建、删除等实际工作。
  • 密钥管理系统 (KMS) Pod:负责密钥管理的服务。
  • 其他服务:云操作员、证书管理器等。

AKS 中的云代理服务负责协调基础结构组件的创建、读取、更新和删除(CRUD)操作,例如虚拟机(VM)、虚拟网络接口(VNIC)和群集中的虚拟网络(VNET)。

若要与云代理进行通信,客户端需要预配证书以保护此通信。 每个客户端都需要一个与之关联的标识,该标识定义了与客户端关联的基于角色的访问控制 (RBAC) 规则。 每个标识由两个实体组成:

  • 一个令牌,用于初始身份验证,这会返回一个证书
  • 以及一个证书,在上述登录过程中获取,用于在任何通信中进行身份验证。

每个实体具有特定的有效期(默认为 90 天),在此期限结束时,该实体将会过期。 若要继续访问云代理,每个客户端需要续订证书并轮换令牌。

证书类型

Arc 启用的 AKS 中使用了两种类型的证书:

  • 云代理 CA 证书:用于对客户端证书进行签名/验证的证书。 此证书有效期为 365 天(1 年)。
  • 客户端证书:由云代理 CA 证书颁发的证书,供客户端向云代理进行身份验证。 这些证书通常有效期为 90 天。

Microsoft 建议在新版本发布后 60 天内更新群集,这不仅是为了确保内部证书和令牌保持最新,而且是为了确保你能够访问新功能、bug 修复,并随时了解关键安全修补程序。 在这些每月更新期间,更新过程会轮换在群集正常操作期间无法自动轮换的任何令牌。 证书和令牌的有效性重置为默认值,自群集更新之日起 90 天。

通过 Arc 启用的 AKS 中保护与证书的通信

证书用于在群集内组件之间建立安全通信。 AKS 为内置 Kubernetes 组件提供零接触、现成预配和管理证书。 本文介绍如何在 Arc 启用的 AKS 中预配和管理证书。

证书和 CA

AKS 生成并使用以下证书颁发机构(CA)和证书。

群集 CA

  • API 服务器具有群集 CA,用于对证书进行从 API 服务器到 kubelet的单向通信签名。
  • 每个 kubelet 证书签名请求(CSR)也由群集 CA 签名,用于从 kubelet API 服务器进行通信。
  • etcd 密钥值存储具有群集 CA 签名的证书,用于从 etcd 与 API 服务器通信。

etcd CA

etcd 密钥值存储具有 etcd CA,用于对证书进行签名,以便在群集中的 etcd 副本之间进行身份验证和授权数据复制。

前端代理 CA

Front Proxy CA 保护 API 服务器与扩展 API 服务器之间的通信。

证书预配

证书预配 kubelet 是使用 TLS 引导完成的。 对于所有其他证书,请使用基于 YAML 的密钥和证书创建。

  • 证书存储在 /etc/kubernetes/pki 中。
  • 密钥为 RSA 4096、EcdsaCurve:P384

注意

根证书有效期为 10 年。 所有其他非根证书的生存期较短且有效期为四天。

证书续订和管理

非根证书会自动续订。 Kubernetes 的所有控制平面证书(管理以下证书除外):

  • Kubelet 服务器证书
  • Kubeconfig 客户端证书

作为安全最佳做法,应使用 Active Directory 单一登录 进行用户身份验证。

证书吊销

证书吊销应很少见,应在证书续订时完成。

获得要吊销的证书序列号后,请使用 Kubernetes 自定义资源来定义和保留吊销信息。 每个吊销对象可以包含一个或多个吊销条目。

若要执行吊销,请使用以下项之一:

  • 序列号
  • DNS 名称
  • IP 地址

可以指定一 notBefore 个时间,以仅撤销在特定时间戳之前颁发的证书。 如果未指定时间 notBefore ,将撤销与吊销匹配的所有现有和将来证书。

注意

服务器证书吊 kubelet 销当前不可用。

如果在执行吊销时使用序列号,可以使用 Repair-AksHciClusterCerts 下面所述的 PowerShell 命令使群集进入工作状态。 如果使用前面列出的其他任何字段,请确保指定时间 notBefore

apiVersion: certificates.microsoft.com/v1 
kind: RenewRevocation 
metadata: 
  name: my-renew-revocation 
  namespace: kube-system 
spec: 
  description: My list of renew revocations 
  revocations: 
  - description: Revoked certificates by serial number 
    kind: serialnumber 
    notBefore: "2020-04-17T17:22:05Z" 
    serialNumber: 77fdf4b1033b387aaace6ce1c18710c2 
  - description: Revoked certificates by group 
    group: system:nodes 
    kind: Group 
  - description: Revoked certificates by DNS 
    dns: kubernetes.default.svc. 
    kind: DNS 
  - description: Revoked certificates by DNS Suffix 
    dns: .cluster.local 
    kind: DNS 
  - description: Revoked certificates by IP 
    ip: 170.63.128.124 
    kind: IP 

后续步骤