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,该 CA 对证书进行签名,以用于从 API 服务器到 kubelet 的单向通信。
  • 每个 kubelet 还会创建证书签名请求 (CSR) ,该请求由群集 CA 签名,用于从 kubelet 到 API 服务器的通信。
  • etcd 键值存储具有由群集 CA 签名的证书,用于从 etcd 到 API 服务器的通信。

etcd CA

etcd 键值存储创建一个 etcd CA,该 CA 对证书进行签名,以便对群集中 etcd 副本之间的数据复制进行身份验证和授权。

前端代理 CA

前端代理 CA 保护 API 服务器和扩展 API 服务器之间的通信。

证书预配

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

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

注意

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

证书续订和管理

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

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

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

证书吊销

证书吊销应很少见,应在证书续订时进行。

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

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

  • 序列号
  • Group
  • 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 

后续步骤