将网域添加到 API 服务器证书

主题备用名称 (SAN) 是 SSL 证书的一项功能,可让您定义受证书保护的域名和子网域。在 GKE on Bare Metal 集群上,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 字段时,它会触发以下 activity:

  • GKE on Bare Metal 集群控制器会重新生成 API 服务器证书,以包含修改后的额外网域。

  • 集群控制器会重启 API 服务器以重新加载新证书。

  • apiServerCertExtraSANs 的新值由 webhook 验证,以确保它们符合 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 服务器正在关停的响应。如果您看到此响应,请重试请求。

  • 在非高可用性集群上,当 API 服务器重启以重新加载新证书时,可能会短暂中断大约一分钟。

更改需要 5-20 分钟才能传播到所有 API 服务器,具体取决于集群中的控制平面节点数量以及集群的负载。