<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://blog.kali-team.cn/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https:&#x2F;&#x2F;blog.kali-team.cn</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>这是Web Feed，又称为Atom Feed，把现在的网址复制到新闻阅读器即可订阅本站文章。造访「About Feeds」来了解更多资讯。</tabi:about_feeds>
        <tabi:visit_the_site>造访网站</tabi:visit_the_site>
        <tabi:recent_posts>近期文章</tabi:recent_posts>
        <tabi:last_updated_on>更新于 $DATE</tabi:last_updated_on>
        <tabi:default_theme></tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>devsecops</tabi:current_section>
    </tabi:metadata><link rel="extra-stylesheet" href="https://blog.kali-team.cn/skins/arch.css?h=8b651815fde702215b07" /><title>Kali-Team - devsecops</title>
        <subtitle>三米前有蕉皮的博客</subtitle>
    <link href="https://blog.kali-team.cn/categories/devsecops/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://blog.kali-team.cn/categories/devsecops/" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2026-09-01T00:00:00+00:00</updated><id>https://blog.kali-team.cn/categories/devsecops/atom.xml</id><entry xml:lang="en">
        <title>安全开发-Rancher平台搭建</title>
        <published>2026-09-01T00:00:00+00:00</published>
        <updated>2026-09-01T00:00:00+00:00</updated>
        <author>
            <name>三米前有蕉皮</name>
        </author>
        <link rel="alternate" href="https://blog.kali-team.cn/blog/2026/09/安全开发-Rancher平台搭建/" type="text/html"/>
        <id>https://blog.kali-team.cn/blog/2026/09/安全开发-Rancher平台搭建/</id>
        
            <content type="html">&lt;h2 id=&quot;yi-qian-yan&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#yi-qian-yan&quot; aria-label=&quot;Anchor link for: yi-qian-yan&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
