{{item}}
{{item.title}}
{{items.productName}}
{{items.price}}/年
{{item.title}}
部警SSL证书可实现网站HTTPS加密保护及身份的可信认证,防止传输数据的泄露或算改,提高网站可信度和品牌形象,利于SEO排名,为企业带来更多访问量,这也是网络安全法及PCI合规性的必备要求
前往SSL证书OpenShift 作为基于 Kubernetes 的企业级容器平台,凭借其强大的多租户管理能力,被广泛应用于企业级应用部署。在多租户环境中,不同租户(团队、部门或外部组织)共享集群资源,但需保证数据与配置的隔离性,SSL证书作为保障通信安全的核心要素,其隔离部署尤为关键。本文将从多租户隔离模型出发,详细阐述在 OpenShift 中实现SSL证书隔离部署的技术方案与实践流程。
OpenShift 的多租户隔离通过命名空间(Project) 实现基础隔离,每个租户对应独立的命名空间,配合 RBAC(基于角色的访问控制)控制资源访问权限。在此基础上,隔离层次可进一步细化:
在多租户场景中,证书隔离需满足三个核心目标:
例如,金融行业的 OpenShift 集群中,零售业务租户与风控业务租户需使用各自的SSL证书,零售业务证书过期不应导致风控系统的 HTTPS 通信中断。
为实现证书的物理隔离,需为每个租户创建独立的命名空间,并遵循统一的命名规范(如 tenant-{租户ID} )。例如:
1 # 创建租户A的命名空间
2 oc new-project tenant-a --description="Tenant A production environment"
3 # 创建租户B的命名空间
4 oc new-project tenant-b --description="Tenant B production environment"
通过 oc get projects 命令可查看所有租户命名空间,确保每个租户的资源被严格限制在其专属命名空间内。
(1)Issuer 资源隔离:在 OpenShift 中,Issuer 是命名空间级别的资源,天然适合多租户场景。每个租户可在其命名空间内创建独立的 Issuer,例如租户 A 使用 Let's Encrypt,租户 B 使用企业私有 CA:
应用后,通过 oc get issuers -n tenant-a 和 oc get issuers -n tenant-b 可分别查看各租户的 Issuer,实现配置隔离。
1 apiVersion: cert-manager.io/v1
2 kind: Issuer
3 metadata:
4 name: tenant-a-letsencrypt
5 namespace: tenant-a
6 spec:
7 acme:
8 email: tenant-a-admin@example.com
9 server: https://acme-v02.api.letsencrypt.org/directory
10 privateKeySecretRef:
11 name: tenant-a-acme-key
12 solvers:
13 - http01:
14 ingress:
15 class: openshift-default
1 apiVersion: cert-manager.io/v1
2 kind: Issuer
3 metadata:
4 name: tenant-b-private-ca
5 namespace: tenant-b
6 spec:
7 ca:
8 secretName: tenant-b-ca-root # 租户B的私有CA根证书Secret
(2)证书与 Secret 隔离:Certificate 资源与存储证书的 Secret 均为命名空间级资源,需在租户命名空间内创建。例如租户 A 的证书配置:
1 apiVersion: cert-manager.io/v1
2 kind: Certificate
3 metadata:
4 name: tenant-a-api-cert
5 namespace: tenant-a
6 spec:
7 secretName: tenant-a-api-tls
8 issuerRef:
9 name: tenant-a-letsencrypt
10 kind: Issuer
11 dnsNames:
12 - api.tenant-a.example.com
创建后, tenant-a-api-tls Secret 仅存在于 tenant-a 命名空间,租户 B 的用户即使拥有集群查看权限,也无法通过 oc get secret -n tenant-a 获取该 Secret(需 RBAC 权限控制)。
为每个租户创建专属的角色与角色绑定,限制证书资源的访问范围。例如,为租户 A 的管理员创建 cert-manager-admin 角色:
1 apiVersion: rbac.authorization.k8s.io/v1
2 kind: Role
3 metadata:
4 name: cert-manager-admin
5 namespace: tenant-a
6 rules:
7 - apiGroups: ["cert-manager.io"]
8 resources: ["certificates", "issuers"]
9 verbs: ["get", "list", "create", "update", "delete"]
10 - apiGroups: [""]
11 resources: ["secrets"]
12 verbs: ["get", "list", "watch"] # 允许管理租户内的证书Secret
通过 RoleBinding 将该角色绑定到租户 A 的管理员用户:
1 apiVersion: rbac.authorization.k8s.io/v1
2 kind: RoleBinding
3 metadata:
4 name: tenant-a-cert-admin
5 namespace: tenant-a
6 subjects:
7 - kind: User
8 name: tenant-a-admin
9 apiGroup: rbac.authorization.k8s.io
10 roleRef:
11 kind: Role
12 name: cert-manager-admin
13 apiGroup: rbac.authorization.k8s.io
配置后,租户 A 的管理员仅能管理 tenant-a 命名空间内的证书资源,无法操作 tenant-b 的相关资源。
ClusterIssuer 作为集群级资源,可能被多个租户共享(如企业统一的私有 CA)。为防止租户滥用 ClusterIssuer,需通过 ClusterRole 限制其使用权限:
1 apiVersion: rbac.authorization.k8s.io/v1
2 kind: ClusterRole
3 metadata:
4 name: restricted-cluster-issuer-user
5 rules:
6 - apiGroups: ["cert-manager.io"]
7 resources: ["clusterissuers"]
8 verbs: ["get", "list", "watch"] # 仅允许查看ClusterIssuer,不允许创建/修改
9 - apiGroups: ["cert-manager.io"]
10 resources: ["certificates"]
11 verbs: ["create"]
12 resourceNames: ["cluster-issuer-shared"] # 仅允许使用指定的ClusterIssuer
通过 ClusterRoleBinding 将该角色绑定到租户用户,确保租户只能使用集群管理员允许的 ClusterIssuer,避免未授权的证书签发。
不同租户的证书颁发流程应完全隔离,避免依赖共享组件导致的故障传导:
1 oc create secret tls tenant-b-ca-root --cert=ca.crt --key=ca.key -n tenant-b
该 Secret 仅在 tenant-b 命名空间可见,确保私有 CA 的安全性。
Cert-Manager 的证书续期操作由控制器在租户命名空间内执行,通过以下机制实现故障隔离:
1 apiVersion: monitoring.coreos.com/v1
2 kind: PrometheusRule
3 metadata:
4 name: tenant-a-cert-alerts
5 namespace: tenant-a
6 spec:
7 groups:
8 - name: cert-manager.rules
9 rules:
10 - alert: TenantACertExpiringSoon
11 expr: certmanager_certificate_expiration_timestamp_seconds - time() < 86400 * 15
12 for: 5m
13 labels:
14 severity: warning
15 tenant: tenant-a
16 annotations:
17 summary: "Tenant A certificate expiring soon"
告警信息包含租户标签,确保运维人员能快速定位问题租户。
OpenShift 的 Route 资源(相当于 Kubernetes 的 Ingress)用于暴露服务,其 TLS 配置需与租户证书隔离适配:
1 apiVersion: route.openshift.io/v1
2 kind: Route
3 metadata:
4 name: tenant-a-api-route
5 namespace: tenant-a
6 spec:
7 host: api.tenant-a.example.com
8 to:
9 kind: Service
10 name: tenant-a-api-service
11 tls:
12 termination: edge
13 certificate: |-
14 -----BEGIN CERTIFICATE-----
15 ... # 租户A的证书内容(从tenant-a-api-tls Secret提取)
16 -----END CERTIFICATE-----
17 key: |-
18 -----BEGIN PRIVATE KEY-----
19 ... # 租户A的私钥内容
20 -----END PRIVATE KEY-----
21 caCertificate: |-
22 -----BEGIN CERTIFICATE-----
23 ... # 中间证书
24 -----END CERTIFICATE-----
通过以下方式简化 Route 与证书的关联:
1 tls:
2 termination: edge
3 certificateInlineFromSecret:
4 name: tenant-a-api-tls
5 key: tls.crt
6 certificateKey: tls.key
使用 Prometheus 与 Grafana 构建多租户证书监控系统:
1 apiVersion: monitoring.coreos.com/v1
2 kind: ServiceMonitor
3 metadata:
4 name: tenant-a-cert-monitor
5 namespace: openshift-monitoring
6 spec:
7 namespaceSelector:
8 matchNames:
9 - tenant-a
10 selector:
11 matchLabels:
12 app: cert-manager
13 endpoints:
14 - port: http-metrics
15 interval: 60s
OpenShift 的 Audit Log 记录所有证书资源的操作(创建、修改、删除),通过以下方式实现审计隔离:
1 rules:
2 - level: RequestResponse
3 resources:
4 - group: "cert-manager.io"
5 resources: ["certificates", "issuers", "clusterissuers"]
6 userGroups: ["system:authenticated"]
某大型企业的 OpenShift 集群包含三个租户:研发(dev-tenant)、测试(test-tenant)、生产(prod-tenant),其证书隔离部署步骤如下:
1 oc new-project dev-tenant
2 oc new-project test-tenant
3 oc new-project prod-tenant
1 oc apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml
1 oc apply -f dev-letsencrypt-issuer.yaml -n dev-tenant
2 oc apply -f dev-api-cert.yaml -n dev-tenant
1 oc create secret tls prod-ca-root --cert=prod-ca.crt --key=prod-ca.key -n prod-tenant
2 oc apply -f prod-private-issuer.yaml -n prod-tenant
3 oc apply -f prod-api-cert.yaml -n prod-tenant
1 oc apply -f dev-tenant-rbac.yaml -n dev-tenant
2 oc apply -f prod-tenant-rbac.yaml -n prod-tenant
1 apiVersion: networking.k8s.io/v1
2 kind: NetworkPolicy
3 metadata:
4 name: deny-cross-tenant-https
5 namespace: dev-tenant
6 spec:
7 podSelector: {}
8 policyTypes:
9 - Ingress
10 ingress:
11 - from:
12 - podSelector: {} # 仅允许租户内Pod通信
通过以上方案,企业可在共享 OpenShift 集群的同时,保障各租户 SSL 通信的安全性与独立性,满足多租户环境下的合规性与风险控制要求。
Dogssl.com拥有20年网络安全服务经验,提供构涵盖国际CA机构Sectigo、Digicert、GeoTrust、GlobalSign,以及国内CA机构CFCA、沃通、vTrus、上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!