当前位置: 首页 > news >正文

Kubernetes证书管理实战:cert-manager部署与CRD导出

cert-manager 部署验证与资源导出实战:从基础到实操

在 Kubernetes 集群中,cert-manager 是一款核心的证书管理工具,能够自动完成 TLS 证书的签发、续期与轮换,支持 Let's Encrypt、HashiCorp Vault 等多种证书源。本文将围绕 “验证 cert-manager 部署”“导出 CRD 列表”“提取 Certificate 字段文档” 三大核心任务,拆解操作步骤、讲解底层知识点,并规避题目中的失分风险。

一、前置认知:cert-manager 核心概念与组件

在实操前,需先明确 cert-manager 的核心构成,这是后续验证和操作的基础:

  • 核心功能:自动化 TLS 证书生命周期管理,解决手动申请、续期证书的繁琐问题;
  • 核心组件(默认部署在 cert-manager 命名空间):
    1. cert-manager-controller:核心控制器,监听 Certificate、Issuer 等资源,触发证书签发流程;
    1. cert-manager-webhook:提供 Kubernetes API 扩展,用于证书资源的校验和 Admission Webhook;
    1. cert-manager-cainjector:自动向 Pod 注入 CA 证书,确保集群内服务信任 cert-manager 签发的证书;
  • 定制资源定义(CRD):cert-manager 通过 CRD 扩展 Kubernetes 资源,核心 CRD 包括:
    • certificates.cert-manager.io:定义需要签发的 TLS 证书(核心 CR,本次任务涉及);
    • issuers.cert-manager.io:命名空间级别的证书签发者(如自签 CA);
    • clusterissuers.cert-manager.io:集群级别的证书签发者(如 Let's Encrypt);
    • 其他辅助 CRD(如 certificaterequests.cert-manager.io、orders.cert-manager.io)。

二、任务一:验证 cert-manager 部署有效性

在执行资源导出前,必须先确认 cert-manager 已正常部署,否则后续操作会因 CRD 缺失或组件异常失败。验证步骤分 3 步:

2.1 检查 cert-manager 命名空间与组件状态

cert-manager 默认部署在 cert-manager 命名空间(若自定义命名空间,需替换对应名称),先检查该命名空间是否存在,再确认核心 Pod 状态:

 
# 1. 检查 cert-manager 命名空间是否存在kubectl get ns | grep cert-manager# 2. 检查核心 Pod 是否均为 Running 状态(3个组件缺一不可)kubectl get pod -n cert-manager

预期结果

  • 命名空间输出:cert-manager Active 1d(Active 表示正常);
  • Pod 输出(3 个 Pod 均为 Running):
 
NAME READY STATUS RESTARTS AGEcert-manager-5f98d7769d-xxxx 1/1 Running 0 1dcert-manager-cainjector-7d4f9c6b8d-xxxx 1/1 Running 0 1dcert-manager-webhook-587f6d765-xxxx 1/1 Running 0 1d

排查点:若 Pod 处于 Pending/Error 状态,需检查资源是否充足(kubectl describe pod <pod名> -n cert-manager)、镜像是否拉取成功。

2.2 检查 cert-manager Deployment 状态

Deployment 是 Pod 的控制器,确保 Pod 按预期运行,检查 Deployment 状态:

 
kubectl get deploy -n cert-manager

预期结果:3 个 Deployment 的 READY 列均为 1/1(表示期望副本数 = 运行副本数):

 
NAME READY UP-TO-DATE AVAILABLE AGEcert-manager 1/1 1 1 1dcert-manager-cainjector 1/1 1 1 1dcert-manager-webhook 1/1 1 1 1d

2.3 检查 cert-manager CRD 是否存在

CRD 是 cert-manager 功能的基础,需确认其核心 CRD 已创建:

 
# 过滤 cert-manager 相关的 CRD(通过标签筛选,避免获取所有集群 CRD)kubectl get crd -l app.kubernetes.io/name=cert-manager

预期结果:输出 5 个左右 cert-manager 相关 CRD,包含 certificates.cert-manager.io(后续任务需用到):

 
NAME CREATED ATcertificates.cert-manager.io 2025-09-30T08:00:00Zcertificaterequests.cert-manager.io 2025-09-30T08:00:00Zclusterissuers.cert-manager.io 2025-09-30T08:00:00Zissuers.cert-manager.io 2025-09-30T08:00:00Zorders.cert-manager.io 2025-09-30T08:00:00Z

三、任务二:导出 cert-manager CRD 列表到~/resources.yaml

题目要求:使用 kubectl 默认输出格式,将 cert-manager 所有 CRD 列表保存到~/resources.yaml,核心是 “精准过滤 cert-manager CRD” 和 “不自定义输出格式”。

3.1 关键理解:为何要过滤 CRD?

Kubernetes 集群中可能存在其他组件的 CRD(如 Prometheus、Istio),若直接执行 kubectl get crd > ~/resources.yaml,会包含无关 CRD,不符合 “cert-manager 所有 CRD” 的要求。因此必须通过标签筛选精准定位 cert-manager 的 CRD。

cert-manager 安装时会为所有 CRD 自动添加标签 app.kubernetes.io/name=cert-manager,这是过滤的关键依据。

3.2 执行导出命令

 
# 命令解析:# 1. kubectl get crd:获取所有 CRD 资源# 2. -l app.kubernetes.io/name=cert-manager:过滤 cert-manager 相关 CRD# 3. > ~/resources.yaml:将输出保存到 ~/resources.yaml(默认输出格式)kubectl get crd -l app.kubernetes.io/name=cert-manager > ~/resources.yaml

3.3 验证导出结果

确保文件已生成且内容正确:

 
# 1. 检查文件是否存在ls -l ~/resources.yaml# 2. 查看文件前几行,确认包含 cert-manager CRDhead ~/resources.yaml

预期结果

  • 文件存在:-rw-r--r-- 1 user user 1234 Oct 1 10:00 ~/resources.yaml;
  • 内容开头包含:
 
NAME CREATED ATcertificates.cert-manager.io 2025-09-30T08:00:00Zcertificaterequests.cert-manager.io 2025-09-30T08:00:00Z

失分点规避:切勿添加 -o yaml/-o json 等自定义输出格式,题目明确要求 “使用 kubectl 默认输出格式”(默认是表格格式,保存到文件后为文本表格,符合要求)。

四、任务三:提取 Certificate subject 规范文档到~/subject.yaml

题目要求:使用 kubectl 提取定制资源 Certificate 的 subject 规范字段文档,保存到~/subject.yaml,核心是掌握 kubectl explain 命令(用于查看资源字段的说明文档)。

4.1 关键认知:Certificate 资源与 subject 字段

  • Certificate 是 cert-manager 的核心 CR(定制资源),用于定义 “需要签发的 TLS 证书”,其资源名称为 certificates(复数),shortname 为 cert;
  • subject 字段位于 Certificate.spec 下,用于定义 TLS 证书的 “主题信息”(如 Common Name、Organization、Country 等),是证书签发的关键配置。

4.2 执行提取命令

使用 kubectl explain 查看 certificate.spec.subject 的文档,并保存到文件:

 
# 命令解析:# 1. kubectl explain:查看资源字段的说明文档# 2. certificate.spec.subject:字段路径(资源名.层级.目标字段)# 3. > ~/subject.yaml:将文档保存到目标文件kubectl explain certificate.spec.subject > ~/subject.yaml

4.3 验证提取结果

查看文件内容,确认包含 subject 字段的详细说明:

 
cat ~/subject.yaml

预期结果:文件包含字段类型、描述、子字段(如 commonName、organization)的说明:

 
KIND: CertificateVERSION: cert-manager.io/v1FIELD: subject <Object>DESCRIPTION:Subject contains the subject attributes of the certificate. This is used inthe CertificateRequest created by cert-manager, which is then used by theissuer to generate the certificate.FIELDS:commonName <string>CommonName is the common name (CN) of the certificate. This is typicallythe domain name(s) that the certificate will be valid for.country []stringCountry is the country (C) attribute of the certificate subject.locality []stringLocality is the locality (L) attribute of the certificate subject.organization []stringOrganization is the organization (O) attribute of the certificate subject.organizationalUnit []stringOrganizationalUnit is the organizational unit (OU) attribute of thecertificate subject.postalCode []stringPostalCode is the postal code (PC) attribute of the certificate subject.province []stringProvince is the province (ST) attribute of the certificate subject.streetAddress []stringStreetAddress is the street address (STREET) attribute of the certificatesubject.

灵活处理:若需更详细的子字段文档(如 subject.organization),可执行 kubectl explain certificate.spec.subject.organization >> ~/subject.yaml,题目允许任何 kubectl 支持的输出格式,默认格式即可满足要求。

五、核心知识点总结(避坑关键)

  1. CRD 与定制资源(CR)的区别
    • CRD 是 “资源定义”(如 certificates.cert-manager.io),相当于 “数据库表结构”;
    • CR 是 “资源实例”(如某个域名的证书配置),相当于 “数据库表中的一行数据”;
    • 本次任务二导出的是 CRD(定义),任务三操作的是 CR 的字段(实例的配置)。
  1. kubectl 默认输出格式
    • kubectl get 命令默认输出 表格格式(文本,包含 NAME、CREATED AT 等列);
    • 题目禁止 “设置输出格式”,即不可使用 -o yaml/-o json/-o custom-columns 等,仅需直接重定向输出到文件。
  1. cert-manager 标签筛选逻辑
    • 官方安装的 cert-manager 组件(Pod、Deployment、CRD)均带有标签 app.kubernetes.io/name=cert-manager,这是精准过滤的 “黄金标签”,避免误操作其他资源。
  1. kubectl explain 命令用法
    • 语法:kubectl explain <资源名>.<层级1>.<层级2>.<目标字段>;
    • 作用:查看任何 Kubernetes 资源(包括 CR)的字段说明,解决 “不知道字段怎么配置” 的问题,是运维必备工具。

六、常见问题与排查方案

问题现象

可能原因

解决方案

执行 kubectl get crd -l... 无输出

1. cert-manager 未安装;2. 标签错误(如自定义安装时未加默认标签)

1. 重新安装 cert-manager;2. 用 `kubectl get crd

执行 kubectl explain certificate.spec.subject 报错 “error: could not find resource type for "certificate"”

Certificate CRD 未部署或未就绪

1. 检查 CRD:kubectl get crd certificates.cert-manager.io;2. 若不存在,重启 cert-manager 控制器:kubectl rollout restart deploy cert-manager -n cert-manager

~/resources.yaml 包含非 cert-manager CRD

未加标签筛选,直接执行了 kubectl get crd > ~/resources.yaml

删除文件,重新执行带 -l 标签的命令

七、操作文档整理(直接复用)

为方便实际操作,整理以下可直接复制的文档:

cert-manager 验证与资源导出操作文档

1. 验证 cert-manager 部署
 
# 1.1 检查命名空间kubectl get ns | grep cert-manager# 1.2 检查核心 Pod 状态kubectl get pod -n cert-manager# 1.3 检查 Deployment 状态kubectl get deploy -n cert-manager# 1.4 检查 CRD 存在性kubectl get crd -l app.kubernetes.io/name=cert-manager
2. 导出 cert-manager CRD 列表到~/resources.yaml
 
kubectl get crd -l app.kubernetes.io/name=cert-manager > ~/resources.yaml# 验证结果ls -l ~/resources.yamlhead ~/resources.yaml
3. 提取 Certificate subject 规范文档到~/subject.yaml
 
kubectl explain certificate.spec.subject > ~/subject.yaml# 验证结果cat ~/subject.yaml
4. 最终确认(可选)
 
# 确认两个文件均存在且非空echo "resources.yaml 大小:$(du -sh ~/resources.yaml | awk '{print $1}')"echo "subject.yaml 大小:$(du -sh ~/subject.yaml | awk '{print $1}')"

http://www.dtcms.com/a/430810.html

相关文章:

  • [Java]PTA: jmu-Java-02基本语法-08-ArrayList入门
  • 网站建设背景及目的搜索优化的培训免费咨询
  • 2012 年真题配套词汇单词笔记(考研真相)
  • Ubuntu20.04 按照飞浆paddle 3.2遇到的问题
  • 网站建设推荐郑国华做网站ps图片都是多大
  • 探索 Docker/K8s 部署 MySQL 的创新实践与优化技巧
  • 线程属性的相关设置详解
  • 深圳公明网站建设桂林北站到阳朔
  • maven的概述以及在mac安装配置
  • 【复习】计网强化第一章
  • 【微信公众平台】小程序如何查找菜单?如何通过自定义的菜单路径生成小程序二维码?小程序二维码指定生成
  • 瑞萨M85内核芯片再出1GHz旗舰双核新品RA8T2,两个千兆以太网MAC,集成EtherCAT从机接口,面向高端电机控制
  • 海洋公园网站建设方案网站开发加设计要多少钱
  • KingbaseES 的 SQL Server 兼容性测试
  • 基于ps2021实现1寸相纸的打印
  • [论文阅读] AI + 软件工程 | 从“事后补救”到“实时防控”,SemGuard重塑LLM代码生成质量
  • 购物网站修改文案常见的网络推广方法有几种
  • 手腕鼓包?可能是腱鞘囊肿
  • 网站推广方法有网站制作哪家做的好
  • Servlet 国际化
  • 安卓基础组件016--Toas组件
  • InfiniBand技术解析(2):为什么它是高性能计算的 “超级血管”?
  • 微商本地化发展模式的借鉴与探讨——以开源AI智能名片链动2+1模式S2B2C商城小程序为例
  • 基于遗传优化的LSTM-Attention一维时间序列预测算法matlab仿真
  • 深圳公司 网站建设广州做网站公司哪家好
  • 多个wordpress网站合并成品源码1688网站免费
  • macOS/Linux ClaudeCode 安装指南及 Claude Sonnet 4.5 介绍
  • [创业之路-640]:通信行业供应链 - 通信网的发展趋势:IP化统一 、云网融合 、算网协同 、FMC(固定移动融合)、空天地一体化
  • IP 地址管理:IPv4 和 IPv6 地址规划、子网划分与 CIDR
  • router-id <ip-address> 概念及题目