主体备用名称 (SAN) 是 SSL 证书的一项功能,可让您定义由证书提供安全保护的域名和子网域。在 Google Distributed Cloud 集群上,Kubernetes API 服务器证书的默认 SAN 包含控制平面节点的 IP 和 VIP 地址以及 Kubernetes DNS 名称。借助自定义 API 服务器证书额外 SAN 功能,您可以将其他网域、子网域和 IP 地址作为 SAN 添加到集群的 Kubernetes API 服务器证书。
如需为 API 服务器证书指定自定义 SAN,请使用集群配置规范中的 controlPlane.apiServerCertExtraSANs
字段。此字段接受域名和 IP 地址列表。此字段是可选字段且可变。您可以在创建集群时或之后的任何时间添加和更新此字段。
...
kind: Cluster
metadata:
name: sample001
namespace: cluster-sample001
spec:
type: user
...
controlPlane:
apiServerCertExtraSANs:
- "demo-dns.example.com"
- "sample-dns.com"
nodePoolSpec:
nodes:
- address: 10.200.0.20
clusterNetwork:
...
在创建集群期间添加网域
如果您在创建集群时添加额外的 SAN,则 Kubernetes API 服务器证书会在集群可用时包含其他指定的网域和 IP 地址。
为现有集群添加或更新网域
由于 apiServerCertExtraSANs
字段是可变的,因此您可以随时为现有集群添加或更新该字段。修改集群中的 apiServerCertExtraSANs
字段时,会触发以下活动:
Google Distributed Cloud 集群控制器会重新生成 API 服务器证书,以包含修改后的额外网域。
集群控制器会重启 API 服务器以重新加载新证书。
Webhook 会验证
apiServerCertExtraSANs
的新值,以确保其符合 RFC 1035 域名命名惯例。控制平面节点池进入正在协调状态。
Control Plane Node Pool Status: Anthos Bare Metal Version: 1.28.0-gke.435 Anthos Bare Metal Versions: 1.28.0-gke.435: 3 Conditions: ... Last Transition Time: 2023-11-15T18:23:49Z Observed Generation: 1 Reason: Reconciling Status: True Type: Reconciling
更改传播到每个控制平面节点上的 Kubernetes API 服务器后,节点池就会变为就绪状态。
Control Plane Node Pool Status: Anthos Bare Metal Version: 1.28.0-gke.435 Anthos Bare Metal Versions: 1.28.0-gke.435: 3 Conditions: . . . Last Transition Time: 2023-11-15T18:32:25Z Observed Generation: 1 Reason: ReconciliationCompleted Status: False Type: Reconciling
在运行中的集群上更新 API 服务器证书额外 SAN 字段时,您可能会遇到停机:
在高可用性 (HA) 集群中,API 服务器实例会依序重启。在证书更新期间,您仍然可以与集群进行交互,因为负载均衡器会将请求分发到每个 API 服务器。不过,您可能会看到响应,指明 API 服务器正在关闭。如果您看到此响应,请重试请求。
在非 HA 集群中,在 API 服务器重启以重新加载新证书时,可能会出现大约一分钟的短暂服务中断。
更改需要 5-20 分钟才能传播到所有 API 服务器,具体取决于集群中的控制平面节点数和集群的负载。