一、前言&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-1-bei-jing&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#1-1-bei-jing&quot; aria-label=&quot;Anchor link for: 1-1-bei-jing&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
1.1 背景&lt;&#x2F;h3&gt;
&lt;p&gt;随着容器化和云原生技术的普及，Kubernetes 已经成为事实上的容器编排标准。但在实际落地过程中，很多团队会面临几个现实问题：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;标准 Kubernetes 组件多、部署复杂，学习和运维成本高；&lt;&#x2F;li&gt;
&lt;li&gt;多集群、多环境管理困难，缺少统一的控制平面；&lt;&#x2F;li&gt;
&lt;li&gt;内部服务之间缺少可信的 TLS 证书体系，HTTPS 和 mTLS 难以规模化落地；&lt;&#x2F;li&gt;
&lt;li&gt;入口网关、证书管理、权限控制等安全能力分散，难以形成统一的 DevSecOps 流程。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;本文要解决的，就是如何用一套轻量、可复现、适合内网&#x2F;边缘&#x2F;测试环境的方式，把 Kubernetes 底座、私有 CA、入口网关和多集群管理平台串起来。核心思路是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;用 &lt;strong&gt;k3s&lt;&#x2F;strong&gt; 作为轻量级 Kubernetes 底座；&lt;&#x2F;li&gt;
&lt;li&gt;用 &lt;strong&gt;cert-manager + step-ca&lt;&#x2F;strong&gt; 构建私有证书管理体系；&lt;&#x2F;li&gt;
&lt;li&gt;用 &lt;strong&gt;Traefik&lt;&#x2F;strong&gt; 作为统一入口网关；&lt;&#x2F;li&gt;
&lt;li&gt;用 &lt;strong&gt;Rancher&lt;&#x2F;strong&gt; 作为多集群管理和权限控制中枢；&lt;&#x2F;li&gt;
&lt;li&gt;最后把业务节点接入 Rancher，形成管理集群与业务集群分离的结构。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;1-2-ping-tai-mu-biao&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#1-2-ping-tai-mu-biao&quot; aria-label=&quot;Anchor link for: 1-2-ping-tai-mu-biao&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
1.2 平台目标&lt;&#x2F;h3&gt;
&lt;p&gt;搭建完成后的平台具备以下能力：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;轻量 Kubernetes 集群&lt;&#x2F;strong&gt;：基于 k3s，单节点即可运行，资源占用低，适合开发、测试、边缘和小型生产环境。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;统一证书管理&lt;&#x2F;strong&gt;：支持自签 CA 和 step-ca 私有 CA 两种方案，能够自动签发、续期证书，并为 Ingress 提供默认 TLS 证书。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;统一入口网关&lt;&#x2F;strong&gt;：通过 Traefik 暴露内部服务，所有 Web 服务统一走 HTTPS，支持通配符证书。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;多集群管理&lt;&#x2F;strong&gt;：通过 Rancher 统一管理本地集群和下游业务集群，支持节点注册、权限控制、应用商店等。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;业务集群接入&lt;&#x2F;strong&gt;：业务节点可以独立加入 Rancher，形成管理平面与业务平面分离的部署结构。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;1-3-zheng-ti-jia-gou&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#1-3-zheng-ti-jia-gou&quot; aria-label=&quot;Anchor link for: 1-3-zheng-ti-jia-gou&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
1.3 整体架构&lt;&#x2F;h3&gt;
&lt;p&gt;本文搭建的平台整体分为四层：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层级&lt;&#x2F;th&gt;&lt;th&gt;组件&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;基础设施层&lt;&#x2F;td&gt;&lt;td&gt;k3s&lt;&#x2F;td&gt;&lt;td&gt;轻量级 Kubernetes 集群，承载所有工作负载&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;证书层&lt;&#x2F;td&gt;&lt;td&gt;cert-manager、step-ca、step-issuer&lt;&#x2F;td&gt;&lt;td&gt;私有 CA、证书签发、自动续期&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;入口层&lt;&#x2F;td&gt;&lt;td&gt;Traefik&lt;&#x2F;td&gt;&lt;td&gt;Ingress Controller，统一 HTTPS 入口&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;管理层&lt;&#x2F;td&gt;&lt;td&gt;Rancher&lt;&#x2F;td&gt;&lt;td&gt;多集群管理、权限控制、应用商店&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;业务层&lt;&#x2F;td&gt;&lt;td&gt;下游 k3s 节点&lt;&#x2F;td&gt;&lt;td&gt;运行业务工作负载，由 Rancher 纳管&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;整体流程是：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;先搭建管理节点 k3s；&lt;&#x2F;li&gt;
&lt;li&gt;在管理节点上部署 cert-manager 和 step-ca，建立私有证书体系；&lt;&#x2F;li&gt;
&lt;li&gt;配置 Traefik 默认证书，实现全站 HTTPS；&lt;&#x2F;li&gt;
&lt;li&gt;部署 Rancher，并通过私有 CA 证书暴露 Web 界面；&lt;&#x2F;li&gt;
&lt;li&gt;在 Rancher 中创建业务集群，并将业务节点注册进集群；&lt;&#x2F;li&gt;
&lt;li&gt;业务集群同样接入 step-ca，实现证书体系统一。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;er-he-xin-zu-jian-jie-shao&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#er-he-xin-zu-jian-jie-shao&quot; aria-label=&quot;Anchor link for: er-he-xin-zu-jian-jie-shao&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
二、核心组件介绍&lt;&#x2F;h2&gt;
&lt;p&gt;在正式动手之前，先把平台会用到的几个核心组件讲清楚，理解它们各自的定位，后续搭建时才能明白“为什么需要这个组件“。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-4-shen-me-shi-k3s&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#2-4-shen-me-shi-k3s&quot; aria-label=&quot;Anchor link for: 2-4-shen-me-shi-k3s&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
2.4 什么是 k3s&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;k3s&lt;&#x2F;strong&gt; 是由 Rancher Labs（现 SUSE）开发的轻量级 Kubernetes 发行版，专为资源受限的环境设计。它将完整的 Kubernetes 功能打包到一个小于 100MB 的二进制文件中，极大降低了 Kubernetes 的部署和运维门槛。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;k3s 的核心特点：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;轻量级&lt;&#x2F;strong&gt;：单二进制文件，内存占用低（约 512MB 即可运行）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;易于安装&lt;&#x2F;strong&gt;：一条命令即可完成部署，启动时间短&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;高度兼容&lt;&#x2F;strong&gt;：完全符合 CNCF 认证的 Kubernetes 标准&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;内置组件&lt;&#x2F;strong&gt;：自带 containerd、CoreDNS、Traefik Ingress、Local Path Provisioner 等&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;适用场景&lt;&#x2F;strong&gt;：边缘计算、IoT 设备、CI&#x2F;CD 环境、开发测试、小型生产环境&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;为什么叫 k3s？因为 Kubernetes 通常缩写为 K8s（K + 8 个字母 + s），而 k3s 是它的“轻量版“，大约是 K8s 一半的大小，所以用 3 代替了 8。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;2-5-shen-me-shi-rancher&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#2-5-shen-me-shi-rancher&quot; aria-label=&quot;Anchor link for: 2-5-shen-me-shi-rancher&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
2.5 什么是 Rancher&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Rancher&lt;&#x2F;strong&gt; 是供采用容器的团队使用的完整软件堆栈。它解决了管理多个 Kubernetes 集群的运营和安全挑战，并为 DevOps 团队提供用于运行容器化工作负载的集成工具。&lt;&#x2F;p&gt;
&lt;p&gt;用更简单的话说：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes&lt;&#x2F;strong&gt; 像一群“养在不同圈里的牛“（很多服务器&#x2F;集群&#x2F;应用）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Rancher&lt;&#x2F;strong&gt; 就像“牧场主的管理平台“，让你在&lt;strong&gt;一个网页界面&lt;&#x2F;strong&gt;里：
&lt;ul&gt;
&lt;li&gt;查看所有集群的状态&lt;&#x2F;li&gt;
&lt;li&gt;创建&#x2F;删除应用&lt;&#x2F;li&gt;
&lt;li&gt;管理权限（谁能操作什么）&lt;&#x2F;li&gt;
&lt;li&gt;进行升级、配置、监控入口等操作&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Rancher 的核心能力：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;多集群管理&lt;&#x2F;strong&gt;：统一管理分布在不同基础设施（本地、云端、边缘）上的 Kubernetes 集群&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;统一身份认证&lt;&#x2F;strong&gt;：支持 LDAP、AD、GitHub 等多种认证方式，RBAC 细粒度权限控制&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;应用商店&lt;&#x2F;strong&gt;：内置 Helm 应用商店，一键部署常用应用&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;安全策略&lt;&#x2F;strong&gt;：Pod 安全策略、网络策略、秘密管理等&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;监控日志&lt;&#x2F;strong&gt;：集成 Prometheus、Grafana、EFK 等可观测性工具&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;2-6-shen-me-shi-traefik&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#2-6-shen-me-shi-traefik&quot; aria-label=&quot;Anchor link for: 2-6-shen-me-shi-traefik&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
2.6 什么是 Traefik&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Traefik&lt;&#x2F;strong&gt; 是一个现代化的 HTTP 反向代理和负载均衡器，专为微服务和容器化环境设计。它是 k3s 默认内置的 Ingress Controller，负责把集群外部的流量路由到集群内部的服务。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Traefik 的核心特点：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自动服务发现&lt;&#x2F;strong&gt;：原生对接 Kubernetes Ingress、IngressRoute、Gateway API 等资源，服务变更后自动更新路由，无需手动 reload&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;动态配置&lt;&#x2F;strong&gt;：支持通过 CRD（如 &lt;code&gt;IngressRoute&lt;&#x2F;code&gt;、&lt;code&gt;Middleware&lt;&#x2F;code&gt;、&lt;code&gt;TLSStore&lt;&#x2F;code&gt;）动态调整路由、中间件和 TLS 配置&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;自动 HTTPS&lt;&#x2F;strong&gt;：内置 ACME 支持，可自动申请和续期 Let’s Encrypt 证书，也支持挂载自定义证书&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;中间件丰富&lt;&#x2F;strong&gt;：限流、重试、熔断、认证、重定向、压缩等开箱即用&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;可观测性&lt;&#x2F;strong&gt;：内置 Prometheus 指标、访问日志、Tracing 支持&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;轻量部署&lt;&#x2F;strong&gt;：单个二进制文件，启动快，资源占用低，与 k3s 天然契合&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;在本文中的作用：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Traefik 是整个平台的&lt;strong&gt;统一入口网关&lt;&#x2F;strong&gt;。Rancher、step-ca、Gitea 等所有 Web 服务都通过 Ingress 暴露，由 Traefik 统一监听 80&#x2F;443 端口并根据域名转发。我们会在第五章为它配置默认 TLS 证书，这样所有 Ingress 都能自动使用我们签发的私有证书，实现全站 HTTPS。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-7-shen-me-shi-cert-manager&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#2-7-shen-me-shi-cert-manager&quot; aria-label=&quot;Anchor link for: 2-7-shen-me-shi-cert-manager&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
2.7 什么是 cert-manager&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;cert-manager&lt;&#x2F;strong&gt; 是 Kubernetes 生态中最流行的证书管理工具，由 Jetstack 开发并捐赠给 CNCF。它能够自动化证书的签发、续期和管理。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cert-manager 的核心功能：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;支持多种证书签发源：Let’s Encrypt、Vault、Venafi、自签证书、私有 CA 等&lt;&#x2F;li&gt;
&lt;li&gt;自动续期：证书到期前自动重新签发&lt;&#x2F;li&gt;
&lt;li&gt;与 Ingress 集成：通过 annotation 自动为 Ingress 资源签发证书&lt;&#x2F;li&gt;
&lt;li&gt;CRD 化管理：Issuer、ClusterIssuer、Certificate 等自定义资源&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;2-8-shen-me-shi-step-ca&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#2-8-shen-me-shi-step-ca&quot; aria-label=&quot;Anchor link for: 2-8-shen-me-shi-step-ca&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
2.8 什么是 step-ca&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;step-ca&lt;&#x2F;strong&gt;（Smallstep Certificates）是一个开源的私有证书颁发机构（CA）工具，由 Smallstep 公司开发。它可以作为企业内部的私有 CA，为服务间通信（mTLS）、开发环境、IoT 设备等签发证书。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;step-ca 的特点：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;开源轻量：基于 Go 语言开发，部署简单&lt;&#x2F;li&gt;
&lt;li&gt;支持多种 provisioner：JWK、ACME、X.509、OIDC 等&lt;&#x2F;li&gt;
&lt;li&gt;证书生命周期管理：签发、续期、吊销&lt;&#x2F;li&gt;
&lt;li&gt;与 cert-manager 集成：通过 step-issuer 插件实现 Kubernetes 证书自动化&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;san-k3s-qing-liang-ji-kubernetes-ji-qun-bu-shu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#san-k3s-qing-liang-ji-kubernetes-ji-qun-bu-shu&quot; aria-label=&quot;Anchor link for: san-k3s-qing-liang-ji-kubernetes-ji-qun-bu-shu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
三、k3s 轻量级 Kubernetes 集群部署&lt;&#x2F;h2&gt;
&lt;p&gt;k3s 是整个平台的底座，我们将在其上部署 Rancher、cert-manager 等所有组件。本节将从零开始完成 k3s 的安装与基础配置。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-1-huan-jing-zhun-bei-yu-dai-li-she-zhi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#3-1-huan-jing-zhun-bei-yu-dai-li-she-zhi&quot; aria-label=&quot;Anchor link for: 3-1-huan-jing-zhun-bei-yu-dai-li-she-zhi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
3.1 环境准备与代理设置&lt;&#x2F;h3&gt;
&lt;p&gt;由于国内网络环境的特殊性，直接从 GitHub 下载 k3s 可能会比较慢。我们先配置代理加速下载。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ export ALL_PROXY=socks5:&#x2F;&#x2F;127.0.0.1:1080&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ export NO_PROXY=localhost,127.0.0.1,10.0.0.0&#x2F;8,172.16.0.0&#x2F;12,192.168.0.0&#x2F;16,.svc,.cluster.local,.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;环境变量说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;变量&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;th&gt;示例值说明&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ALL_PROXY&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;设置全局代理，所有协议的网络请求都走该代理&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;socks5:&#x2F;&#x2F;127.0.0.1:1080&lt;&#x2F;code&gt; 表示本地 SOCKS5 代理&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;NO_PROXY&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;设置不走代理的地址列表，用于排除内网和集群内部通信&lt;&#x2F;td&gt;&lt;td&gt;包含 localhost、私有网段、K8s 内部域名等&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;&#x2F;strong&gt;：&lt;code&gt;NO_PROXY&lt;&#x2F;code&gt; 中务必包含 Kubernetes 内部域名后缀 &lt;code&gt;.svc&lt;&#x2F;code&gt;、&lt;code&gt;.cluster.local&lt;&#x2F;code&gt; 以及你自定义的内网域名，否则集群内部服务间通信可能会被错误地路由到代理，导致连接失败。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;3-2-an-zhuang-k3s&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#3-2-an-zhuang-k3s&quot; aria-label=&quot;Anchor link for: 3-2-an-zhuang-k3s&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
3.2 安装 k3s&lt;&#x2F;h3&gt;
&lt;p&gt;k3s 官方提供了一键安装脚本，执行即可完成部署。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ curl -sfL https:&#x2F;&#x2F;get.k3s.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sh&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Finding release &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; channel stable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Using v1.36.4+k3s1 as release&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Downloading hash https:&#x2F;&#x2F;github.com&#x2F;k3s-io&#x2F;k3s&#x2F;releases&#x2F;download&#x2F;v1.36.4%2Bk3s1&#x2F;sha256sum-amd64.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Downloading binary https:&#x2F;&#x2F;github.com&#x2F;k3s-io&#x2F;k3s&#x2F;releases&#x2F;download&#x2F;v1.36.4%2Bk3s1&#x2F;k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Verifying binary download&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Installing k3s to &#x2F;usr&#x2F;local&#x2F;bin&#x2F;k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Skipping installation of SELinux RPM&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Creating &#x2F;usr&#x2F;local&#x2F;bin&#x2F;kubectl symlink to k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Creating &#x2F;usr&#x2F;local&#x2F;bin&#x2F;crictl symlink to k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Creating &#x2F;usr&#x2F;local&#x2F;bin&#x2F;ctr symlink to k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Creating killall script &#x2F;usr&#x2F;local&#x2F;bin&#x2F;k3s-killall.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Creating uninstall script &#x2F;usr&#x2F;local&#x2F;bin&#x2F;k3s-uninstall.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  env: Creating environment file &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;k3s.service.env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  systemd: Creating service file &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;k3s.service&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  systemd: Enabling k3s unit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Created&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; symlink &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;multi-user.target.wants&#x2F;k3s.service → &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;k3s.service.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  systemd: Starting k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从输出可以看到，安装脚本做了以下工作：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;查找稳定版（stable channel）的最新版本（v1.36.4+k3s1）&lt;&#x2F;li&gt;
&lt;li&gt;下载并校验二进制文件&lt;&#x2F;li&gt;
&lt;li&gt;将 k3s 安装到 &lt;code&gt;&#x2F;usr&#x2F;local&#x2F;bin&#x2F;k3s&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;创建 kubectl、crictl、ctr 的软链接（k3s 内置了这些工具）&lt;&#x2F;li&gt;
&lt;li&gt;创建 killall 和 uninstall 脚本，方便后续管理&lt;&#x2F;li&gt;
&lt;li&gt;创建 systemd 服务并设置开机自启&lt;&#x2F;li&gt;
&lt;li&gt;启动 k3s 服务&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;3-3-yan-zheng-fu-wu-zhuang-tai&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#3-3-yan-zheng-fu-wu-zhuang-tai&quot; aria-label=&quot;Anchor link for: 3-3-yan-zheng-fu-wu-zhuang-tai&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
3.3 验证服务状态&lt;&#x2F;h3&gt;
&lt;p&gt;安装完成后，使用 systemctl 检查 k3s 服务是否正常运行。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo systemctl status k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;●&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; k3s.service - Lightweight Kubernetes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;     Loaded:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; loaded&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (&#x2F;etc&#x2F;systemd&#x2F;system&#x2F;k3s.service&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; enabled&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; preset:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; disabled&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;     Active:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; active&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (running) since Mon 2026-09-07 15:25:39 CST&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; 10min&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ago&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; Invocation:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 99095155af9d409e89fa2a896144c1d2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;       Docs:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; https:&#x2F;&#x2F;k3s.io&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    Process:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 731854&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ExecStartPre=&#x2F;sbin&#x2F;modprobe br_netfilter&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (code=exited,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; status=0&#x2F;SUCCESS&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    Process:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 731855&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ExecStartPre=&#x2F;sbin&#x2F;modprobe overlay&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (code=exited,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; status=0&#x2F;SUCCESS&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;   Main&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; PID:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 731857&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (k3s-server)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;      Tasks:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 90&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;     Memory:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 1.1G&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (peak:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 1.5G&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;        CPU:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 1min 7.383s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;     CGroup:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;system.slice&#x2F;k3s.service&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;             ├─731857&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;&#x2F;usr&#x2F;local&#x2F;bin&#x2F;k3s server&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;             ├─731882&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;containerd &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;             ├─732845&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;var&#x2F;lib&#x2F;rancher&#x2F;k3s&#x2F;data&#x2F;5a9973ddf4c7ec074f657c06287e0e6a07a24ecafd6d326827f70ef1e95bdd2d&#x2F;bin&#x2F;containerd-shim-runc-v2 -namespace k8s.io -id 56abeed741a5c42ccff0aca25f4&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;d&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;             ├─732863&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;var&#x2F;lib&#x2F;rancher&#x2F;k3s&#x2F;data&#x2F;5a9973ddf4c7ec074f657c06287e0e6a07a24ecafd6d326827f70ef1e95bdd2d&#x2F;bin&#x2F;containerd-shim-runc-v2 -namespace k8s.io -id f456ac1b99ad155643207305ec8&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;0&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;             ├─732902&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;var&#x2F;lib&#x2F;rancher&#x2F;k3s&#x2F;data&#x2F;5a9973ddf4c7ec074f657c06287e0e6a07a24ecafd6d326827f70ef1e95bdd2d&#x2F;bin&#x2F;containerd-shim-runc-v2 -namespace k8s.io -id ef0c3f22d2b5e0c871226f3c6d2&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;1&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;             ├─733729&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;var&#x2F;lib&#x2F;rancher&#x2F;k3s&#x2F;data&#x2F;5a9973ddf4c7ec074f657c06287e0e6a07a24ecafd6d326827f70ef1e95bdd2d&#x2F;bin&#x2F;containerd-shim-runc-v2 -namespace k8s.io -id 4d6ae7b54e0dcdd0017e6443dd2&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;8&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;             └─733818&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;var&#x2F;lib&#x2F;rancher&#x2F;k3s&#x2F;data&#x2F;5a9973ddf4c7ec074f657c06287e0e6a07a24ecafd6d326827f70ef1e95bdd2d&#x2F;bin&#x2F;containerd-shim-runc-v2 -namespace k8s.io -id 2a6ed6a4dfaff98ca662084bb5f&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;7&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;9月&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 07&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 15:26:42 nuc k3s[731857]: I0907 15:26:42.214293&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  731857&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; resource_quota_monitor.go:229] &amp;quot;QuotaMonitor created object count evaluator&amp;quot; resource=&amp;quot;contentitems.hub.traefik.io&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;9月&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 07&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 15:26:42 nuc k3s[731857]: I0907 15:26:42.214821&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  731857&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; shared_informer.go:402] &amp;quot;Waiting for caches to sync&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;9月&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 07&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 15:26:43 nuc k3s[731857]: I0907 15:26:43.396087&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  731857&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; shared_informer.go:402] &amp;quot;Waiting for caches to sync&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;9月&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 07&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 15:26:43 nuc k3s[731857]: I0907 15:26:43.415361&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  731857&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; shared_informer.go:409] &amp;quot;Caches are synced&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;9月&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 07&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 15:26:44 nuc k3s[731857]: I0907 15:26:44.497106&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  731857&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; shared_informer.go:409] &amp;quot;Caches are synced&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;9月&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 07&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; 15:26:45 nuc k3s[731857]: time=&amp;quot;2026-09-07T15:26:45+08:00&amp;quot; level=info msg=&amp;quot;Event occurred&amp;quot; apiVersion=v1 fieldPath= kind=Service logger=service-lb-controller message=&amp;quot;Updated LoadBalan&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;9月 07 15:35:37 nuc k3s[731857]: time=&amp;quot;2026-09-07T15:35:37+08:00&amp;quot; level=info msg=&amp;quot;COMPACT compactRev=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1425&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; targetCompactRev=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2088&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; currentRev=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;3088&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;9月 07 15:35:37 nuc k3s[731857]: time=&amp;quot;2026-09-07T15:35:37+08:00&amp;quot; level=info msg=&amp;quot;COMPACT deleted&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 616&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; rows from&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 663&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; revisions in 60.925125ms - compacted to 2088&#x2F;3088&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;9月 07 15:35:37 nuc k3s[731857]: time=&amp;quot;2026-09-07T15:35:37+08:00&amp;quot; level=info msg=&amp;quot;COMPACT compacted from&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1425&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2088&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; in&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; transactions over 61ms&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;9月 07 15:35:37 nuc k3s[731857]: I0907 15:35:37.853628  731857 cidrallocator.go:278] updated ClusterIP allocator for Service CIDR 10.43.0.0&#x2F;16&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从输出可以看到几个关键信息：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;服务状态为 &lt;code&gt;active (running)&lt;&#x2F;code&gt;，已正常运行 10 分钟&lt;&#x2F;li&gt;
&lt;li&gt;k3s 内置了 containerd 作为容器运行时（不需要额外安装 Docker）&lt;&#x2F;li&gt;
&lt;li&gt;启动时自动加载了 &lt;code&gt;br_netfilter&lt;&#x2F;code&gt; 和 &lt;code&gt;overlay&lt;&#x2F;code&gt; 内核模块（Kubernetes 必需）&lt;&#x2F;li&gt;
&lt;li&gt;内存占用约 1.1GB，充分体现了 k3s 的轻量特性&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;3-4-an-zhuang-helm&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#3-4-an-zhuang-helm&quot; aria-label=&quot;Anchor link for: 3-4-an-zhuang-helm&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
3.4 安装 Helm&lt;&#x2F;h3&gt;
&lt;p&gt;Helm 是 Kubernetes 的包管理器，类似 Linux 的 apt&#x2F;yum。我们后续部署 Rancher、cert-manager 等组件都会通过 Helm Chart 来完成。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Arch Linux 系统安装方式：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo pacman -S helm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;正在解析依赖关系...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;正在查找软件包冲突...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;软件包&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (1) helm-4.2.2-1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;下载大小：&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;      18.51&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; MiB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;全部安装大小：&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  78.48&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; MiB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;::&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 进行安装吗？&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; [Y&#x2F;n]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;::&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 正在获取软件包......&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; helm-4.2.2-1-x86_64&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;                                                                     18.5&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; MiB&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  6.27&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; MiB&#x2F;s 00:03&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; [#####################################################################] 100%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&#x2F;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; 正在检查密钥环里的密钥&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;                                                                                        [#####################################################################] 100%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&#x2F;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; 正在检查软件包完整性&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;                                                                                          [#####################################################################] 100%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&#x2F;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; 正在加载软件包文件&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;                                                                                            [#####################################################################] 100%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&#x2F;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; 正在检查文件冲突&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;                                                                                              [#####################################################################] 100%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&#x2F;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; 正在检查可用存储空间&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;                                                                                          [#####################################################################] 100%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;::&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 正在处理软件包的变化...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&#x2F;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; 正在安装&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helm&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;                                                                                                 [#####################################################################] 100%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;::&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 正在运行事务后钩子函数...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&#x2F;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; Arming&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ConditionNeedsUpdate...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu&#x2F;Debian 系统安装方式：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apt-get install curl gpg apt-transport-https --yes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -fsSL https:&#x2F;&#x2F;packages.buildkite.com&#x2F;helm-linux&#x2F;helm-debian&#x2F;gpgkey&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; gpg&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; --dearmor&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tee &#x2F;usr&#x2F;share&#x2F;keyrings&#x2F;helm.gpg&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;deb [signed-by=&#x2F;usr&#x2F;share&#x2F;keyrings&#x2F;helm.gpg] https:&#x2F;&#x2F;packages.buildkite.com&#x2F;helm-linux&#x2F;helm-debian&#x2F;any&#x2F; any main&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tee &#x2F;etc&#x2F;apt&#x2F;sources.list.d&#x2F;helm-stable-debian.list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apt-get update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apt-get install helm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;也可以直接从 &lt;a class=&quot;external&quot; rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;helm&#x2F;helm&#x2F;releases&quot;&gt;Helm 官方 GitHub Release 页面&lt;&#x2F;a&gt; 下载对应平台的二进制文件，解压后放到 PATH 目录即可。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;3-5-pei-zhi-kubeconfig&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#3-5-pei-zhi-kubeconfig&quot; aria-label=&quot;Anchor link for: 3-5-pei-zhi-kubeconfig&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
3.5 配置 kubeconfig&lt;&#x2F;h3&gt;
&lt;p&gt;k3s 安装完成后，默认会将 kubeconfig 文件写入 &lt;code&gt;&#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml&lt;&#x2F;code&gt;，但该文件权限为 root 所有。为了让普通用户能使用 kubectl，需要进行以下配置。&lt;&#x2F;p&gt;
&lt;p&gt;首先，修改 k3s 配置，让 kubeconfig 文件具有可读权限：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  ~ echo &amp;#39;write-kubeconfig-mode: &amp;quot;0644&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tee &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;config.yaml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;write-kubeconfig-mode:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;0644&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo systemctl restart k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后将 kubeconfig 复制到用户目录：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ mkdir -p ~&#x2F;.kube&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo cp &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ chmod&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 600&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;chmod:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; 更改 &amp;#39;&#x2F;home&#x2F;kali-team&#x2F;.kube&#x2F;config&amp;#39; 的权限: 不允许的操作&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ id kali-team&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;uid&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kali-team&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; gid&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;984&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;users&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 组=984&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;users&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,998&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;wheel&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,969&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,967&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;libvirt&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo chown kali-team:users ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ chmod&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 600&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo mv &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml.bak&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo ln -s &#x2F;home&#x2F;ubuntu&#x2F;.kube&#x2F;config &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get nodes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   STATUS   ROLES           AGE   VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;nuc&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;    Ready    control-plane   78m   v1.36.4+k3s1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo chmod&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 644&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;config.yaml.d&#x2F;50-rancher.yaml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;关键步骤说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;创建 &lt;code&gt;~&#x2F;.kube&lt;&#x2F;code&gt; 目录，这是 kubectl 默认查找 kubeconfig 的位置&lt;&#x2F;li&gt;
&lt;li&gt;将 k3s 生成的配置文件复制到用户目录&lt;&#x2F;li&gt;
&lt;li&gt;修改文件所有者为当前用户（因为是 sudo 复制的，所有者为 root）&lt;&#x2F;li&gt;
&lt;li&gt;设置文件权限为 600（仅所有者可读写，符合 kubeconfig 安全规范）&lt;&#x2F;li&gt;
&lt;li&gt;将原文件备份并创建软链接，保持 k3s 默认路径的兼容性&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;看到 &lt;code&gt;kubectl get nodes&lt;&#x2F;code&gt; 返回节点状态为 &lt;code&gt;Ready&lt;&#x2F;code&gt;，说明集群已经正常运行。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-6-pei-zhi-jing-xiang-jia-su-qi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#3-6-pei-zhi-jing-xiang-jia-su-qi&quot; aria-label=&quot;Anchor link for: 3-6-pei-zhi-jing-xiang-jia-su-qi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
3.6 配置镜像加速器&lt;&#x2F;h3&gt;
&lt;p&gt;在国内环境中，直接从 Docker Hub、gcr.io 等国外镜像仓库拉取镜像可能会很慢或失败。k3s 支持通过 &lt;code&gt;registries.yaml&lt;&#x2F;code&gt; 配置镜像代理（镜像重写）。&lt;&#x2F;p&gt;
&lt;p&gt;创建配置文件 &lt;code&gt;&#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;registries.yaml&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;mirrors&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;  docker.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;    endpoint&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;https:&#x2F;&#x2F;docker.m.daocloud.io&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;  quay.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;    endpoint&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;https:&#x2F;&#x2F;quay.m.daocloud.io&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;  gcr.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;    endpoint&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;https:&#x2F;&#x2F;gcr.m.daocloud.io&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;  ghcr.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;    endpoint&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;https:&#x2F;&#x2F;ghcr.m.daocloud.io&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;  registry.k8s.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;    endpoint&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;https:&#x2F;&#x2F;k8s.m.daocloud.io&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;配置说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;镜像仓库&lt;&#x2F;th&gt;&lt;th&gt;代理地址&lt;&#x2F;th&gt;&lt;th&gt;用途&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker.io&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;docker.m.daocloud.io&lt;&#x2F;td&gt;&lt;td&gt;Docker Hub，最常用的镜像仓库&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;quay.io&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;quay.m.daocloud.io&lt;&#x2F;td&gt;&lt;td&gt;Red Hat 旗下的镜像仓库&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcr.io&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;gcr.m.daocloud.io&lt;&#x2F;td&gt;&lt;td&gt;Google Container Registry&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ghcr.io&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;ghcr.m.daocloud.io&lt;&#x2F;td&gt;&lt;td&gt;GitHub Container Registry&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;registry.k8s.io&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;k8s.m.daocloud.io&lt;&#x2F;td&gt;&lt;td&gt;Kubernetes 官方镜像仓库&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;配置完成后重启 k3s 使配置生效：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; systemctl restart k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证所有系统 Pod 是否正常运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get pods -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;     NAME                                      READY   STATUS      RESTARTS        AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   coredns-54996dc9b4-tsz6g                  1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;     0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;               67m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   helm-install-traefik-c25nh                0&#x2F;1     Completed&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   1&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (2m51s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ago&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)   67m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   helm-install-traefik-crd-lx65s            0&#x2F;1     Completed&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;               67m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   local-path-provisioner-77b9867795-5r8bw   1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;     0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;               67m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   metrics-server-6dc596dfb8-tm782           1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;     0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;               67m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   svclb-traefik-1ea9c1dc-sfk7z              2&#x2F;2     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;     0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;               2m48s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   traefik-59b7647586-8m94p                  1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;     0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;               2m48s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get nodes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   STATUS   ROLES           AGE   VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;nuc&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;    Ready    control-plane   67m   v1.36.4+k3s1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;k3s 默认内置了以下核心组件：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CoreDNS&lt;&#x2F;strong&gt;：集群 DNS 服务，负责服务发现&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Traefik&lt;&#x2F;strong&gt;：Ingress Controller，负责 HTTP&#x2F;HTTPS 入口路由&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Metrics Server&lt;&#x2F;strong&gt;：资源指标采集，为 HPA 和 &lt;code&gt;kubectl top&lt;&#x2F;code&gt; 提供数据&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Local Path Provisioner&lt;&#x2F;strong&gt;：本地存储供应者，提供基于主机路径的 PV&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;3-7-she-zhi-xi-tong-dai-li-ke-xuan&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#3-7-she-zhi-xi-tong-dai-li-ke-xuan&quot; aria-label=&quot;Anchor link for: 3-7-she-zhi-xi-tong-dai-li-ke-xuan&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
3.7 设置系统代理（可选）&lt;&#x2F;h3&gt;
&lt;p&gt;如果你的环境需要通过代理访问外网（比如下载镜像、拉取 Helm Chart 等），可以为 k3s 服务和 containerd 配置系统级代理。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;&#x2F;strong&gt;：安装完成后建议取消代理，避免业务请求也走代理导致各种莫名其妙的网络问题。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo mkdir -p &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;k3s.service.d&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo vim &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;k3s.service.d&#x2F;http-proxy.conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo vim &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;k3s.service.env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo mkdir -p &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;containerd.service.d&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo vim &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;containerd.service.d&#x2F;http-proxy.conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo systemctl daemon-reload&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo systemctl restart k3s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;http-proxy.conf 配置内容：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;Service&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;Environment&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;quot;HTTP_PROXY=socks5:&#x2F;&#x2F;127.0.0.1:1080&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;Environment&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;quot;HTTPS_PROXY=socks5:&#x2F;&#x2F;127.0.0.1:1080&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;Environment&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;quot;NO_PROXY=localhost,127.0.0.1,10.0.0.0&#x2F;8,172.16.0.0&#x2F;12,192.168.0.0&#x2F;16,.svc,.cluster.local,.internal&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;k3s.service.env 配置内容：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;HTTPS_PROXY&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;#39;socks5:&#x2F;&#x2F;127.0.0.1:1080&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;配置方式说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;systemd 的 drop-in 配置目录（&lt;code&gt;.d&#x2F;&lt;&#x2F;code&gt;）允许你在不修改原始 service 文件的情况下扩展或覆盖服务配置。这是 systemd 推荐的服务自定义方式，升级时不会丢失配置。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;文件&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;k3s.service.d&#x2F;http-proxy.conf&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;为 k3s 服务进程设置代理环境变量&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;k3s.service.env&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;k3s 读取的环境变量文件，同样可以设置代理&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;containerd.service.d&#x2F;http-proxy.conf&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;为 containerd 容器运行时设置代理（影响镜像拉取）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;配置完成后需要执行 &lt;code&gt;systemctl daemon-reload&lt;&#x2F;code&gt; 让 systemd 重新加载配置，然后重启 k3s 服务。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;si-zheng-shu-guan-li-ti-xi-jian-she&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#si-zheng-shu-guan-li-ti-xi-jian-she&quot; aria-label=&quot;Anchor link for: si-zheng-shu-guan-li-ti-xi-jian-she&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
四、证书管理体系建设&lt;&#x2F;h2&gt;
&lt;p&gt;在 DevSecOps 平台中，证书是安全通信的基石。无论是服务间的 mTLS、Web 界面的 HTTPS 访问，还是 API 调用的身份认证，都离不开 TLS 证书。我们将使用 cert-manager 作为统一的证书管理工具，并提供两种 CA 方案供选择。&lt;&#x2F;p&gt;
&lt;p&gt;本章推荐阅读顺序：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;4.1 安装 cert-manager&lt;&#x2F;strong&gt;：两种方案共用的基础设施，必须先装。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;4.2 方案一：内置自签证书&lt;&#x2F;strong&gt;：最简方案，适合快速搭建开发测试环境。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;4.3 方案二：step-ca 私有 CA&lt;&#x2F;strong&gt;：功能更完整，适合生产环境。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;两个方案二选一即可，后续第五章的 Traefik 默认证书配置会根据你选择的方案提供对应的配置项。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-1-an-zhuang-cert-manager&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-1-an-zhuang-cert-manager&quot; aria-label=&quot;Anchor link for: 4-1-an-zhuang-cert-manager&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.1 安装 cert-manager&lt;&#x2F;h3&gt;
&lt;p&gt;首先添加 Jetstack 的 Helm 仓库并安装 cert-manager。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm repo add jetstack https:&#x2F;&#x2F;charts.jetstack.io&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;jetstack&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; has been added to your repositories&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm repo update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Hang&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tight while we grab the latest from your chart repositories...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;rancher-stable&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;jetstack&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Update&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Complete. ⎈Happy Helming!⎈&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm upgrade --install cert-manager jetstack&#x2F;cert-manager&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --namespace cert-manager&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --create-namespace&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --set crds.enabled=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language z-true&quot;&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Release&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;cert-manager&amp;quot; does not exist. Installing it now.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;LAST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; DEPLOYED: Mon Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  7&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 15:48:42&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;STATUS:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; deployed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;REVISION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;DESCRIPTION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Install complete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;TEST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; SUITE: None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NOTES:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v1.21.1 has been deployed successfully!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;In&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; order to begin issuing certificates, you will need to set up a ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;or&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Issuer resource&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (for&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; example, by creating a &amp;#39;letsencrypt-staging&amp;#39; issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;More&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; information on the different types of issuers and how to configure them&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;can&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; be found in our documentation:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;cert-manager.io&#x2F;docs&#x2F;configuration&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;For&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; information on how to configure cert-manager to automatically provision&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Certificates&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; for Ingress resources, take a look at the&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt; `&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ingress-shim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;documentation:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;cert-manager.io&#x2F;docs&#x2F;usage&#x2F;ingress&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;For&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; information on how to configure cert-manager to automatically provision&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Certificates&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; for Gateway API resources, take a look at the&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt; `&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;gateway&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; resource&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;documentation:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;cert-manager.io&#x2F;docs&#x2F;usage&#x2F;gateway&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cert-manager get po&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                       READY   STATUS    RESTARTS   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-689c4c5575-j56vb&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;              1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          40s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-cainjector-6fbb9c8cd6-qw2wc&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          40s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-webhook-646c95c5ff-wp5nq&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;      1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          40s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;helm upgrade –install 命令参数说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;upgrade --install&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;如果 release 不存在则安装，存在则升级（幂等操作，推荐使用）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;cert-manager&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Release 名称，即本次部署的实例名&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;jetstack&#x2F;cert-manager&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Chart 来源，格式为 &lt;code&gt;仓库名&#x2F;Chart名&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--namespace cert-manager&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;指定部署到的命名空间&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--create-namespace&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;如果命名空间不存在则自动创建&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--set crds.enabled=true&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;设置 Chart 值，启用 CRD（自定义资源定义）的安装&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;cert-manager 部署了三个核心组件：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cert-manager&lt;&#x2F;strong&gt;：核心控制器，监听 Certificate 等 CRD 资源，处理证书签发和续期&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;cert-manager-cainjector&lt;&#x2F;strong&gt;：CA 注入器，将 CA 证书注入到 webhook 和 API 服务的配置中&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;cert-manager-webhook&lt;&#x2F;strong&gt;：Webhook 服务，提供准入控制和动态准入插件功能&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;4-2-fang-an-yi-nei-zhi-zi-qian-zheng-shu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-2-fang-an-yi-nei-zhi-zi-qian-zheng-shu&quot; aria-label=&quot;Anchor link for: 4-2-fang-an-yi-nei-zhi-zi-qian-zheng-shu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.2 方案一：内置自签证书&lt;&#x2F;h3&gt;
&lt;p&gt;这是最简单的方案，使用 cert-manager 内置的 SelfSigned Issuer 创建根 CA，再基于根 CA 签发业务证书。适合快速搭建开发测试环境。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;步骤 1：创建 SelfSigned ClusterIssuer&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;SelfSigned Issuer 使用自签名的方式签发证书，通常用于创建根 CA 证书。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 1. 创建 SelfSigned ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: cert-manager.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: selfsigned-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  selfSigned: {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;clusterissuer.cert-manager.io&#x2F;selfsigned-issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;ClusterIssuer vs Issuer 的区别：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;资源类型&lt;&#x2F;th&gt;&lt;th&gt;作用范围&lt;&#x2F;th&gt;&lt;th&gt;适用场景&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ClusterIssuer&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;集群级，所有命名空间都可以引用&lt;&#x2F;td&gt;&lt;td&gt;集群统一的证书签发源，如公共 CA、全局私有 CA&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;Issuer&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;命名空间级，只能被同一命名空间的 Certificate 引用&lt;&#x2F;td&gt;&lt;td&gt;各团队&#x2F;项目独立的证书签发策略&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;步骤 2：创建根 CA 证书&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;使用 SelfSigned Issuer 签发一张自签名的根 CA 证书。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 2. 创建根 CA 证书&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: cert-manager.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: Certificate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: kali-team-root-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  commonName: kali-team-root-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  isCA: true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  duration: 87600h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  renewBefore: 720h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  issuerRef:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    kind: ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    name: selfsigned-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  privateKey:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    algorithm: ECDSA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    size: 256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  secretName: kali-team-root-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificate.cert-manager.io&#x2F;kali-team-root-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Certificate 资源关键字段说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;th&gt;示例值说明&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;commonName&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;证书通用名称（CN）&lt;&#x2F;td&gt;&lt;td&gt;根 CA 的标识名&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;isCA: true&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;标记这是一张 CA 证书，可用于签发其他证书&lt;&#x2F;td&gt;&lt;td&gt;根 CA 必须设置为 true&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;duration&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;证书有效期&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;87600h&lt;&#x2F;code&gt; = 10 年&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;renewBefore&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;到期前多久自动续期&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;720h&lt;&#x2F;code&gt; = 30 天&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;issuerRef&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;引用的签发者&lt;&#x2F;td&gt;&lt;td&gt;指定使用哪个 Issuer&#x2F;ClusterIssuer 签发&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;privateKey.algorithm&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;私钥算法&lt;&#x2F;td&gt;&lt;td&gt;ECDSA 比 RSA 更轻量高效&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;privateKey.size&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;私钥长度&lt;&#x2F;td&gt;&lt;td&gt;ECDSA-256 提供相当于 RSA-3072 的安全强度&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;secretName&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;证书存储的 Secret 名称&lt;&#x2F;td&gt;&lt;td&gt;签发后证书和私钥会存入该 Secret&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;步骤 3：等待 CA 证书就绪&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;使用 &lt;code&gt;kubectl wait&lt;&#x2F;code&gt; 命令等待证书签发完成。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 3. 等待 CA 证书 Ready&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl wait --for=condition=Ready certificate&#x2F;kali-team-root-ca -n cert-manager --timeout=60s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificate.cert-manager.io&#x2F;kali-team-root-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; condition met&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;kubectl wait 命令参数说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--for=condition=Ready&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;等待资源的 Ready 条件变为 true&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;certificate&#x2F;kali-team-root-ca&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;资源类型和名称，格式为 &lt;code&gt;类型&#x2F;名称&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n cert-manager&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;指定命名空间&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--timeout=60s&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;超时时间，超过后命令返回失败&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;步骤 4：创建基于 CA 的 ClusterIssuer&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;有了根 CA 证书后，创建一个基于该 CA 的 ClusterIssuer，用于后续签发业务证书。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 4. 创建基于 CA 的 ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: cert-manager.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: kali-team-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  ca:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    secretName: kali-team-root-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;clusterissuer.cert-manager.io&#x2F;kali-team-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个 ClusterIssuer 会从 &lt;code&gt;kali-team-root-ca&lt;&#x2F;code&gt; Secret 中读取根 CA 证书和私钥，然后用它来签发业务证书。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;步骤 5：创建 Traefik 默认证书&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;为 Traefik Ingress Controller 创建一张通配符证书，作为所有 Ingress 的默认 TLS 证书。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 5. 直接创建 Traefik 默认证书 Secret&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: cert-manager.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: Certificate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: internal-default-cert&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  secretName: internal-default-cert&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  commonName: kali-team&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  dnsNames:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    - &amp;quot;*.kali-team.internal&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    - &amp;quot;*.*.kali-team.internal&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    - &amp;quot;kali-team.internal&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  duration: 87600h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  renewBefore: 720h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  issuerRef:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    kind: ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    name: kali-team-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    group: cert-manager.io&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  privateKey:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    algorithm: RSA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    size: 2048&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificate.cert-manager.io&#x2F;internal-default-cert&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;通配符证书说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;DNS 名称&lt;&#x2F;th&gt;&lt;th&gt;覆盖范围&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;根域名本身&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;*.kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;一级子域名，如 &lt;code&gt;rancher.kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;*.*.kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;二级子域名，如 &lt;code&gt;app.dev.kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;注意：证书存储在 &lt;code&gt;kube-system&lt;&#x2F;code&gt; 命名空间，因为 Traefik 默认部署在该命名空间下，只能读取同命名空间的 Secret。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;步骤 6：验证证书签发结果&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n kube-system get certificate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                    READY   SECRET                  AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;internal-default-cert&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   True    internal-default-cert   41s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 6. 等待证书签发&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl wait --for=condition=Ready certificate&#x2F;internal-default-cert -n kube-system --timeout=120s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificate.cert-manager.io&#x2F;internal-default-cert&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; condition met&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 7. 验证 Secret 已创建&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get secret internal-default-cert -n kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                    TYPE                DATA   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;internal-default-cert&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   kubernetes.io&#x2F;tls&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   3&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;      5m18s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Secret 类型为 &lt;code&gt;kubernetes.io&#x2F;tls&lt;&#x2F;code&gt;，包含 3 个数据项：&lt;code&gt;tls.crt&lt;&#x2F;code&gt;（证书链）、&lt;code&gt;tls.key&lt;&#x2F;code&gt;（私钥）和 &lt;code&gt;ca.crt&lt;&#x2F;code&gt;（CA 证书）。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;步骤 7：导出根 CA 证书并导入系统信任库&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;为了让操作系统信任我们签发的证书（不会出现浏览器警告），需要将根 CA 证书导入系统信任库。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cert-manager get secret kali-team-root-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;#39;{.data.ca\.crt}&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; base64&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kali-team-root-ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat kali-team-root-ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;-----BEGIN&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CERTIFICATE-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;-----END&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CERTIFICATE-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;导入到系统信任库（Arch Linux 系统）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo cp kali-team-root-ca.crt &#x2F;etc&#x2F;ca-certificates&#x2F;trust-source&#x2F;anchors&#x2F;nuc.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo trust extract-compat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证证书信息：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n kube-system get secret internal-default-cert&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;#39;{.data.ca\.crt}&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; base64&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; openssl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; x509 -noout -subject -issuer -dates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;subject&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;CN&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;kali-team-root-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;CN&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;kali-team-root-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;notBefore&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  7&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 08:14:02&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; GMT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;notAfter&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  4&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 08:14:02&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2036&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; GMT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从输出可以看到，根 CA 证书是自签名的（subject 和 issuer 相同），有效期为 10 年。&lt;&#x2F;p&gt;
&lt;p&gt;最后查看所有 ClusterIssuer 状态：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get clusterissuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                READY   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kali-team-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;        True    13m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;selfsigned-issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   True    16m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;两个 ClusterIssuer 都已就绪，分别是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;selfsigned-issuer&lt;&#x2F;code&gt;：自签名签发者，仅用于创建根 CA&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;kali-team-ca&lt;&#x2F;code&gt;：基于根 CA 的签发者，用于签发业务证书&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;4-3-fang-an-er-step-ca-si-you-ca&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-fang-an-er-step-ca-si-you-ca&quot; aria-label=&quot;Anchor link for: 4-3-fang-an-er-step-ca-si-you-ca&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3 方案二：step-ca 私有 CA&lt;&#x2F;h3&gt;
&lt;p&gt;如果你需要更完善的私有 CA 功能（证书吊销、细粒度权限、ACME 协议支持等），可以选择 step-ca 方案。step-ca 是 Smallstep 推出的开源私有 CA 解决方案，功能更强大，适合生产环境使用。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;&#x2F;strong&gt;：方案一和方案二二选一即可。如果选择方案二，需要确保 cert-manager 已经安装。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;首先确认 cert-manager 运行状态：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get pods -n cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                       READY   STATUS    RESTARTS   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-689c4c5575-j56vb&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;              1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          2d2h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-cainjector-6fbb9c8cd6-qw2wc&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          2d2h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-webhook-646c95c5ff-wp5nq&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;      1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          2d2h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get crd&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificaterequests.cert-manager.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                               2026-09-07T07:48:42Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificates.cert-manager.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                      2026-09-07T07:48:42Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;challenges.acme.cert-manager.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                   2026-09-07T07:48:42Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;clusterissuers.cert-manager.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                    2026-09-07T07:48:42Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;issuers.cert-manager.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                           2026-09-07T07:48:42Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;orders.acme.cert-manager.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                       2026-09-07T07:48:42Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以看到 cert-manager 安装后自动注册了 6 个 CRD，覆盖了证书请求、证书、挑战、集群签发者、签发者和订单等资源类型。&lt;&#x2F;p&gt;
&lt;p&gt;接下来添加 Smallstep 的 Helm 仓库：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm repo add smallstep https:&#x2F;&#x2F;smallstep.github.io&#x2F;helm-charts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;smallstep&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; has been added to your repositories&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm repo update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Hang&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tight while we grab the latest from your chart repositories...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;smallstep&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;rancher-stable&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;jetstack&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Update&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Complete. ⎈Happy Helming!⎈&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;4-3-1-an-zhuang-step-issuer&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-1-an-zhuang-step-issuer&quot; aria-label=&quot;Anchor link for: 4-3-1-an-zhuang-step-issuer&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3.1 安装 step-issuer&lt;&#x2F;h4&gt;
&lt;p&gt;step-issuer 是 cert-manager 的外部签发者插件，它让 cert-manager 能够通过 step-ca 来签发证书。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm upgrade --install step-issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  smallstep&#x2F;step-issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  -n smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --create-namespace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Release&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;step-issuer&amp;quot; does not exist. Installing it now.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; step-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;LAST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; DEPLOYED: Wed Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  9&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 18:22:16&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;STATUS:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; deployed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;REVISION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;DESCRIPTION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Install complete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;TEST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; SUITE: None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NOTES:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;⚙️&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   Thanks for installing step-issuer.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;step-issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; is ideal for issuing certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;from&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; your own private Certificate Authority&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (CA).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;To&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; start issuing certificates, you will need:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;👉&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; A cert-manager installation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;👉&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; A step-ca Certificate Authority&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (CA) or a Smallstep Certificate Manager authority&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;👉&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; A StepIssuer resource that links step-issuer to your CA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;To&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; continue, follow the instructions here:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;u.step.sm&#x2F;step-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证 step-issuer 运行状态：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get pods -n smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                           READY   STATUS    RESTARTS   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;step-issuer-6567b4fff4-f96vj&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          61m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;4-3-2-an-zhuang-step-certificates&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-2-an-zhuang-step-certificates&quot; aria-label=&quot;Anchor link for: 4-3-2-an-zhuang-step-certificates&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3.2 安装 step-certificates&lt;&#x2F;h4&gt;
&lt;p&gt;step-certificates 是 step-ca 的核心服务，负责 PKI 初始化和证书签发。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm upgrade --install step-certificates&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  smallstep&#x2F;step-certificates&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  -n smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --create-namespace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Release&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;step-certificates&amp;quot; does not exist. Installing it now.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; step-certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;LAST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; DEPLOYED: Wed Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  9&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 21:08:30&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;STATUS:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; deployed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;REVISION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;DESCRIPTION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Install complete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NOTES:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Thanks&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; for installing Step CA.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Get the PKI and Provisioner secrets running these commands:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;   kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; get -n smallstep -o jsonpath=&amp;#39;{.data.password}&amp;#39; secret&#x2F;step-certificates-ca-password&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; base64&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; --decode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;   kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; get -n smallstep -o jsonpath=&amp;#39;{.data.password}&amp;#39; secret&#x2F;step-certificates-provisioner-password&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; base64&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; --decode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;2.&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Get the CA URL and the root certificate fingerprint running this command:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;   kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -n smallstep logs job.batch&#x2F;step-certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;3.&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Delete the configuration job running this command:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;   kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -n smallstep delete job.batch&#x2F;step-certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;查看初始化 Job 的日志，获取 CA 信息：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n step-ca logs job.batch&#x2F;step-certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Welcome&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; to Step Certificates configuration.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Configuring&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubctl with service account...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Cluster&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;cfc&amp;quot; set.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;User&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;bootstrap&amp;quot; set.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Context&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;cfc&amp;quot; created.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Switched&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; to context &amp;quot;cfc&amp;quot;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Checking&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cluster permissions...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Checking&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; for permission to create configmaps in step-ca namespace: yes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Checking&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; for permission to create secrets in step-ca namespace: yes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Initializating&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; the CA...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Generating&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; root certificate... done!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Generating&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; intermediate certificate... done!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Root certificate: &#x2F;home&#x2F;step&#x2F;certs&#x2F;root_ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Root private key: &#x2F;home&#x2F;step&#x2F;secrets&#x2F;root_ca_key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Root fingerprint: f5d6518046eea544ee1e6b1eef4a6b4566e33a86a2a6cef1fed581b4cb734930&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Intermediate certificate: &#x2F;home&#x2F;step&#x2F;certs&#x2F;intermediate_ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Intermediate private key: &#x2F;home&#x2F;step&#x2F;secrets&#x2F;intermediate_ca_key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Database folder: &#x2F;home&#x2F;step&#x2F;db&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Default configuration: &#x2F;home&#x2F;step&#x2F;config&#x2F;defaults.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;✔&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Certificate Authority configuration: &#x2F;home&#x2F;step&#x2F;config&#x2F;ca.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Your&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; PKI is ready to go. To generate certificates for individual services see &amp;#39;step help ca&amp;#39;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;FEEDBACK&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 😍 🍻&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  The&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; step utility is not instrumented for usage statistics. It does not phone&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  home.&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; But your feedback is extremely valuable. Any information you can provide&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  regarding&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; how you&amp;#39;re using `step` helps. Please send us a sentence or two,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  good or bad at feedback@smallstep.com or join GitHub Discussions&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  https:&#x2F;&#x2F;github.com&#x2F;smallstep&#x2F;certificates&#x2F;discussions and our Discord&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  https:&#x2F;&#x2F;u.step.sm&#x2F;discord.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;Creating configmaps and secrets in step-ca namespace ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;configmap&#x2F;step-certificates-config replaced&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;configmap&#x2F;step-certificates-certs replaced&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;configmap&#x2F;step-certificates-secrets replaced&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;secret&#x2F;step-certificates-ca-password replaced&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;secret&#x2F;step-certificates-provisioner-password replaced&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;configmap&#x2F;step-certificates-config labeled&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;configmap&#x2F;step-certificates-certs labeled&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从初始化日志可以看到 step-ca 自动创建了完整的 PKI 体系：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;根证书&lt;&#x2F;strong&gt;（Root CA）：顶层信任锚，通常离线保存&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;中间证书&lt;&#x2F;strong&gt;（Intermediate CA）：实际用于签发业务证书的 CA，根证书只用来签中间证书&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;配置文件&lt;&#x2F;strong&gt;：&lt;code&gt;ca.json&lt;&#x2F;code&gt; 是 CA 的主配置文件&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;相关密钥和密码&lt;&#x2F;strong&gt;：存储在 Kubernetes Secret 中&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;初始化完成后输出的关键信息：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Step Certificates installed!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CA URL: https:&#x2F;&#x2F;step-certificates.step-ca.svc.cluster.local&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CA Fingerprint: f5d6518046eea544ee1e6b1eef4a6b4566e33a86a2a6cef1fed581b4cb734930&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;4-3-3-tian-jia-cert-manager-provisioner&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-3-tian-jia-cert-manager-provisioner&quot; aria-label=&quot;Anchor link for: 4-3-3-tian-jia-cert-manager-provisioner&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3.3 添加 cert-manager Provisioner&lt;&#x2F;h4&gt;
&lt;p&gt;step-ca 使用 Provisioner（签发者配置）来控制谁可以申请证书。我们需要为 cert-manager 创建一个专门的 JWK 类型 Provisioner。&lt;&#x2F;p&gt;
&lt;p&gt;进入 step-certificates Pod 进行配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl exec -it -n smallstep step-certificates-0 -- sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Defaulted&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; container &amp;quot;step-certificates&amp;quot; out of: step-certificates, step-certificates-init&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (init)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;~&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; $&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;~&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; $ cp config&#x2F;ca.json &#x2F;tmp&#x2F;ca.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;~&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; $ step ca provisioner add cert-manager --type JWK --create --ca-config &#x2F;tmp&#x2F;ca.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Please&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; enter a password to encrypt the provisioner private key?&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; [leave&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; empty and we&amp;#39;ll generate one]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;✔ Password: f7zl9rRbrBzujPSXT71k4Yd1TsLrBQyB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;✔ CA Configuration: &#x2F;tmp&#x2F;ca.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;Success! Your `step-ca` config has been updated. To pick up the new configuration SIGHUP (kill -1 &amp;lt;pid&amp;gt;) or restart the step-ca process.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;~ $&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;因为 config 目录下的 &lt;code&gt;ca.json&lt;&#x2F;code&gt; 是通过 ConfigMap 挂载的只读文件，所以先复制一份到临时目录进行修改，然后再将修改后的配置更新到 ConfigMap 中，最后重启 step-certificates 以加载新配置。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Provisioner 类型说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;用途&lt;&#x2F;th&gt;&lt;th&gt;适用场景&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;JWK&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;使用 JSON Web Key 对证书签名请求进行认证&lt;&#x2F;td&gt;&lt;td&gt;服务间调用、自动化工具（如 cert-manager）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ACME&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;支持 ACME 协议（类似 Let’s Encrypt）&lt;&#x2F;td&gt;&lt;td&gt;需要自动证书管理的 HTTP 服务&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;OIDC&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;使用 OpenID Connect 身份认证&lt;&#x2F;td&gt;&lt;td&gt;用户自助申请证书&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;X5C&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;使用 X.509 客户端证书认证&lt;&#x2F;td&gt;&lt;td&gt;已有 PKI 体系的集成&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;查看 Provisioner 列表：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;~&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; $ step ca provisioner list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从 ConfigMap 中验证 cert-manager Provisioner 是否已正确加载：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n smallstep get configmap step-certificates-config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;quot;{.data[&amp;#39;ca\.json&amp;#39;]}&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; jq&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; -r &amp;#39;.authority.provisioners[] | select(.name==&amp;quot;cert-manager&amp;quot;) | {name,type,kid:.key.kid}&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  &amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;cert-manager&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  &amp;quot;type&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;JWK&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  &amp;quot;kid&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;3Fckyy_09lJ1hoJ-7dHIwLbmUffrzz42SIvifmrEjOw&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;kid（Key ID）&lt;&#x2F;strong&gt; 是 JWK 中的密钥标识符，用于在多个密钥中标识具体使用哪一个。后续配置 StepClusterIssuer 时需要用到这个值。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;4-3-4-chuang-jian-mi-ma-secret&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-4-chuang-jian-mi-ma-secret&quot; aria-label=&quot;Anchor link for: 4-3-4-chuang-jian-mi-ma-secret&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3.4 创建密码 Secret&lt;&#x2F;h4&gt;
&lt;p&gt;将 Provisioner 的私钥密码保存为 Kubernetes Secret，供 step-issuer 使用：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n smallstep create secret generic step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  --from-literal=password=&amp;#39;f7zl9rRbrBzujPSXT71k4Yd1TsLrBQyB&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;secret&#x2F;step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get secret -n smallstep step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                      TYPE     DATA   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   Opaque&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;      11s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ CA_ROOT_B64=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -n smallstep get configmap step-certificates-certs&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;quot;{.data[&amp;#39;root_ca\.crt&amp;#39;]}&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; base64&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -w&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ echo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-source&quot;&gt; ${CA_ROOT_B64}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ3ekNDQVdtZ0F3SUJBZ0lRWmFMY3MwellLcENaWHI3UU01aHQyVEFLQmdncWhrak9QUVFEQWpCQU1Sb3cKR0FZRFZRUUtFeEZUZEdWd0lFTmxjblJwWm1sallYUmxjekVpTUNBR0ExVUVBeE1aVTNSbGNDQkRaWEowYVdacApZMkYwWlhNZ1VtOXZkQ0JEUVRBZUZ3MHlOakE1TURreE16QTRNekZhRncwek5qQTVNRFl4TXpBNE16RmFNRUF4CkdqQVlCZ05WQkFvVEVWTjBaWEFnUTJWeWRHbG1hV05oZEdWek1TSXdJQVlEVlFRREV4bFRkR1Z3SUVObGNuUnAKWm1sallYUmxjeUJTYjI5MElFTkJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV5UEdveGw4bApPd0FEMHhUSDBQQWVPNjBtU3lyRG9SOUh6UGdreWV0L0NSMTE4alJRNlZzWS9McHBrQW1uRTcwWXY2UHEyQ0gyCmFHVitFcXJZVjZxWldLTkZNRU13RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOEMKQVFFd0hRWURWUjBPQkJZRUZHTDVPc2FMWkFQenpuam5FazZFazNlMkU1eHFNQW9HQ0NxR1NNNDlCQU1DQTBnQQpNRVVDSVFDSHFscEJPbWRublJJZUpiWEdHUUU2UzVYS0NXaG5zSFNTa2dZL0dmMndjd0lnSTZJOGwrYUcyaitOCkRHWDh6Z0JNdTF2Ym5wRCtGcXVvbEhoL25hU2RicE09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;kubectl create secret 命令参数说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;create secret generic&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;创建普通类型的 Secret&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;step-certificates-cert-manager-password&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Secret 名称&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--from-literal=password=&#x27;...&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;从字面量创建键值对，key 为 password&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h4 id=&quot;4-3-5-chuang-jian-stepclusterissuer&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-5-chuang-jian-stepclusterissuer&quot; aria-label=&quot;Anchor link for: 4-3-5-chuang-jian-stepclusterissuer&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3.5 创建 StepClusterIssuer&lt;&#x2F;h4&gt;
&lt;p&gt;在创建 StepClusterIssuer 之前，需要先通过 Ingress 将 step-ca 服务暴露为 &lt;code&gt;ca.kali-team.internal&lt;&#x2F;code&gt; 域名，以便其他集群也能访问。&lt;&#x2F;p&gt;
&lt;p&gt;创建 StepClusterIssuer 资源，链接 cert-manager 和 step-ca：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: certmanager.step.sm&#x2F;v1beta1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: StepClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  caBundle: &amp;gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ3ekNDQVdtZ0F3SUJBZ0lRWmFMY3MwellLcENaWHI3UU01aHQyVEFLQmdncWhrak9QUVFEQWpCQU1Sb3cKR0FZRFZRUUtFeEZUZEdWd0lFTmxjblJwWm1sallYUmxjekVpTUNBR0ExVUVBeE1aVTNSbGNDQkRaWEowYVdacApZMkYwWlhNZ1VtOXZkQ0JEUVRBZUZ3MHlOakE1TURreE16QTRNekZhRncwek5qQTVNRFl4TXpBNE16RmFNRUF4CkdqQVlCZ05WQkFvVEVWTjBaWEFnUTJWeWRHbG1hV05oZEdWek1TSXdJQVlEVlFRREV4bFRkR1Z3SUVObGNuUnAKWm1sallYUmxjeUJTYjI5MElFTkJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV5UEdveGw4bApPd0FEMHhUSDBQQWVPNjBtU3lyRG9SOUh6UGdreWV0L0NSMTE4alJRNlZzWS9McHBrQW1uRTcwWXY2UHEyQ0gyCmFHVitFcXJZVjZxWldLTkZNRU13RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOEMKQVFFd0hRWURWUjBPQkJZRUZHTDVPc2FMWkFQenpuam5FazZFazNlMkU1eHFNQW9HQ0NxR1NNNDlCQU1DQTBnQQpNRVVDSVFDSHFscEJPbWRublJJZUpiWEdHUUU2UzVYS0NXaG5zSFNTa2dZL0dmMndjd0lnSTZJOGwrYUcyaitOCkRHWDh6Z0JNdTF2Ym5wRCtGcXVvbEhoL25hU2RicE09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  provisioner:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    kid: 3Fckyy_09lJ1hoJ-7dHIwLbmUffrzz42SIvifmrEjOw&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    name: cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    passwordRef:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      key: password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      name: step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      namespace: smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  url: https:&#x2F;&#x2F;ca.kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;StepClusterIssuer 关键字段说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;caBundle&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;step-ca 的根 CA 证书（Base64 编码），用于验证 step-ca 服务的 TLS 证书&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;provisioner.kid&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;JWK Provisioner 的密钥 ID&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;provisioner.name&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Provisioner 名称&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;provisioner.passwordRef&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;引用存储 Provisioner 密码的 Secret&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;url&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;step-ca 服务的访问地址&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;验证 step-issuer 和 StepClusterIssuer 状态：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get pods -A&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; step-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                   step-issuer-6c65fd4d77-hpvsd                          1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;             0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                107m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get stepclusterissuer smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;        AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   9m26s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;4-3-6-qian-fa-ye-wu-zheng-shu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-6-qian-fa-ye-wu-zheng-shu&quot; aria-label=&quot;Anchor link for: 4-3-6-qian-fa-ye-wu-zheng-shu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3.6 签发业务证书&lt;&#x2F;h4&gt;
&lt;p&gt;使用 StepClusterIssuer 签发一张通配符证书到 &lt;code&gt;kube-system&lt;&#x2F;code&gt; 命名空间（Traefik 所在的命名空间）。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;&#x2F;strong&gt;：证书需要签发到 Traefik 所在的命名空间，因为 Kubernetes 的 Secret 不能跨命名空间读取。如果 Rancher（&lt;code&gt;cattle-system&lt;&#x2F;code&gt; 命名空间）也需要使用证书，需要单独签发一份到对应命名空间。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: cert-manager.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: Certificate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  secretName: kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  duration: 2160h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  renewBefore: 360h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  subject:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    organizations:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      - kali-team&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  dnsNames:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    - kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    - &amp;quot;*.kali-team.internal&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  issuerRef:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    name: smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    kind: StepClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    group: certmanager.step.sm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificate.cert-manager.io&#x2F;kali-team-internal&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Certificate 字段说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;值&lt;&#x2F;th&gt;&lt;th&gt;说明&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;duration&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;2160h&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;证书有效期，90 天&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;renewBefore&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;360h&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;到期前 15 天自动续期&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;issuerRef.kind&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;StepClusterIssuer&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;引用的签发者类型为 StepClusterIssuer&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;issuerRef.group&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;certmanager.step.sm&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;外部签发者的 API 组&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;验证证书签发结果：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get certificate -n kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                 READY   SECRET                   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kali-team-internal&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   True    kali-team-internal       22s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使用 openssl 查看证书详情：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get secret kali-team-internal&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  -n kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;#39;{.data.tls\.crt}&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; base64&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; openssl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; x509 -noout&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      -subject&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      -issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      -dates&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      -ext subjectAltName&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;subject&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;CN&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;O&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Step&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; Certificates,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CN=Step Certificates Intermediate CA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;notBefore&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  9&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 14:50:34&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; GMT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;notAfter&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Dec&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  8&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 14:51:34&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; GMT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;X509v3&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Subject Alternative Name:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    DNS:kali-team.internal,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; DNS:&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;.kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;从输出可以看到：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;证书由 &lt;strong&gt;Step Certificates Intermediate CA&lt;&#x2F;strong&gt; 签发（中间 CA）&lt;&#x2F;li&gt;
&lt;li&gt;有效期约 90 天&lt;&#x2F;li&gt;
&lt;li&gt;包含两个 SAN（主题备用名称）：根域名和一级通配符域名&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;4-3-7-pei-zhi-dns-he-ca-zheng-shu-san&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#4-3-7-pei-zhi-dns-he-ca-zheng-shu-san&quot; aria-label=&quot;Anchor link for: 4-3-7-pei-zhi-dns-he-ca-zheng-shu-san&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
4.3.7 配置 DNS 和 CA 证书 SAN&lt;&#x2F;h4&gt;
&lt;p&gt;为了让业务节点能够通过 &lt;code&gt;ca.kali-team.internal&lt;&#x2F;code&gt; 访问 step-ca 服务，需要确保 DNS 解析正常。先用 busybox 测试集群内 DNS 解析：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl rollout restart deployment&#x2F;coredns -n kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;deployment.apps&#x2F;coredns&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; restarted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl run nslookup-test --image=busybox --rm -it --restart=Never -- nslookup ca.kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Server:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;         10.43.0.10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Address:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;        10.43.0.10:53&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Name:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   ca.kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Address:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 10.111.13.99&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;All&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; commands and output from this session will be recorded in container logs, including credentials and sensitive information passed through the command prompt.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;If&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; you don&amp;#39;t see a command prompt, try pressing enter.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;warning: couldn&amp;#39;t attach to pod&#x2F;nslookup-test, falling back to streaming logs: Internal error occurred: Internal error occurred: error attaching to container: container is in CONTAINER_EXITED state&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Server:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;         10.43.0.10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Address:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  10.43.0.10:53&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Name:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   ca.kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Address:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 10.111.13.99&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;pod&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;nslookup-test&amp;quot; deleted from default namespace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;DNS 解析正常。接下来需要确保 step-ca 服务的证书中包含 &lt;code&gt;ca.kali-team.internal&lt;&#x2F;code&gt; 这个 SAN，否则客户端会报证书域名不匹配错误。&lt;&#x2F;p&gt;
&lt;p&gt;修改 ConfigMap 中的 &lt;code&gt;step-certificates-config&lt;&#x2F;code&gt;，在 &lt;code&gt;dnsNames&lt;&#x2F;code&gt; 中添加外部域名：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;dnsNames&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    &amp;quot;step-certificates.smallstep.svc.cluster.local&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    &amp;quot;ca.kali-team.internal&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;    &amp;quot;127.0.0.1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;dnsNames 字段说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;DNS 名称&lt;&#x2F;th&gt;&lt;th&gt;用途&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;step-certificates.smallstep.svc.cluster.local&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;集群内部服务发现地址&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ca.kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;外部访问的域名（通过 Ingress）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;127.0.0.1&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;本地回环地址，用于 Pod 内部访问&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;修改完成后重启 step-certificates StatefulSet：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl rollout restart statefulset step-certificates -n smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;statefulset.apps&#x2F;step-certificates&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; restarted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;wu-traefik-ru-kou-wang-guan-pei-zhi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#wu-traefik-ru-kou-wang-guan-pei-zhi&quot; aria-label=&quot;Anchor link for: wu-traefik-ru-kou-wang-guan-pei-zhi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
五、Traefik 入口网关配置&lt;&#x2F;h2&gt;
&lt;p&gt;Traefik 是 k3s 内置的 Ingress Controller，负责将外部流量路由到集群内部的服务。为了让所有通过 HTTPS 访问的服务都能使用我们签发的证书，需要配置 Traefik 的默认 TLS 证书。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;5-1-pei-zhi-mo-ren-zheng-shu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#5-1-pei-zhi-mo-ren-zheng-shu&quot; aria-label=&quot;Anchor link for: 5-1-pei-zhi-mo-ren-zheng-shu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
5.1 配置默认证书&lt;&#x2F;h3&gt;
&lt;p&gt;k3s 通过 HelmChart 来管理 Traefik 的部署。我们可以使用 &lt;code&gt;HelmChartConfig&lt;&#x2F;code&gt; 来自定义 Traefik 的配置，而不需要直接修改 HelmChart。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;方案 A：使用内置自签证书&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你选择了方案一（内置自签证书），使用以下配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 使用 HelmChartConfig 配置（正确的 Traefik 3.x 语法）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: helm.cattle.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: HelmChartConfig&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: traefik&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  valuesContent: |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    globalArguments: []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    additionalArguments:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      - &amp;quot;--serverstransport.insecureskipverify=true&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    tlsOptions:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      default:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        minVersion: VersionTLS12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    tlsStore:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      default:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        defaultCertificate:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;          secretName: internal-default-cert&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;helmchartconfig.helm.cattle.io&#x2F;traefik&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;方案 B：使用 step-ca 签发的证书&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你选择了方案二（step-ca 私有 CA），使用以下配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 使用 HelmChartConfig 配置（正确的 Traefik 3.x 语法）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: helm.cattle.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: HelmChartConfig&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: traefik&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  valuesContent: |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    globalArguments: []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    additionalArguments:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      - &amp;quot;--serverstransport.insecureskipverify=true&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    tlsOptions:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      default:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        minVersion: VersionTLS12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    tlsStore:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      default:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        defaultCertificate:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;          secretName: kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;helmchartconfig.helm.cattle.io&#x2F;traefik&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;配置项说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置项&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;globalArguments: []&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;清空全局参数，避免 Traefik 2.x 兼容参数在 3.x 中产生警告&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;additionalArguments&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;额外的命令行参数&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--serverstransport.insecureskipverify=true&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;后端服务传输跳过证书验证（在内部自签证书场景下使用）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;tlsOptions.default.minVersion&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;默认 TLS 最低版本，设置为 TLS 1.2 以保证安全性&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;tlsStore.default.defaultCertificate.secretName&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;默认证书的 Secret 名称，当 Ingress 未指定 TLS 证书时使用&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;HelmChartConfig 是什么？&lt;&#x2F;strong&gt; 它是 k3s 特有的功能，允许用户通过自定义资源的方式覆盖内置 Helm Chart 的 values 配置，而不需要手动重新安装 Chart。k3s 的 Helm Controller 会自动检测并应用这些配置。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;重启 Traefik 使配置生效：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 或者使用 rollout restart&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl rollout restart deployment traefik -n kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;deployment.apps&#x2F;traefik&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; restarted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl get pods -n kube-system -l app.kubernetes.io&#x2F;name=traefik&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                       READY   STATUS    RESTARTS   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;traefik-5f4d7646b8-pql94&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          28s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;你也可以直接通过 Traefik 的 TLSStore CRD 来配置默认证书：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;EOF&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: traefik.io&#x2F;v1alpha1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: TLSStore&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  defaultCertificate:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    secretName: kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;tlsstore.traefik.io&#x2F;default&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;TLSStore 是 Traefik 提供的自定义资源，用于管理 TLS 存储。名为 &lt;code&gt;default&lt;&#x2F;code&gt; 的 TLSStore 会被所有 IngressRoute 作为默认证书来源使用。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;liu-rancher-duo-ji-qun-guan-li-ping-tai&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#liu-rancher-duo-ji-qun-guan-li-ping-tai&quot; aria-label=&quot;Anchor link for: liu-rancher-duo-ji-qun-guan-li-ping-tai&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
六、Rancher 多集群管理平台&lt;&#x2F;h2&gt;
&lt;p&gt;Rancher 是整个 DevSecOps 平台的管理中枢，它提供统一的 Web 界面来管理多个 Kubernetes 集群、用户权限、应用商店等。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;6-1-an-zhuang-rancher&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#6-1-an-zhuang-rancher&quot; aria-label=&quot;Anchor link for: 6-1-an-zhuang-rancher&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
6.1 安装 Rancher&lt;&#x2F;h3&gt;
&lt;p&gt;首先添加 Rancher 官方 Helm 仓库：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm repo add rancher-stable https:&#x2F;&#x2F;releases.rancher.com&#x2F;server-charts&#x2F;stable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;rancher-stable&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; has been added to your repositories&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl create namespace cattle-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;namespace&#x2F;cattle-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm repo update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Hang&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tight while we grab the latest from your chart repositories...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;rancher-stable&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Update&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Complete. ⎈Happy Helming!⎈&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使用 step-ca 签发的证书安装 Rancher：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cattle-system get ingress rancher&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;#39;{.spec.tls[0].secretName}{&amp;quot;\n&amp;quot;}&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;tls-rancher-ingress&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ helm upgrade rancher rancher-stable&#x2F;rancher&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  -n cattle-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --set hostname=rancher.kali-team.internal&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --set replicas=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --set privateCA=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language z-true&quot;&gt;true&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --set ingress.tls.source=secret&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --set ingress.tls.secretName=kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Release&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;rancher&amp;quot; has been upgraded. Happy Helming!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; rancher&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;LAST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; DEPLOYED: Mon Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;  7&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 17:39:58&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cattle-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;STATUS:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; deployed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;REVISION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;DESCRIPTION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Upgrade complete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;TEST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; SUITE: None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NOTES:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Rancher&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Server has been upgraded. Rancher may take several minutes to fully initialize.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Please&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; standby while Certificates are being issued, Containers are started and the Ingress rule comes up.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Check&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; out our docs at https:&#x2F;&#x2F;rancher.com&#x2F;docs&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;## First Time Login&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;If&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; you provided your own bootstrap password during installation, browse to https:&#x2F;&#x2F;rancher.kali-team.internal to get started.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;If&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; this is the first time you installed Rancher, get started by running this command and clicking the URL it generates:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; https:&#x2F;&#x2F;rancher.kali-team.internal&#x2F;dashboard&#x2F;?setup=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; get secret --namespace cattle-system bootstrap-secret -o go-template=&amp;#39;{{.data.bootstrapPassword|base64decode}}&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Rancher Helm 参数说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;值&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;hostname&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;rancher.kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Rancher 访问域名，Ingress 会使用此域名配置路由&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;replicas&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;1&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Rancher 副本数，单节点环境设为 1，生产环境建议设为 3 实现高可用&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;privateCA&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;标记使用私有 CA 签发的证书，Rancher 会做相应的配置调整&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ingress.tls.source&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;secret&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;TLS 证书来源类型，&lt;code&gt;secret&lt;&#x2F;code&gt; 表示使用已有的 Secret&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ingress.tls.secretName&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;kali-team-internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;TLS 证书所在的 Secret 名称&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;验证 Ingress 的 TLS 配置是否生效：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cattle-system get ingress rancher&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;#39;{.spec.tls[0].secretName}{&amp;quot;\n&amp;quot;}&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;可以看到 TLS 配置已经从默认的 &lt;code&gt;tls-rancher-ingress&lt;&#x2F;code&gt; 变为我们指定的 &lt;code&gt;kali-team-internal&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;6-2-shou-ci-deng-lu-yu-chu-shi-hua&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#6-2-shou-ci-deng-lu-yu-chu-shi-hua&quot; aria-label=&quot;Anchor link for: 6-2-shou-ci-deng-lu-yu-chu-shi-hua&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
6.2 首次登录与初始化&lt;&#x2F;h3&gt;
&lt;p&gt;Rancher 安装完成后，第一次登录需要使用 bootstrap 密码来设置管理员密码。&lt;&#x2F;p&gt;
&lt;p&gt;获取 bootstrap 密码：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  ~ kubectl get secret --namespace cattle-system bootstrap-secret -o go-template=&amp;#39;{{.data.bootstrapPassword|base64decode}}{{&amp;quot;\n&amp;quot;}}&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;d729kxkj8mdxkc6ztr4pnxl5tprrd9cfnhthtshhjhz8s4mkj8cs49&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在浏览器中访问 &lt;code&gt;https:&#x2F;&#x2F;rancher.kali-team.internal&lt;&#x2F;code&gt;，使用上面的 bootstrap 密码登录，然后设置新的管理员密码。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;2026&#x2F;09&#x2F;%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91-Rancher%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA&#x2F;screenshot_1.png&quot; alt=&quot;Rancher 首次登录界面&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;图 1：Rancher 首次登录界面&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;6-3-dao-ru-step-ca-gen-zheng-shu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#6-3-dao-ru-step-ca-gen-zheng-shu&quot; aria-label=&quot;Anchor link for: 6-3-dao-ru-step-ca-gen-zheng-shu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
6.3 导入 Step CA 根证书&lt;&#x2F;h3&gt;
&lt;p&gt;由于我们使用了私有 CA 签发的证书，需要将 Step CA 的根证书导入到 Rancher 中，这样 Rancher 才能信任由该 CA 签发的所有证书（比如接入新集群时的 TLS 通信）。&lt;&#x2F;p&gt;
&lt;p&gt;首先从 step-ca 导出根 CA 证书：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n smallstep get configmap step-certificates-certs&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;#39;{.data.root_ca\.crt}&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kali-team-root-ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cat kali-team-root-ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;-----BEGIN&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CERTIFICATE-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;-----END&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CERTIFICATE-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;将根证书导入操作系统信任库（Arch Linux）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo cp kali-team-root-ca.crt &#x2F;etc&#x2F;ca-certificates&#x2F;trust-source&#x2F;anchors&#x2F;nuc.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ sudo trust extract-compat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ curl https:&#x2F;&#x2F;ca.kali-team.internal&#x2F;health&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;status&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;ok&amp;quot;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使用 curl 测试 ca 服务，如果没有证书错误说明系统已经信任该证书。返回 &lt;code&gt;{&quot;status&quot;:&quot;ok&quot;}&lt;&#x2F;code&gt; 表示 step-ca 服务运行正常。&lt;&#x2F;p&gt;
&lt;p&gt;将根证书导入 Rancher：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ cp kali-team-root-ca.crt &#x2F;tmp&#x2F;root_ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cattle-system create secret generic tls-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --from-file=cacerts.pem=&#x2F;tmp&#x2F;root_ca.crt&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --dry-run=client -o yaml&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;secret&#x2F;tls-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cattle-system get secret tls-ca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;     TYPE     DATA   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;tls-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   Opaque&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;      8s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cattle-system get secret tls-ca&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  -o jsonpath=&amp;#39;{.data.cacerts\.pem}&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; base64&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;  |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; openssl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; x509 -noout -subject -issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;subject&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;O&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Step&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; Certificates,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CN=Step Certificates Root CA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;O&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Step&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; Certificates,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CN=Step Certificates Root CA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;➜&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  ~ kubectl -n cattle-system rollout restart deployment rancher&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;命令说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tls-ca&lt;&#x2F;code&gt; 是 Rancher 约定的 Secret 名称，用于存储私有 CA 根证书&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cacerts.pem&lt;&#x2F;code&gt; 是约定的 key 名称，Rancher 会从这个 key 中读取 CA 证书&lt;&#x2F;li&gt;
&lt;li&gt;使用 &lt;code&gt;--dry-run=client -o yaml | kubectl apply -f -&lt;&#x2F;code&gt; 是一种幂等操作技巧：如果 Secret 不存在则创建，存在则更新&lt;&#x2F;li&gt;
&lt;li&gt;最后重启 Rancher Deployment 让配置生效&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么要导入根证书？&lt;&#x2F;strong&gt; Rancher 在管理下游集群时，需要与集群的 Kubernetes API 进行 TLS 通信。如果下游集群使用私有 CA 签发的证书，Rancher 必须信任该 CA，否则会因为证书验证失败而无法连接。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;qi-ye-wu-ji-qun-jie-dian-da-jian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#qi-ye-wu-ji-qun-jie-dian-da-jian&quot; aria-label=&quot;Anchor link for: qi-ye-wu-ji-qun-jie-dian-da-jian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
七、业务集群节点搭建&lt;&#x2F;h2&gt;
&lt;p&gt;管理平台（Rancher + 管理节点 k3s）搭建完成后，接下来需要搭建业务集群。通常不会将业务系统部署在与管理平台同一台服务器上，而是使用独立的节点。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;7-1-chuang-jian-xin-ji-qun&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#7-1-chuang-jian-xin-ji-qun&quot; aria-label=&quot;Anchor link for: 7-1-chuang-jian-xin-ji-qun&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
7.1 创建新集群&lt;&#x2F;h3&gt;
&lt;p&gt;登录 Rancher 管理界面，在 Cluster Management 中创建新的集群。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;建议配置&lt;&#x2F;strong&gt;：管理平台集群（local 集群）可以配置 &lt;code&gt;hide-local-cluster: true&lt;&#x2F;code&gt; 来隐藏，让界面更整洁，专注于业务集群管理。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;2026&#x2F;09&#x2F;%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91-Rancher%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA&#x2F;screenshot_2.png&quot; alt=&quot;Rancher 创建集群&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;图 2：Rancher 创建集群&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在创建集群时，可以配置镜像仓库重写（Registry Mirror），根据需要填写。这里只重写 Docker Hub 的镜像：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;2026&#x2F;09&#x2F;%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91-Rancher%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA&#x2F;screenshot_3.png&quot; alt=&quot;Rancher 集群镜像仓库重写配置&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;图 3：集群创建向导中配置镜像仓库重写，加速国内镜像拉取&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击创建后，Rancher 会生成一个节点注册命令，用于在新节点上执行以加入集群：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;2026&#x2F;09&#x2F;%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91-Rancher%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA&#x2F;screenshot_4.png&quot; alt=&quot;Rancher 集群注册命令&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;图 4：Rancher 生成的节点注册命令，包含 token 和角色配置&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;7-2-jie-dian-zhu-ce-yu-jia-ru&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#7-2-jie-dian-zhu-ce-yu-jia-ru&quot; aria-label=&quot;Anchor link for: 7-2-jie-dian-zhu-ce-yu-jia-ru&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
7.2 节点注册与加入&lt;&#x2F;h3&gt;
&lt;p&gt;在新的业务节点（Ubuntu 系统）上，先导入 Step CA 的根证书，确保节点信任私有 CA 签发的证书：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kali-team-root-ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo cp kali-team-root-ca.crt&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  &#x2F;usr&#x2F;local&#x2F;share&#x2F;ca-certificates&#x2F;kali-team-root-ca.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo update-ca-certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Updating&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; certificates in &#x2F;etc&#x2F;ssl&#x2F;certs...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;rehash:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; added,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; removed&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; done.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; hooks in &#x2F;etc&#x2F;ca-certificates&#x2F;update.d...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;done.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu 系统证书导入说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;命令&#x2F;路径&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;usr&#x2F;local&#x2F;share&#x2F;ca-certificates&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Ubuntu 系统自定义 CA 证书存放目录&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;sudo update-ca-certificates&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;更新系统证书信任库，扫描目录中的证书并添加到信任链&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;验证 Rancher 证书是否被信任：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; curl https:&#x2F;&#x2F;rancher.kali-team.internal&#x2F;cacerts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;-----BEGIN&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CERTIFICATE-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;-----END&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; CERTIFICATE-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;curl 能正常获取证书而不报 SSL 错误，说明系统已经信任了我们的私有 CA。&lt;&#x2F;p&gt;
&lt;p&gt;执行 Rancher 提供的注册命令，将节点加入集群：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; curl -fL https:&#x2F;&#x2F;rancher.kali-team.internal&#x2F;system-agent-install.sh&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  sh -s - --server https:&#x2F;&#x2F;rancher.kali-team.internal --label &amp;#39;cattle.io&#x2F;os=linux&amp;#39; --token z8592ctfvdw24czgpxgg9m5fbvhljdghppz9kh4vj225rbbgmwqdr9 --etcd --controlplane --worker&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;  %&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;                                 Dload&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  Upload   Total   Spent    Left  Speed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;100&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 34452    0 34452    0     0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   563k&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;      0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; --:--:-- --:--:-- --:--:--  570k&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Label: cattle.io&#x2F;os&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;linux&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Role requested: etcd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Role requested: controlplane&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Role requested: worker&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  CA strict verification is set to true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Using default agent configuration directory &#x2F;etc&#x2F;rancher&#x2F;agent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Using default agent var directory &#x2F;var&#x2F;lib&#x2F;rancher&#x2F;agent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Successfully downloaded CA certificate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Value from https:&#x2F;&#x2F;rancher.kali-team.internal&#x2F;cacerts is an x509 certificate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Successfully tested Rancher connection&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Downloading rancher-system-agent binary from https:&#x2F;&#x2F;rancher.kali-team.internal&#x2F;assets&#x2F;rancher-system-agent-amd64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Successfully downloaded the rancher-system-agent binary.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Downloading rancher-system-agent-uninstall.sh script from https:&#x2F;&#x2F;rancher.kali-team.internal&#x2F;assets&#x2F;system-agent-uninstall.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Successfully downloaded the rancher-system-agent-uninstall.sh script.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Generating Cattle ID&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Rancher System Agent version v0.15.1&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (529229529671ac2b1908eff7f56097daaef3417b) - Connection Info Validation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Validating remote configuration&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Checking connection info file: &#x2F;var&#x2F;lib&#x2F;rancher&#x2F;agent&#x2F;rancher2_connection_info.json.tmp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Connection info file exists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Connection info file is valid JSON&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Connection info has required kubeConfig field&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Connection info has namespace: fleet-default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Connection info has secretName: custom-dd2fe218e55b-machine-plan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;INFO[0000]&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Connection info validation successful&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Successfully downloaded and validated Rancher connection information&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  systemd: Creating service file&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Creating environment file &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;rancher-system-agent.env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Enabling rancher-system-agent.service&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Created&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; symlink &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;multi-user.target.wants&#x2F;rancher-system-agent.service → &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;rancher-system-agent.service.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;  Starting&#x2F;restarting rancher-system-agent.service&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;注册命令参数说明：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;含义&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--server https:&#x2F;&#x2F;rancher.kali-team.internal&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Rancher Server 的地址&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--label &#x27;cattle.io&#x2F;os=linux&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;为节点添加标签，用于标识操作系统类型&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--token z8592ctfvdw...&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;集群注册令牌，用于身份验证&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--etcd&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;节点承担 etcd 角色（存储集群数据）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--controlplane&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;节点承担控制平面角色（API Server、Controller 等）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--worker&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;节点承担工作节点角色（运行业务 Pod）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;blockquote&gt;
&lt;p&gt;注册脚本会下载并安装 &lt;code&gt;rancher-system-agent&lt;&#x2F;code&gt;，这是 Rancher 用来管理下游节点的 Agent 服务。它通过 Rancher Server 获取节点配置，然后按照配置安装 k3s&#x2F;RKE2 等 Kubernetes 发行版。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;安装过程中，Agent 会自动下载 k3s 二进制、配置 systemd 服务、加入集群。等待几分钟后，节点就会出现在 Rancher 的集群节点列表中。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;7-3-pei-zhi-kubeconfig&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#7-3-pei-zhi-kubeconfig&quot; aria-label=&quot;Anchor link for: 7-3-pei-zhi-kubeconfig&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
7.3 配置 kubeconfig&lt;&#x2F;h3&gt;
&lt;p&gt;节点加入集群后，同样需要配置本地用户的 kubeconfig，以便使用 kubectl 命令。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; echo &amp;#39;write-kubeconfig-mode: &amp;quot;0644&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tee &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;config.yaml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;write-kubeconfig-mode:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;0644&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; mkdir -p ~&#x2F;.kube&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo cp &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo chown ubuntu: ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;uid&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; gid&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; groups&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,4&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;adm&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,24&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cdrom&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,27&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,30&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;dip&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;,105&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;lxd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo chown ubuntu:ubuntu ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; chmod&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 600&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.kube&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo mv &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml.bak&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo ln -s &#x2F;home&#x2F;ubuntu&#x2F;.kube&#x2F;config &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;k3s.yaml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get nodes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;       STATUS   ROLES                       AGE    VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;nuc-node&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   Ready    control-plane,etcd,worker   150m   v1.36.4+k3s1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo chmod&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 644&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;etc&#x2F;rancher&#x2F;k3s&#x2F;config.yaml.d&#x2F;50-rancher.yaml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证节点状态：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get nodes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;       STATUS   ROLES                       AGE    VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;nuc-node&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   Ready    control-plane,etcd,worker   150m   v1.36.4+k3s1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;节点状态为 &lt;code&gt;Ready&lt;&#x2F;code&gt;，角色同时包含 &lt;code&gt;control-plane&lt;&#x2F;code&gt;、&lt;code&gt;etcd&lt;&#x2F;code&gt; 和 &lt;code&gt;worker&lt;&#x2F;code&gt;，说明这是一个单节点集群（所有角色都在同一个节点上）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;7-4-dns-jie-xi-pei-zhi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#7-4-dns-jie-xi-pei-zhi&quot; aria-label=&quot;Anchor link for: 7-4-dns-jie-xi-pei-zhi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
7.4 DNS 解析配置&lt;&#x2F;h3&gt;
&lt;p&gt;由于 &lt;code&gt;*.kali-team.internal&lt;&#x2F;code&gt; 是我们自定义的内网域名，没有公共 DNS 解析记录。有两种解决方案：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;在公司内网 DNS 服务器上添加 A 记录（推荐生产环境使用）&lt;&#x2F;li&gt;
&lt;li&gt;在 CoreDNS 中配置重写规则（适合测试&#x2F;开发环境）&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;这里我们使用 CoreDNS 的 NodeHosts 功能来配置，类似于修改 hosts 文件。&lt;&#x2F;p&gt;
&lt;p&gt;编辑 CoreDNS ConfigMap：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; k3s kubectl -n kube-system edit configmap coredns&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;configmap&#x2F;coredns&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; edited&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在 &lt;code&gt;NodeHosts&lt;&#x2F;code&gt; 部分添加域名解析记录，格式与 &lt;code&gt;&#x2F;etc&#x2F;hosts&lt;&#x2F;code&gt; 文件相同：&lt;code&gt;IP地址 域名&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;修改完成后重启 CoreDNS：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; k3s kubectl -n kube-system rollout restart deployment coredns&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;deployment.apps&#x2F;coredns&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; restarted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;2026&#x2F;09&#x2F;%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91-Rancher%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA&#x2F;screenshot_5.png&quot; alt=&quot;业务集群节点上线后界面&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;图 5：业务集群节点上线后界面&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么不用 Ingress 的 externalIP 或者 LoadBalancer？&lt;&#x2F;strong&gt; 在私有云&#x2F;内网环境中，通常没有云厂商提供的 LoadBalancer，k3s 默认使用 ServiceLB（基于 DaemonSet 的 hostPort 实现）。通过 CoreDNS 配置自定义域名解析，可以让集群内部的服务也能通过域名访问到 Traefik Ingress。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;或者使用自定义DNS&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;EOF&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -n kube-system rollout restart deployment coredns&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: ConfigMap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: coredns-custom&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: kube-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;data:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  kali-team.server: |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    kali-team.internal:53 {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        errors&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        hosts {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;            10.111.13.105 hub.kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;            fallthrough&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;        forward . &#x2F;etc&#x2F;resolv.conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;configmap&#x2F;coredns-custom&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;deployment.apps&#x2F;coredns&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; restarted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;7-5-ye-wu-jie-dian-zheng-shu-pei-zhi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#7-5-ye-wu-jie-dian-zheng-shu-pei-zhi&quot; aria-label=&quot;Anchor link for: 7-5-ye-wu-jie-dian-zheng-shu-pei-zhi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
7.5 业务节点证书配置&lt;&#x2F;h3&gt;
&lt;p&gt;业务集群也需要配置证书管理。由于 step-ca 服务部署在管理平台集群上，业务节点只需要安装 cert-manager 和 step-issuer，然后通过外部域名连接到 step-ca 即可。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;步骤 1：安装 cert-manager&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helm repo add jetstack https:&#x2F;&#x2F;charts.jetstack.io&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;jetstack&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; has been added to your repositories&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helm upgrade --install cert-manager jetstack&#x2F;cert-manager&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --namespace cert-manager&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --create-namespace&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --set crds.enabled=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language z-true&quot;&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Release&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;cert-manager&amp;quot; does not exist. Installing it now.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;LAST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; DEPLOYED: Thu Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 11:10:49&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;STATUS:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; deployed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;REVISION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;DESCRIPTION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Install complete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;TEST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; SUITE: None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NOTES:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v1.21.1 has been deployed successfully!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;In&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; order to begin issuing certificates, you will need to set up a ClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;or&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Issuer resource&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (for&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; example, by creating a &amp;#39;letsencrypt-staging&amp;#39; issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;More&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; information on the different types of issuers and how to configure them&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;can&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; be found in our documentation:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;cert-manager.io&#x2F;docs&#x2F;configuration&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;For&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; information on how to configure cert-manager to automatically provision&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Certificates&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; for Ingress resources, take a look at the&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt; `&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ingress-shim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;documentation:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;cert-manager.io&#x2F;docs&#x2F;usage&#x2F;ingress&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;For&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; information on how to configure cert-manager to automatically provision&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Certificates&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; for Gateway API resources, take a look at the&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt; `&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;gateway&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; resource&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-evaluation z-backticks z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;documentation:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;cert-manager.io&#x2F;docs&#x2F;usage&#x2F;gateway&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl -n cert-manager get po&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                                       READY   STATUS    RESTARTS   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-689c4c5575-dznnx&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;              1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          2m2s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-cainjector-6fbb9c8cd6-7wkd5&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          2m2s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cert-manager-webhook-646c95c5ff-g55h5&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;      1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          2m2s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;步骤 2：安装 step-issuer&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helm repo add smallstep  https:&#x2F;&#x2F;smallstep.github.io&#x2F;helm-charts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;&amp;quot;smallstep&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; already exists with the same configuration, skipping&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helm repo update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Hang&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tight while we grab the latest from your chart repositories...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;jetstack&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;..&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;.Successfully got an update from the &amp;quot;smallstep&amp;quot; chart repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;Update&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Complete. ⎈Happy Helming!⎈&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helm install&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;   step-issuer smallstep&#x2F;step-issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;   --namespace smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;   --create-namespace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; step-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;LAST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; DEPLOYED: Sat Sep&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 14:11:53&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2026&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;STATUS:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; deployed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;REVISION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;DESCRIPTION:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; Install complete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;TEST&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; SUITE: None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NOTES:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;⚙️&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;  Thanks for installing step-issuer.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;step-issuer&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; is ideal for issuing certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;from&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; your own private Certificate Authority&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (CA).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;To&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; start issuing certificates, you will need:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;👉&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; A cert-manager installation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;👉&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; A step-ca Certificate Authority&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (CA) or a Smallstep Certificate Manager authority&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;👉&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; A StepIssuer resource that links step-issuer to your CA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;To&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; continue, follow the instructions here:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;https:&#x2F;&#x2F;u.step.sm&#x2F;step-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证 step-issuer 运行状态：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get pods -n smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                           READY   STATUS    RESTARTS   AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;step-issuer-6c65fd4d77-jggxr&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;   0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;          21h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;步骤 3：创建 Provisioner 密码 Secret&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl -n smallstep create secret generic step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  --from-literal=password=&amp;#39;f7zl9rRbrBzujPSXT71k4Yd1TsLrBQyB&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;secret&#x2F;step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;步骤 4：创建 StepClusterIssuer&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;&#x2F;strong&gt;：这里的 &lt;code&gt;url&lt;&#x2F;code&gt; 必须使用外部暴露的域名 &lt;code&gt;https:&#x2F;&#x2F;ca.kali-team.internal&lt;&#x2F;code&gt;，因为 &lt;code&gt;svc.cluster.local&lt;&#x2F;code&gt; 是管理平台集群内部的地址，业务集群的节点访问不到。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: certmanager.step.sm&#x2F;v1beta1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: StepClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  caBundle: &amp;gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ3ekNDQVdtZ0F3SUJBZ0lRWmFMY3MwellLcENaWHI3UU01aHQyVEFLQmdncWhrak9QUVFEQWpCQU1Sb3cKR0FZRFZRUUtFeEZUZEdWd0lFTmxjblJwWm1sallYUmxjekVpTUNBR0ExVUVBeE1aVTNSbGNDQkRaWEowYVdacApZMkYwWlhNZ1VtOXZkQ0JEUVRBZUZ3MHlOakE1TURreE16QTRNekZhRncwek5qQTVNRFl4TXpBNE16RmFNRUF4CkdqQVlCZ05WQkFvVEVWTjBaWEFnUTJWeWRHbG1hV05oZEdWek1TSXdJQVlEVlFRREV4bFRkR1Z3SUVObGNuUnAKWm1sallYUmxjeUJTYjI5MElFTkJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV5UEdveGw4bApPd0FEMHhUSDBQQWVPNjBtU3lyRG9SOUh6UGdreWV0L0NSMTE4alJRNlZzWS9McHBrQW1uRTcwWXY2UHEyQ0gyCmFHVitFcXJZVjZxWldLTkZNRU13RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOEMKQVFFd0hRWURWUjBPQkJZRUZHTDVPc2FMWkFQenpuam5FazZFazNlMkU1eHFNQW9HQ0NxR1NNNDlCQU1DQTBnQQpNRVVDSVFDSHFscEJPbWRublJJZUpiWEdHUUU2UzVYS0NXaG5zSFNTa2dZL0dmMndjd0lnSTZJOGwrYUcyaitOCkRHWDh6Z0JNdTF2Ym5wRCtGcXVvbEhoL25hU2RicE09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  provisioner:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    kid: 3Fckyy_09lJ1hoJ-7dHIwLbmUffrzz42SIvifmrEjOw&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    name: cert-manager&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    passwordRef:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      key: password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      name: step-certificates-cert-manager-password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      namespace: smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  url: https:&#x2F;&#x2F;ca.kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;stepclusterissuer.certmanager.step.sm&#x2F;smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证 StepClusterIssuer 和 step-issuer 状态：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get certificate -n cattle-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;No&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; resources found in cattle-system namespace.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get pods -A&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; step-issuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;             step-issuer-6c65fd4d77-rfq9t                 1&#x2F;1     Running&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;     0&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;             10m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get stepclusterissuer smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;        AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;smallstep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   112s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;步骤 5：签发 Rancher 命名空间证书&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;为 &lt;code&gt;cattle-system&lt;&#x2F;code&gt; 命名空间（Rancher 所在命名空间）签发通配符证书：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; kubectl&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apply -f -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;apiVersion: cert-manager.io&#x2F;v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;kind: Certificate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;metadata:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  name: kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  namespace: cattle-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;spec:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  secretName: kali-team-internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  duration: 2160h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  renewBefore: 360h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  subject:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    organizations:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;      - kali-team&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  dnsNames:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    - kali-team.internal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    - &amp;quot;*.kali-team.internal&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  issuerRef:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    name: smallstep&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    kind: StepClusterIssuer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;    group: certmanager.step.sm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;certificate.cert-manager.io&#x2F;kali-team-internal&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;验证证书签发：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get certificate -n cattle-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                 READY   SECRET               AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kali-team-internal&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   True    kali-team-internal   55s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;步骤 6：配置 Traefik 默认证书&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;先确认 Traefik 的 TLSStore CRD 是否已存在：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get crd tlsstores.traefik.io&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;                   CREATED AT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;tlsstores.traefik.io&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   2026-09-12T11:58:57Z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;设置全局默认证书：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get tlsstore -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;NAMESPACE&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;     NAME      AGE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   default   86s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; kubectl get jobs -n kube-system&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helm-install-traefik&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;helm-install-traefik&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;       Complete   1&#x2F;1           5s         4m16s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;helm-install-traefik-crd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;   Complete   1&#x2F;1           7s         12h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ubuntu@nuc-node:~$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果 &lt;code&gt;kube-system&lt;&#x2F;code&gt; 命名空间中存在名为 &lt;code&gt;default&lt;&#x2F;code&gt; 的 TLSStore，说明全局默认证书配置已经持久化生效。Traefik 重启后仍然会保留此配置。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;2026&#x2F;09&#x2F;%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91-Rancher%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA&#x2F;screenshot_6.png&quot; alt=&quot;业务集群节点证书&quot; &#x2F;&gt;
&lt;em&gt;图 6：业务集群节点证书&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;shi-can-kao-zi-liao&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#shi-can-kao-zi-liao&quot; aria-label=&quot;Anchor link for: shi-can-kao-zi-liao&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
十、参考资料&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.k3s.io&#x2F;zh&#x2F;quick-start&quot;&gt;k3s 官方文档 - 快速入门&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rancher.cn&#x2F;docs&#x2F;rancher2&#x2F;quick-start-guide&#x2F;&quot;&gt;Rancher 官方文档 - 快速入门指南&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;smallstep.com&#x2F;docs&#x2F;certificate-manager&#x2F;kubernetes-tls&#x2F;kubernetes-step-issuer&#x2F;&quot;&gt;Smallstep 文档 - Kubernetes step-issuer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cert-manager.io&#x2F;docs&#x2F;&quot;&gt;cert-manager 官方文档&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener nofollow noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.traefik.io&#x2F;traefik&#x2F;&quot;&gt;Traefik 官方文档&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        <summary type="html">安全开发-Rancher平台搭建</summary>
        </entry>
</feed>
