📌  相关文章
📜  为了从同一个 CA + cert-manager 签署多个证书 (1)

📅  最后修改于: 2023-12-03 15:21:35.774000             🧑  作者: Mango

为了从同一个 CA + cert-manager 签署多个证书

简介

在现代互联网应用程序中,安全性是至关重要的。使用 SSL 证书可以为应用程序提供更高的安全性,使用户可以安全地与应用程序通信。使用 cert-manager 可以轻松地管理证书的颁发和续订过程。但如果您需要从同一个 CA 中签署多个证书,该怎么办呢?在本文中,我们将介绍如何使用 cert-manager 从同一个 CA 签署多个证书。

步骤
1. 部署 cert-manager

首先,您需要部署 cert-manager。cert-manager 是一个 Kubernetes 的 controller,可以自动颁发和管理 TLS 证书。您可以从 cert-manager 的官方网站上获得相关信息。

2. 生成 CA 证书

在使用 cert-manager 之前,您需要生成一个 CA 证书。以下是一个示例配置文件,可用于生成 CA 证书。

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: ca-issuer
spec:
  ca:
    secretName: ca-secret

您可以使用 kubectl apply 命令将此配置文件应用于 Kubernetes 集群。

3. 赋予 RBAC 权限

为了使用 cert-manager,您需要为 service account 授予正确的 RBAC 权限。以下是一个示例配置文件,可用于为指定的 service account 授予必要的权限。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: cert-manager
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "create"]
- apiGroups: ["cert-manager.io"]
  resources: ["orders", "certificates", "issuers", "clusterissuers"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cert-manager
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cert-manager
subjects:
- kind: ServiceAccount
  name: cert-manager
  namespace: cert-manager

您可以使用 kubectl apply 命令将此配置文件应用于 Kubernetes 集群。

4. 颁发证书

使用以下配置文件,您可以颁发一个证书。

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example
spec:
  commonName: example.com
  dnsNames:
  - example.com
  secretName: example-tls
  issuerRef:
    kind: Issuer
    name: ca-issuer
    apiGroup: cert-manager.io

这将在 example-tls 中创建一个 TLS 密钥和证书,使用名为 ca-issuer 的 Issuer 进行签署。这将创建一个名为 ca-secret 的 secret,其中包括 CA 的证书和私钥。

现在,您已经颁发了一个证书,接下来我们将看看如何颁发多个证书。

5. 颁发多个证书

要颁发多个证书,您需要在 Certificate 资源中使用不同的名称和密钥名称。以下是一个示例配置文件,可用于颁发多个证书。

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example
spec:
  commonName: example.com
  dnsNames:
  - example.com
  secretName: example-tls
  issuerRef:
    kind: Issuer
    name: ca-issuer
    apiGroup: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example2
spec:
  commonName: example2.com
  dnsNames:
  - example2.com
  secretName: example2-tls
  issuerRef:
    kind: Issuer
    name: ca-issuer
    apiGroup: cert-manager.io

这将颁发两个证书。请注意,Certificate 资源中指定的 secretName 必须是唯一的。因此,在颁发多个证书时,您需要为每个证书创建不同的密钥。

结论

在本文中,我们介绍了如何使用 cert-manager 从同一个 CA 中签署多个证书。通过遵循以上步骤,您可以轻松地颁发多个证书,同时保持每个证书的独立性。