离线 Kubernetes 制品与交付 Hands-on

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
CA Certificate Authority 证书颁发机构
CNI Container Network Interface 容器网络接口
CPU Central Processing Unit 中央处理器
CRD Custom Resource Definition Kubernetes 自定义资源定义
CRI Container Runtime Interface 容器运行时接口
CSI Container Storage Interface 容器存储接口
DB Database 数据库
DNS Domain Name System 域名系统
GC Garbage Collection 垃圾回收
GitOps GitOps 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式
JWKS JSON Web Key Set JSON Web 密钥集,常用于验证令牌签名
KMS Key Management Service 密钥管理服务
NTP Network Time Protocol 网络时间协议
OCI Open Container Initiative 开放容器倡议及其镜像/运行时规范
OS Operating System 操作系统
PKI Public Key Infrastructure 公钥基础设施
SSO Single Sign-On 单点登录
TLS Transport Layer Security 传输层安全协议

场景:联网准备区制作可追溯制品包,经审批导入离线网络;离线集群通过内部 TLS registry/软件源更新。前置:自建集群、企业内部 registry/CA、skopeo/Helm、固定平台版本、签名验证工具。

1. 完整盘点制品#

kubeadm config images list --kubernetes-version "$K8S_VERSION" > control-plane-images.txt
helm template orders ./orders-chart -f staging-values.yaml > orders-rendered.yaml

K8S_VERSION 使用精确 v1.N.P;orders-chart 来自真实业务交付仓库。镜像清单还包含 CNI/CSI、pause、DNS、Operator 运行时生成镜像、init/sidecar、Helm hook、Job、监控、备份、诊断及所有目标 CPU 架构。只 grep 渲染清单会漏掉动态镜像。

保存人工复核的 images.tsv,每行两列,以制表符分隔:源 repo@sha256:digest、目标 registry.internal/path:immutable-tag。另外封存 OS 包及依赖、containerd/runc/CNI binaries、Chart/CRD、CA、签名/attestation、漏洞 DB 和许可文件。

2. 联网准备与搬运#

在可同时访问两区受控中转 registry 的路径复制;真正物理隔离时使用经过检查的 OCI archive 介质导入。以下保存为 export-bundle.sh,在 Bash 中执行;任何镜像失败都中止,不生成“完成”的映射/校验清单:

set -euo pipefail
test ! -e bundle
mkdir -p bundle/images
while IFS=$'\t' read -r source_ref target_ref; do
  test -n "$source_ref" && test -n "$target_ref" || exit 1
  archive_id=$(printf '%s' "$source_ref" | shasum -a 256 | awk '{print $1}')
  skopeo copy --all --preserve-digests "docker://$source_ref" "oci-archive:bundle/images/$archive_id.tar"
  printf '%s\t%s\t%s\n' "$archive_id" "$source_ref" "$target_ref"
done < images.tsv > bundle/image-map.tsv
(cd bundle && shasum -a 256 image-map.tsv images/*.tar) > bundle/SHA256SUMS

成功退出后,把 SHA256SUMS 按企业制品签名流程签名并经审批搬运整个 bundle;校验用的签名公钥通过独立可信渠道分发。映射文件也纳入签名保护,防止目标仓库被篡改。失败包不可搬运,重新执行前使用新空目录,避免遗留上次制品。镜像 archive 通常不自动包含 registry 中全部签名/referrer;另导出签名与 attestation,导入后再次执行实际验签,不能只凭 digest 相同宣称签名可用。

3. 离线导入#

先验证企业签名成功,再在 bundle 所在父目录执行以下 import-bundle.sh;校验失败必须停住,不能继续导入:

set -euo pipefail
(cd bundle && shasum -a 256 -c SHA256SUMS)
while IFS=$'\t' read -r archive_id source_ref target_ref; do
  skopeo copy --all --preserve-digests "oci-archive:bundle/images/$archive_id.tar" "docker://$target_ref"
  skopeo inspect "docker://$target_ref" --format '{{.Digest}}'
done < bundle/image-map.tsv

逐项对照源 digest、平台架构和签名。registry 用 TLS,给节点、containerd、Helm、GitOps、webhook 都配置可信 CA;不使用全局 insecure_skip_verify。credentials 由节点凭据机制/Secret 管理,不写在映射表里。

4. 配置离线安装来源#

kubeadm 的 imageRepository 会影响镜像路径,特别是 CoreDNS。先对离线 kubeadm 配置执行 kubeadm config images list --config kubeadm.yaml,按其输出建立准确仓库映射,再执行 images pull;不能只替换 registry 域名猜路径。CRI sandbox image 配置也必须指向内部 pause 镜像。

Chart 打包保存到内部 OCI;把 values 中全部镜像来源改为内部仓库并固定 digest。Operator 的默认镜像通过其配置显式改写;证书签发/SSO/JWKS、DNS、时间同步、KMS、备份、扫描数据库更新同样需要离线路径。

5. 断外网验收与回退#

  1. 网络团队在隔离环境阻断外网,保留内部 DNS/NTP/registry/PKI;监测拒绝流量。
  2. 使用新节点/空缓存环境安装/扩容,避免旧镜像缓存掩盖缺项。
  3. 创建/更新真实业务,触发 hook、证书续期、备份恢复、Operator 子资源创建。
  4. 重建一个节点,确认所有镜像仍可拉取,离线验签成功;记录耗时和缺失访问。
  5. 保留上一完整 bundle、Chart/CRD 与镜像,按数据兼容性回退,不只缓存一个 API 镜像。

删除旧制品前检查所有集群与回滚窗口引用;registry GC 与保留策略需要独立验收。

参考:kubeadm 镜像、Skopeo copy、containerd registry。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