轮替服务账号密钥

本页面介绍如何轮替以下服务账号的密钥:

如需轮替您的服务账号密钥,请执行以下操作:

  1. 创建用于存储当前 Secret 备份的目录:

    mkdir backup
  2. 请注意相关服务账号的以下信息:

    组件访问权限

    集群 Secret 命名空间
    管理控制台 管理员集群凭据 kube-system
    管理 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    管理 private-registry-creds kube-system
    用户 private-registry-creds kube-system
    • 如果您使用的不是私有注册表,则 private-registry-creds Secret 会包含您的组件访问服务帐号的密钥。
    • 如果您使用私有注册表,则 private-registry-creds Secret 会存储私有注册表的凭据,而不是组件访问服务账号密钥。

    Connect-register

    集群 Secret 命名空间
    管理控制台 管理员集群凭据 kube-system
    管理 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt

    Logging-monitoring

    集群 Secret 命名空间
    管理控制台 管理员集群凭据 kube-system
    管理 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    用户 google-cloud-credentials kube-system
    用户 stackdriver-service-account-key knative-serving

    审核日志记录

    集群 Secret 命名空间
    管理控制台 管理员集群凭据 kube-system
    管理 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    管理 kube-apiserver CLUSTER_NAME

    用量计量

    集群 Secret 命名空间
    管理 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    用户 usage-metering-bigquery-service-account-key kube-system

    Stackdriver

    集群 Secret 命名空间
    管理控制台 管理员集群凭据 kube-system
    管理 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    用户 google-cloud-credentials kube-system
    用户 stackdriver-service-account-key knative-serving
  3. 使用以下命令为每个 Secret 创建备份:

    kubectl get secret SECRET --namespace NAMESPACE \
        --kubeconfig KUBECONFIG -o json > backup/SECRET-NAMESPACE.json

    请替换以下内容:

    • NAMESPACE:Secret 所在的命名空间。例如 kube-system
    • KUBECONFIG:管理员集群或用户集群的 kubeconfig 文件的路径。
    • SECRET:Secret 的名称。例如 admin-cluster-creds

    例如,为审核日志服务账号运行以下命令:

    kubectl get secret admin-cluster-creds --namespace kube-system \
            --kubeconfig KUBECONFIG -o json > backup/admin-cluster-creds-kube-system.json
    
    kubectl get secret user-cluster-creds --namespace NAMESPACE \
            --kubeconfig KUBECONFIG -o json > backup/user-cluster-creds-NAMESPACE.json
    
    kubectl get secret kube-apiserver --namespace NAMESPACE \
            --kubeconfig KUBECONFIG -o json > backup/kube-apiserver-NAMESPACE.json
  4. 如需创建新的服务账号密钥文件,请运行以下命令:

    gcloud iam service-accounts keys create NEW_KEY_FILE --iam-account IAM_ACCOUNT

    请替换以下内容:

    • NEW_KEY_FILE:新的服务账号密钥文件的名称
    • IAM_ACCOUNT:服务账号的电子邮件地址
  5. 在管理员集群配置文件中,找到 componentAccessServiceAccountKeyPath 字段、gkeConnect 部分、stackdriver 部分和 cloudAuditLogging 部分。在这些位置,替换服务账号密钥文件的路径。

  6. 在用户集群配置文件中,找到 componentAccessServiceAccountKeyPath 字段、gkeConnect 部分、stackdriver 部分、cloudAudigLogging 部分以及 usageMetering 部分。在这些位置,替换服务账号密钥文件的路径。

  7. 运行以下命令以保存您所做的更改。您可以一次轮替一个组件的密钥,也可以通过将该组件设置为 sakeys 来同时轮替所有密钥:

    gkectl update credentials COMPONENT \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config ADMIN_CLUSTER_CONFIG \
        --admin-cluster
    
    gkectl update credentials COMPONENT \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config USER_CLUSTER_CONFIG
    

    替换以下内容:

    • COMPONENT:以下各项中的一项:

      • componentaccess
      • register
      • cloudauditlogging
      • usagemetering
      • stackdriver
      • sakeys(轮替多个组件的密钥。)
    • ADMIN_CLUSTER_KUBECONFIG:管理员集群的 kubeconfig 文件的路径。

    • ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径。

    • USER_CLUSTER_CONFIG:用户集群配置文件的路径。

节点重新创建

某些服务帐号密钥轮替可能需要更长时间,因为需要重新创建节点:

服务账号 需要重新创建节点
组件访问权限 如果使用 Container Registry:是
如果使用的是私有注册表:否
审核日志记录 管理员集群:是
启用了 Contrlplane V2 的用户集群:是,但仅限控制平面节点
Logging-monitoring
Connect-register
用量计量

对于需要重新创建节点的密钥轮替,会在滚动更新过程中替换节点;也就是说,逐个重新创建节点。

密钥轮替期间可能的停机时间与集群升级的停机时间类似。如需了解详情,请参阅升级期间的停机时间

恢复备份

如果您需要恢复之前创建的 Secret 的备份,请运行以下命令:

kubectl apply -f backup/