From 30b161014462a35e597ca1a7a459949bf9177078 Mon Sep 17 00:00:00 2001 From: zhangx501 Date: Sun, 15 Sep 2019 20:46:37 +0800 Subject: [PATCH] Create zh-trans:kubeadm-certs.md (#16274) --- .../kubeadm/zh-trans:kubeadm-certs.md | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 content/zh/docs/tasks/administer-cluster/kubeadm/zh-trans:kubeadm-certs.md diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/zh-trans:kubeadm-certs.md b/content/zh/docs/tasks/administer-cluster/kubeadm/zh-trans:kubeadm-certs.md new file mode 100644 index 0000000000..0ac9776361 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/zh-trans:kubeadm-certs.md @@ -0,0 +1,247 @@ +--- +reviewers: +- sig-cluster-lifecycle +title: 使用 kubeadm 进行证书管理 +content_template: templates/task +--- + + +{{% capture overview %}} + + +本页介绍如何使用 kubeadm 手动管理证书。 + +{{% /capture %}} + +{{% capture prerequisites %}} + + +这些是需要将其组织的证书基础机构集成到 kubeadm 构建的集群中的用户的高级主题。如果具有默认配置的 kubeadm 满足您的需求,您应该让 kubeadm 管理证书。 + + +您应该熟悉[Kubernetes 中的 PKI 证书和要求](/docs/setup/best-practices/certificates/)。 + +{{% /capture %}} + +{{% capture steps %}} + + +## 使用证书 API 更新证书 + + +Kubernetes 证书通常在一年后到期。 + + +Kubeadm 可以使用`kubeadm alpha certs renew`命令更新证书;您应该只在控制平面节点上运行这些命令。 + + +通常,这是通过加载磁盘CA证书和密钥并使用它们来颁发新证书来完成的。 +如果证书树是自包含的,则此方法很有效。 +然而,如果您的证书是外部管理的,您可能需要一个不同的方法。 + + +作为替代方案,Kubernetes 提供了自己的[用于管理证书的 API][manage-tls]。 +使用 kubeadm,您可以通过运行`kubeadm alpha certs renew --use-api`来使用此 API。 + + +## 设置签名者 + + +Kubernetes 证书颁发机构不是开箱即用。 +你可以配置外部签名者,例如[cert-manager][cert-manager-issuer],也可以使用内置签名者。 +内置签名者是[`kube-controller-manager`][kcm]的一部分。 +要激活内置签名者,请传递`--cluster-signing-cert-file` 和 `--cluster-signing-key-file`参数。 + + +您可以通过以下任何方式传递这些参数: + + +* 编辑`/etc/kubernetes/manifests/kube-controller-manager.yaml`将参数添加到命令中。 + 请记住,升级时可能会覆盖您的更改。 + + +* 如果您要创建新集群,可以使用 kubeadm[配置文件][config]: + + ```yaml + apiVersion: kubeadm.k8s.io/v1beta1 + kind: ClusterConfiguration + controllerManager: + extraArgs: + cluster-signing-cert-file: /etc/kubernetes/pki/ca.crt + cluster-signing-key-file: /etc/kubernetes/pki/ca.key + ``` + + +* 您也可以使用[`kubeadm config upload from-files`][config-upload]上传配置文件 + +[cert-manager-issuer]: https://cert-manager.readthedocs.io/en/latest/tutorials/ca/creating-ca-issuer.html +[kcm]: /docs/reference/command-line-tools-reference/kube-controller-manager/ +[config]: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1 +[config-upload]: /docs/reference/setup-tools/kubeadm/kubeadm-config/#cmd-config-from-file + + + +### 批准请求 + + +如果您设置例如[cert-manager][cert-manager]等外部签名者,则会自动批准证书签名请求(CSRs)。 +否者,您必须使用[`kubectl certificate`][certs]命令手动批准证书。 +以下 kubeadm 命令输出要批准的证书名称,然后缓慢等待批准发生: + +```shell +sudo kubeadm alpha certs renew apiserver --use-api & +``` +``` +[1] 2890 +[certs] certificate request "kubeadm-cert-kube-apiserver-ld526" created +``` +```shell +kubectl certificate approve kubeadm-cert-kube-apiserver-ld526 +certificatesigningrequest.certificates.k8s.io/kubeadm-cert-kube-apiserver-ld526 approved +[1]+ Done sudo kubeadm alpha certs renew apiserver --use-api +``` + + +您可以使用`kubectl get csr`查看待处理证书列表。 + +[manage-tls]: /docs/tasks/tls/managing-tls-in-a-cluster/ +[cert-manager]: https://github.com/jetstack/cert-manager +[certs]: /docs/reference/generated/kubectl/kubectl-commands#certificate + + +## 使用 kubeadm 的证书请求 + + +为了更好的与外部 CA 集成,kubeadm 还可以生成证书签名请求(CSR)。 +CSR 表示向 CA 请求客户的签名证书。 +在 kubeadm 术语中,通常由磁盘 CA 签名的任何证书都可以作为 CSR 生成。但是,CA 不能作为 CSR 生成。 + + +您可以使用`kubeadm init phase certs apiserver --csr-only`创建单独的 CSR。 +`--csr-only`标志只能应用于各个阶段。在[所有证书到位][证书]之后, 您可以运行`kubeadm init --external-ca`。 + + +您可以传入一个带有`--csr-dir`的目录,将 CRS 输出到指定位置。 +如果未指定`--csr-dir`,则使用默认证书目录(`/etc/kubernetes/pki`)。 +CSR 和随附的私钥都在输出中给出。签署证书后,必须将证书和私钥复制到 PKI 目录(默认情况下为`/etc/kubernetes/pki`)。 + + +### 更新证书 + + +可以使用`kubeadm alpha certs renew --csr-only`更新证书。 +与`kubeadm init`一样,可以使用`--csr-dir`标志指定输出目录。 +要使用新证书,请将签名证书和私钥复制到 PKI 目录中(默认情况下为`/etc/kubernetes/pki`) + + +## 证书使用 + + +CSR 包含证书的名称、域和 IP,但不指定用法。 +CA 颁发证书时,有责任指定[正确的证书用法][证书表] 。 + + +* 在 `openssl`中,这是通过 [`openssl ca` command][openssl-ca]完成的。 +* 在 `cfssl` 中指定 [配置文件中的用法][cfssl-usages] + + +## CA 选择 + + +Kubeadm 默认设置[三个 CA][cert-cas]。确保使用相应的 CA 对 CSR 进行签名。 + + +[openssl-ca]: https://superuser.com/questions/738612/openssl-ca-keyusage-extension +[cfssl-usages]: https://github.com/cloudflare/cfssl/blob/master/doc/cmd/cfssl.txt#L170 +[证书]: /docs/setup/best-practices/certificates/ +[cert-cas]: /docs/setup/best-practices/certificates/#single-root-ca +[cert-table]: /docs/setup/best-practices/certificates/#all-certificates + +{{% /capture %}}