ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

KubeVela 私有镜像仓库配置实践:基于 config-image-registry 组件与 Image Registry Config 模板的完整指南

KubeVela 私有镜像仓库配置实践:基于 config-image-registry 组件与 Image Registry Config 模板的完整指南 云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载导读本文围绕 KubeVela 内置的config-image-registry组件ComponentDefinition展开讲解如何在 Application 中以声明式方式配置私有镜像仓库的访问凭据并串联起 CLI 侧image-registry配置模板ConfigTemplate的创建、分发与使用全流程。读完本文你将掌握如何通过vela config与vela config-template命令管理镜像仓库配置、如何把这些配置转化为 Kubernetes Secret 注入应用以及config-image-registry组件与image-registry模板在 KubeVela 源码与 CRD 层面的真实映射关系。一、认识 config-image-registry一个用于声明私有镜像仓库凭据的配置组件在 KubeVela 中config-image-registry是一个典型的“配置类”内置组件component。它与webservice、worker这类承载业务负载的组件不同本身不直接创建 Deployment 或 StatefulSet而是负责把“镜像仓库的访问凭据”这一类平台级配置以标准 Kubernetes 资源Secret的形式下发到集群供后续应用拉取私有镜像时使用。其官方示例位于 references/docgen/def-doc/component/config-image-registry.eg.md这也是该组件的“示例文档”.eg.md后缀在 references/docgen/embddoc.go 中被定义为suffixSample一方面用于生成 kubevela.io 的参考文档另一方面可以直接通过vela show命令帮助用户理解组件用法。示例全文如下apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: image-dev namespace: vela-system labels: app.oam.dev/source-of-truth: from-inner-system config.oam.dev/catalog: velacore-config config.oam.dev/type: config-image-registry project: abc spec: components: - name: image-dev type: config-image-registry properties: registry: registry.cn-beijing.aliyuncs.com auth: username: my-username password: my-password email: agmail.com该示例的关键信息可以拆解为三层组件类型与命名spec.components[].type固定为config-image-registry组件名image-dev会同时作为后续生成的配置对象的名称依据。核心参数properties.registry填写镜像仓库的 FQDN完全限定域名例如阿里云容器镜像服务地址registry.cn-beijing.aliyuncs.com、Docker Hub 的index.docker.io等。认证参数properties.auth包含username、password以及可选的email用于登录私有仓库。示例还通过标签config.oam.dev/catalog: velacore-config与config.oam.dev/type: config-image-registry将配置对象归类到 KubeVela 内置的velacore-config目录下。注意示例中将 Application 放在vela-system命名空间并打上app.oam.dev/source-of-truth: from-inner-system标签这表示该类配置型 Application 通常由平台侧或内部系统创建。作为终端用户更常见的做法是通过下文介绍的vela config create命令在开发者命名空间中创建配置。二、参数详解registry、auth、insecure 与 useHTTPconfig-image-registry组件的参数定义与 CLI 侧image-registry配置模板共享同一套参数模型。我们可以从两个源码位置交叉验证references/cli/test-data/config-templates/image-registry.cue 是 CLI 测试用到的模板文件完整定义了image-registry模板的元数据与渲染逻辑pkg/cue/cuex/providers/config/config.cue 中#ImageRegistry定义了工作流步骤configprovider 执行image-registry动作时的参数结构。两份定义的参数完全一致汇总如下参数类型必填默认值说明registrystring是index.docker.io镜像仓库 FQDN如index.docker.io、registry.cn-beijing.aliyuncs.comauth.usernamestring是提供auth时无私有镜像仓库用户名auth.passwordstring是提供auth时无私有镜像仓库密码auth.emailstring否无私有镜像仓库邮箱部分仓库要求insecurebool否无仓库使用自签名证书时置为true跳过证书校验useHTTPbool否无仓库仅支持 HTTP 协议时置为true模板渲染逻辑references/cli/test-data/config-templates/image-registry.cue揭示了这些参数对最终资源形态的直接影响当提供了auth参数时生成的 Secrettype为kubernetes.io/dockerconfigjson.dockerconfigjson字段由json.Marshal组装并包含auths.registry下的username、password、可选email以及username:password的 Base64 编码值当未提供auth仓库为公共仓库或已通过其他方式认证时Secrettype退化为Opaque当指定insecure时Secret 中会写入insecure-skip-verify: true当指定useHTTP时Secret 中会写入protocol-use-http: true。这种“参数 → Secret 字段”的映射说明config-image-registry组件本质上是一个把仓库认证信息标准化为 Docker 认证 Secret 的声明式入口。三、配置模板ConfigTemplate体系image-registry 的模板侧视角在 KubeVela 的配置管理体系中vela config与vela config-template是 CLI 侧的一对核心命令组定义于 references/cli/config.govela config管理配置对象本身子命令包括create、list、delete、distribute等vela config-template别名vela ct管理配置模板子命令包括apply、list、delete、show。image-registry就是内置的一个配置模板其元数据references/cli/test-data/config-templates/image-registry.cue声明如下metadata: { name: image-registry alias: Image Registry scope: project description: Config information to authenticate image registry sensitive: false }字段含义字段值含义nameimage-registry模板名称创建配置时通过--template引用aliasImage Registry展示别名便于人读scopeproject作用域为项目级相对system级允许在多个命名空间中分发descriptionConfig information to authenticate image registry用途描述sensitivefalse非敏感配置与 dex-connector 等敏感模板区分在运行时配置模板以ConfigTemplateCRD 或兼容的 legacy ConfigMap 形式存在于集群中。pkg/config/resolve.go 中的ResolveConfigTemplate函数负责解析模板引用优先查找ConfigTemplateCRD状态需为Available未找到时回退到命名前缀为TemplateConfigMapNamePrefix的 legacy ConfigMap这一机制保证了新旧版本集群的兼容性。四、实战流程从模板创建到应用使用私有镜像仓库仓库中的 docs/examples/config/private-image-registry/README.md 给出了完整的端到端操作步骤这里结合源码细节逐一步骤展开。步骤 1确认 image-registry 模板存在首先确认集群中已安装image-registry模板$ vela config-template list -A NAMESPACE NAME ALIAS SCOPE SENSITIVE CREATED-TIME vela-system dex-connector Dex Connector system false 2022-10-12 23:48:05 0800 CST vela-system helm-repository Helm Repository project false 2022-10-14 12:04:58 0800 CST vela-system image-registry Image Registry project false 2022-10-13 15:39:37 0800 CST若不存在需要先启用 VelaUX addon该 addon 会随安装下发内置的image-registry等配置模板。同时可以查看模板的参数说明$ vela config-template show image-registry该命令会渲染出registry、auth、insecure、useHTTP等参数的 usage 注释正是 references/cli/test-data/config-templates/image-registry.cue 中usage注释的展示结果。步骤 2创建开发者命名空间并创建配置# 创建开发者环境命名空间 $ vela env init developer --namespace developer # 创建 Docker Hub 的仓库配置可替换 username 和 password $ vela config create private-demo --template image-registry --target developer registryindex.docker.io auth.usernamedemo auth.passworddemo这里的关键点--template image-registry指定使用刚才确认的模板--target developer表示配置将被分发到developer命名空间这与模板scope: project的定义一致——项目级配置可以跨命名空间分发参数以keyvalue形式直接传参registryindex.docker.io、auth.usernamedemo、auth.passworddemo分别填充模板parameter中的对应字段。配置对象创建后image-registry模板会渲染出一个名为private-demo的 Secret类型为kubernetes.io/dockerconfigjson因为提供了auth内容即为符合 Docker 客户端规范的.dockerconfigjson。步骤 3创建 Application 引用私有仓库凭据apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: private-image namespace: developer spec: components: - name: private-image properties: cpu: 0.5 image: private/nginx imagePullSecrets: - private-demo type: webservice该 Application 中的核心是imagePullSecrets: [private-demo]——它引用的正是步骤 2 中创建的配置名称。KubeVela 在调度webservice组件时会将该名称注入 Pod 的imagePullSecrets从而使 kubelet 能够使用private-demoSecret 中的凭据从私有仓库拉取private/nginx镜像。至此从“模板 → 配置Secret→ 应用引用”的完整链路闭环CLI 创建配置时通过vela config create调用配置工厂pkg/config/factory.go配置在集群中以 Secret 形式落地应用侧只需声明imagePullSecrets即可完成私有镜像的认证拉取。五、两种使用方式的对比与选择通过上文可以看出KubeVela 提供了两条使用image-registry配置能力的路径维度config-image-registry 组件image-registry 配置模板 vela config声明位置Application 的spec.components内CLI 命令vela config create适用角色平台/内部系统统一下发配置平台管理员按项目分发配置典型场景通过 references/docgen/def-doc/component/config-image-registry.eg.md 示例中的标签source-of-truth: from-inner-system可见多为内部系统声明式创建开发者创建环境后为指定命名空间注入仓库凭据参数来源Application properties 直接声明模板parameter CLI 传参产物经组件定义渲染为 Secret 等配置资源模板渲染为kubernetes.io/dockerconfigjson类型 Secret两者最终都收敛到“生成 Docker 认证 Secret供应用通过imagePullSecrets使用”这一核心结果。实际项目中推荐由平台侧通过vela config统一管理仓库凭据并分发到各开发者命名空间业务应用只负责在properties中声明imagePullSecrets从而将敏感凭据与应用定义彻底解耦。六、深层原理参数如何在源码中落地为 Secret要理解config-image-registry与image-registry的最终产物需要回到 CUE 模板的渲染逻辑references/cli/test-data/config-templates/image-registry.cue。核心渲染规则如下if parameter.auth ! _|_ { type: kubernetes.io/dockerconfigjson } if parameter.auth _|_ { type: Opaque } stringData: { if parameter.auth ! _|_ parameter.auth.username ! _|_ { .dockerconfigjson: json.Marshal({ auths: \(parameter.registry): { username: parameter.auth.username password: parameter.auth.password if parameter.auth.email ! _|_ { email: parameter.auth.email } auth: base64.Encode(null, (parameter.auth.username : parameter.auth.password)) } }) } if parameter.insecure ! _|_ { insecure-skip-verify: strconv.FormatBool(parameter.insecure) } if parameter.useHTTP ! _|_ { protocol-use-http: strconv.FormatBool(parameter.useHTTP) } }这段 CUE 代码对应三个可验证的事实Secret 类型是条件推导的有auth即为kubernetes.io/dockerconfigjsonDocker 标准凭据格式无auth则为Opaque。后者适用于纯公共仓库或不含凭据的场景例如只需标记insecure-skip-verify或protocol-use-http的私有仓库。凭据以 Docker 规范组装auths.registry下包含username/password/email与username:password的 Base64 编码这与 Docker CLIdocker login后写回~/.docker/config.json的格式一致因此 kubelet 可以无缝识别。扩展字段直通insecure与useHTTP分别映射为insecure-skip-verify与protocol-use-http覆盖自签名证书与纯 HTTP 仓库两类特殊场景。同样的参数模型也在工作流 provider 侧复用pkg/cue/cuex/providers/config/config.cue 中#ImageRegistry的$params与上述模板参数一一对应且registry的默认值被定义为*index.docker.io | string——即不显式指定时默认指向 Docker Hub。这意味着在 KubeVela 工作流Workflow中也可以通过configprovider 的image-registry动作以同样的参数结构创建配置供 CI/CD 流水线或平台自动化调用。七、配置体系的其他模板与扩展阅读image-registry只是 KubeVela 内置配置模板之一。同类配置还包括helm-repositoryHelm 仓库配置支持url、username、password、caFileBase64 编码的 CA 证书等参数见 pkg/cue/cuex/providers/config/config.cue 中#HelmRepository定义dex-connectorDex 连接器配置scope 为system属于敏感配置。vela config命令组的完整子命令create、list、delete、distribute与vela config-template命令组apply、list、delete、show均在 references/cli/config.go 中注册。若需为团队定制新的配置模板可通过vela config-template apply提交自定义 CUE 模板模板元数据与渲染逻辑参考上述image-registry示例即可。结语本文以 config-image-registry.eg.md 为骨架完整梳理了 KubeVela 私有镜像仓库配置的两种声明方式组件侧的config-image-registry与 CLI 侧的image-registry配置模板。核心结论是无论走哪条路径KubeVela 都会将仓库地址与认证信息渲染为标准的 Docker 认证 Secretkubernetes.io/dockerconfigjson业务应用只需在组件properties中声明imagePullSecrets即可完成私有镜像拉取。掌握这套配置体系即可将镜像仓库凭据的管理从业务应用中剥离交给平台统一治理。赞分享云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载相关推荐Earthly 使用自签名证书私有镜像仓库Registry完整配置指南Earthly 使用自签名证书私有镜像仓库Registry完整配置指南 本指南讲解如何在 Earthly 构建流程中接入使用 自签名证书 的私有镜像仓库从CI/CDDevOps构建工具jenkinsci/docker镜像仓库搭建私有Registry配置与使用你是否还在为团队CI/CD环境中的Docker镜像管理发愁私有Registry不仅能加速镜像拉取速度还能保障企业敏感镜像的安全存储。本文将带你从零开始搭建基CI/CDDevOpsWoodpecker 容器镜像仓库Registry配置完全指南私有镜像拉取、全局仓库与本地镜像构建Woodpecker 容器镜像仓库Registry配置完全指南私有镜像拉取、全局仓库与本地镜像构建 本篇指南以 Woodpecker CI/CD 引擎 vCI/CDDevOps上一篇Zotero-GPTAI驱动的学术文献管理革命如何将研究效率提升300%下一篇LeetCode 844 Backspace String Compare 全解法剖析从栈模拟到 O(1) 空间双指针创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表