📅  最后修改于: 2023-12-03 15:21:35.774000             🧑  作者: Mango
在现代互联网应用程序中,安全性是至关重要的。使用 SSL 证书可以为应用程序提供更高的安全性,使用户可以安全地与应用程序通信。使用 cert-manager 可以轻松地管理证书的颁发和续订过程。但如果您需要从同一个 CA 中签署多个证书,该怎么办呢?在本文中,我们将介绍如何使用 cert-manager 从同一个 CA 签署多个证书。
首先,您需要部署 cert-manager。cert-manager 是一个 Kubernetes 的 controller,可以自动颁发和管理 TLS 证书。您可以从 cert-manager 的官方网站上获得相关信息。
在使用 cert-manager 之前,您需要生成一个 CA 证书。以下是一个示例配置文件,可用于生成 CA 证书。
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: ca-issuer
spec:
ca:
secretName: ca-secret
您可以使用 kubectl apply
命令将此配置文件应用于 Kubernetes 集群。
为了使用 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 集群。
使用以下配置文件,您可以颁发一个证书。
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 的证书和私钥。
现在,您已经颁发了一个证书,接下来我们将看看如何颁发多个证书。
要颁发多个证书,您需要在 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 中签署多个证书。通过遵循以上步骤,您可以轻松地颁发多个证书,同时保持每个证书的独立性。