云原生后端前端【免费下载链接】kubeappsA web-based UI for deploying and managing applications in Kubernetes clusters项目地址https://gitcode.com/gh_mirrors/ku/kubeapps点击查看免费下载Kubeapps 是一个基于 Web 的 Kubernetes 应用部署与管理界面除了对接公共仓库它也完整支持把Harbor、任意 OCI 合规注册表、ChartMuseum、JFrog Artifactory等私有仓库接入用于存储并部署自己的 Helm 包。本文以仓库中的 private-app-repository.md 为骨架逐步讲解各类私有仓库的部署、打包上传与在 Kubeapps 中完成认证配置的完整流程并结合 AppRepository CRD 与 apprepository-controller、asset-syncer 源码解释其底层工作原理。读完本文你将能够独立把一套私有包仓库接入 Kubeapps并为其配置 Basic Auth、Bearer Token、TLS 等认证方式。前置知识Kubeapps 中的包仓库模型在进入具体仓库类型之前先理解 Kubeapps 管理仓库的底层机制这有助于你理解后续每一步配置的含义。Kubeapps 通过自定义资源AppRepositoryCRD 定义见 apprepository-crd.yaml来描述一个包仓库。该 CRD 属于kubeapps.comAPI 组v1alpha1版本是命名空间级Namespaced资源短名shortNames为apprepos。其spec必填字段为type与urltype取值为helm或oci分别对应传统 Helm 仓库与 OCI 注册表url仓库地址可选字段包括auth认证、customCA自定义 CA、dockerRegistrySecrets、tlsInsecureSkipVerify、passCredentials、interval、filterRule、ociRepositories、resyncRequests、syncJobPodTemplate等。在运行时仓库的同步由两部分协作完成源码位置 cmd/apprepository-controllerapprepository-controller监听AppRepository资源的新增、更新与删除事件为每个仓库创建一个 CronJob定时触发同步并在仓库创建/更新时立即触发一次手动 Job 完成首次同步删除时通过 finalizer 触发清理 Job。它通过workqueue限速队列串行处理事件并维护 v1 / v1beta1 两种 CronJob API 的兼容见 controller.go 中的finalizerName apprepositories.kubeapps.com/apprepo-cleanup-finalizer。asset-syncer即同步 Job 实际执行的镜像负责从仓库拉取index.yaml或 OCI 清单、解析图表、写入 PostgreSQL 资产库并下载图标与 chart 文件入口逻辑见 sync.go。对于helm类型它会抓取index.yaml见 utils.go 中的getHelmRepo/fetchRepoIndex对于oci类型则使用 OCI 解析器与目录服务见 utils.go 中的getOCIRepo。你通过 Kubeapps 界面添加的每个仓库最终都会落成一个AppRepository对象。本指南将围绕这个模型逐一展示四类私有仓库的接入。HarborHarbor 是一个开源的制品注册表它通过策略与基于角色的访问控制RBAC保护制品提供镜像漏洞扫描与签名信任能力是 CNCF 毕业项目广泛用于 Kubernetes 生态下的制品安全管理。本节按“安装 → 上传包 → 在 Kubeapps 中配置”三步走。安装 Harbor提示如果你已有可从集群访问的 Harbor 注册表可以直接跳过本节。在集群中安装 Harbor推荐直接通过 Kubeapps 从 Bitnami 仓库部署 Harbor Helm chart也可以使用 Harbor 离线安装包。使用 Kubeapps 部署时在部署表单中至少调整以下参数service.tls.enabled设为false以关闭 TLS。若你希望启用 HTTPS可改为提供一份有效的 TLS 证书参数细节可参考 Bitnami Harbor chart 的参数文档。部署完成后等待应用就绪。需要注意的是Harbor 默认内置 ChartMuseum 组件用于存放 chart如果你关闭了它仍可改用 Harbor 的 OCI 注册表能力上传 chart可跳至下文 OCI 一节。向 Harbor 上传 Helm chart提示若你的 Harbor 中已有包可以跳过本节。第一步把本地 chart 目录打包成.tgz$ helm package /path/to/my/chart Successfully packaged chart and saved it to: /path/to/my/chart/my-chart-1.0.0.tgz第二步按 chart 安装后的 NOTES 提示登录 Harbor 管理门户。典型方式是通过kubectl port-forward暴露服务并使用安装时生成的管理员密码1. Get the Harbor URL: echo Harbor URL: https://127.0.0.1:8080/ kubectl port-forward --namespace default svc/my-harbor 8080:80 2. Login with the following credentials to see your Harbor application echo Username: admin echo Password: $(kubectl get secret --namespace default my-harbor-core-envvars -o jsonpath{.data.HARBOR_ADMIN_PASSWORD} | base64 --decode)第三步在 Harbor 中新建一个名为my-helm-repo的 Project。Harbor 中每个 Project 相当于一个独立的包仓库本例即 Helm chart 仓库。若将 Project 的Access Level设为non public非公开Harbor 会要求 HTTP Basic 认证这样外部客户端Helm CLI、Kubeapps 或任意工具访问该仓库的包时都会被强制校验身份。第四步进入 Project 详情页的Helm Charts标签页即可看到已上传的 chart 列表点击Upload上传刚才打包的 chart也可以使用helm命令行上传。更多细节可参考 Harbor 官方关于管理 Helm chart 的文档。在 Kubeapps 中配置 Harbor 私有仓库将 Harbor 作为私有 chart 仓库加入 Kubeapps 的步骤如下选择要添加仓库的 Kubernetes 命名空间若希望所有命名空间的用户都能使用选择All Namespaces。进入Configuration Package Repositories点击Add Package Repository。填写配置表单字段说明示例值Name仓库在 Kubeapps 中的名称my-harborURLHarbor 仓库 URLhttp://harbor.default.svc.cluster.local/chartrepo/my-helm-repoDescription在 Kubeapps 中展示的仓库说明自定义Packaging format仓库中包的格式Helm、Helm via Flux、CarvelHelmScopeglobal集群级或namespace-scoped仅该命名空间用户可见GlobalPackage storage typeHelm 仓库或 OCI 注册表Helm repository对于私有仓库必须提供认证方式在Authorization标签页的Repository Authorization字段选择Basic Auth并填写 Harbor 的用户名与密码。配置完成后就能在 Kubeapps 中浏览并部署来自私有 Harbor 的 chart包括上一步上传的那个。OCI 注册表Kubeapps 同样支持接入 OCI 合规注册表 来存储包。云厂商提供的注册表如 Amazon ECR、Google Artifact Registry、Azure ACR均已支持 OCI 制品。在表单中把Package storage type选为OCI registry即可例如接入 Harbor 的 OCI 兼容注册表。一个关键注意点与 Helm 仓库不同OCI 规范没有提供“发现制品”的端点Helm 仓库可以靠index.yaml完成发现因此必须手工指定注册表中包含的应用repository清单。有两种方式可以获取这份清单使用注册表提供商的 API 查询。以 Harbor 为例可以调用其 REST API 并借助jq提取仓库名列表curl -X GET https://harbor.domain/api/v2.0/projects/my-oci-registry/repositories -H accept: application/json | jq map(.name) | join(, )注意将域名harbor.domain与项目名my-oci-registry替换为你自己的值如果仓库非公开可在 curl 中使用-u username:password获取同样结果。在 Kubeapps 的添加仓库表单的Filtering标签页中将List of Repositories填为上述列表。从源码侧看AppRepository的spec.ociRepositories字段正是承载这个清单的见 types.go。asset-syncer 在同步 OCI 类型仓库时会把这个列表传给getOCIRepo其内部将oci://协议自动改写为https://以调用注册表 API并使用 OCI 解析器拉取制品见 utils.go。Kubeapps 还提供了一个独立的 oci-catalog gRPC 服务用于按策略枚举注册表中的 repository 列表帮助前端填充该清单。ChartMuseumChartMuseum 是一个用 Go 编写的开源 Helm chart 仓库服务支持多种云存储后端包括 Google Cloud Storage、Amazon S3、Microsoft Azure Blob Storage、Alibaba Cloud OSS 与 OpenStack Object Storage。本节按“安装 → 上传 chart → 认证/授权 → 配置”四步展开。安装 ChartMuseum提示若集群中已有可访问的 ChartMuseum可以跳过本节。先在 Kubeapps 中配置一个公共仓库例如 Bitnami 或stable仓库以部署其 Helm chart然后在部署表单中调整以下参数env.open.DISABLE_API设为false以启用 ChartMuseum 的 API 用于推送新 chartpersistence.enabled设为true启用存储的持久化。注意启用持久化会创建一个 Kubernetes Persistent Volume Claim某些云平台会自动创建 PV 满足该声明如果你的平台不会则需要手动分配对应的 Persistent Volume。上传 chart 到 ChartMuseum提示若已有存有 chart 的 ChartMuseum 实例可以跳过本节。部署完成后即可上传 chart。第一步在一个终端打开到应用的端口转发隧道$ export POD_NAME$(kubectl get pods --namespace default -l appchartmuseum -l releasemy-chartrepo -o jsonpath{.items[0].metadata.name}) $ kubectl port-forward $POD_NAME 8080:8080 --namespace default Forwarding from 127.0.0.1:8080 - 8080 Forwarding from [::1]:8080 - 8080第二步在另一个终端打包并推送 chart$ helm package /path/to/my/chart Successfully packaged chart and saved it to: /path/to/my/chart/my-chart-1.0.0.tgz curl --data-binary my-chart-1.0.0.tgz http://localhost:8080/api/charts {saved:true}ChartMuseum 的认证/授权ChartMuseum 支持两种认证机制HTTP Basic 认证用户名/密码部署 ChartMuseum 时指定secret.AUTH_USER与secret.AUTH_PASS参数随后在 Kubeapps 添加仓库时选择Basic Auth并填写该用户名与密码。JWT Token配合认证服务如auth-server-example获得有效 token 后在表单中选择Bearer Token并把 token 填入对应字段。在 Kubeapps 中配置 ChartMuseum 私有仓库添加 ChartMuseum 为私有仓库的步骤与 Harbor 一致表单字段如下字段说明示例值Name仓库在 Kubeapps 中的名称my-chartrepoURL使用 ChartMuseum 服务的 Kubernetes DNS 名http://release_name-chartmuseum.namespace:8080Description仓库说明自定义Packaging formatHelm 或 Helm via FluxHelmScopeglobal 或 namespace-scoped按需选择Package storage typeHelm 仓库Helm repository配置完成后即可浏览并部署来自私有 ChartMuseum 的 chart。ArtifactoryJFrog Artifactory 是一个支持几乎所有主流打包格式、构建工具与 CI 服务器的制品仓库管理器。注意要使用 Helm 仓库功能需要 Artifactory Pro 账号。本节按“安装 → 上传 chart → 认证/授权 → 配置”四步展开。安装 Artifactory提示若集群中已有可访问的 Artifactory可以跳过本节。先在 Kubeapps 的Configuration Package Repositories中添加 JFrog 公共仓库然后浏览该仓库并部署 Artifactory默认 values 即可满足基本需求。部署完成后在设置向导中选择Helm以初始化一个仓库——Artifactory 默认创建的名为helm的 chart 仓库即可用来存放你的应用。上传 chart 到 Artifactory提示若 Artifactory 中已有可用包可以跳过本节。首先获取 Helm 仓库的用户名与密码点击helm仓库在Set Me Up菜单中输入你的密码即可看到仓库的用户与密码。然后执行curl -u{USER}:{PASSWORD} -T /path/to/chart.tgz http://{REPO_URL}/artifactory/helm/Artifactory 的认证/授权要让 Kubeapps 能访问私有 chart先生成一个只读 token。可通过 Artifactory API 完成curl -u{USER}:{PASSWORD} -XPOST http://{REPO_URL}/artifactory/api/security/token?expires_in0 -d usernamekubeapps -d scopemember-of-groups:readers { scope : member-of-groups:readers api:*, access_token : TOKEN CONTENT, token_type : Bearer }上述命令创建的 token 只具备读权限。在 Kubeapps 中配置 Artifactory 私有仓库表单字段如下字段说明示例值Name仓库在 Kubeapps 中的名称my-artifactoryURLArtifactory 仓库地址http://REPO-URL/artifactory/helmDescription仓库说明自定义Packaging formatHelm 或 Helm via FluxHelmScopeglobal 或 namespace-scoped按需选择Package storage typeHelm 仓库Helm repository私有仓库必须提供认证方式在Authorization标签页的Repository Authorization字段选择Bearer Token并填入上一步生成的 token。配置完成后即可浏览并部署来自私有 Artifactory 的 chart。私有仓库接入的原理与认证实现最后从源码层面串联一下“私有仓库 认证”是如何落地的。在 types.go 中AppRepositorySpec.Auth只包含两类字段header认证请求头引用某 Secret 的secretKeyRef与customCA自定义 CA同样引用 Secret。也就是说Kubeapps 界面上所有的认证方式Basic Auth、Bearer Token、Docker Registry Credentials、Custom Authorization Header、TLS 等最终都会换算成一个认证请求头注入同步 JobBasic Auth 会被拼装为Basic base64(user:password)Bearer Token 会被拼装为Bearer token对应的密钥被存放在名为apprepo-repo-secrets的 Secret 中模板见 apprepositories-secret.yaml。apprepository-controller 在创建同步 Job 时会把认证头与数据库连接信息注入容器的环境变量AUTHORIZATION_HEADER或DOCKER_CONFIG_JSON见 job_utils.go若配置了customCA还会把 CA 证书以卷挂载方式放进/usr/local/share/ca-certificates见 job_utils.go。asset-syncer 随后在Sync中读取该请求头AuthorizationHeader去抓取index.yaml或 OCI 制品见 sync.go。此外AppRepository还支持以下与私有仓库密切相关的字段tlsInsecureSkipVerify跳过 TLS 证书校验passCredentials把仓库凭证一并发送给从仓库链接出去的第三方 URL如图标与 chart 下载地址filterRule.jq按 jq 表达式过滤应用仅 Helm 支持且只评估最新版本syncJobPodTemplate自定义同步 Job 的 Pod 模板如添加标签、环境变量interval覆盖全局默认同步周期见 job_utils.go它会把类似1m、1h的时长转换成 cron 表达式非法值回退到全局crontab。如果你需要通过 Helm values 在安装时预置私有仓库而不是在 UI 中手动添加可以在 values.yaml 的apprepository.initialRepos中声明例如apprepository: initialRepos: - name: my-private-repo url: https://my.charts.com/ basicAuth: user: myuser password: mypassword # 或使用 authorizationHeader: Bearer xrxNC...对应生成的AppRepository与 Secret 由 apprepositories.yaml 与 apprepositories-secret.yaml 两个模板负责渲染。总结无论是 Harbor、任意 OCI 注册表、ChartMuseum 还是 Artifactory接入 Kubeapps 的流程都遵循同一套模式部署或准备一个可访问的私有仓库 → 上传打包好的 Helm chart → 在 Kubeapps 的 Package Repositories 表单中填写 URL、格式、作用域与存储类型 → 通过 Basic Auth 或 Bearer Token 等认证方式授权 → 由 apprepository-controller 创建的同步 Job 完成首次同步之后按周期自动刷新。理解了AppRepositoryCRD 与同步链路你就能把任意符合 Helm 仓库或 OCI 规范的私有制品源接入 Kubeapps 统一管理。关于仓库管理的更多通用操作过滤、作用域、高级选项等可参考 managing-package-repositories.md。赞分享云原生后端前端【免费下载链接】kubeappsA web-based UI for deploying and managing applications in Kubernetes clusters项目地址https://gitcode.com/gh_mirrors/ku/kubeapps点击查看免费下载相关推荐Kubeapps项目中使用私有仓库管理应用包指南Kubeapps项目中使用私有仓库管理应用包指南 前言 在现代云原生环境中应用包管理是Kubernetes平台的关键能力。Kubeapps作为一个优秀的Kub云原生后端前端Helmfile 生态集成实战Renovate 自动升级、ArgoCD GitOps 与 Azure ACR / OCI 私有仓库接入指南Helmfile 生态集成实战Renovate 自动升级、ArgoCD GitOps 与 Azure ACR / OCI 私有仓库接入指南 本文以 docs/云原生运维工具解锁高效下载管理的完整方案AB Download Manager实战指南解锁高效下载管理的完整方案AB Download Manager实战指南 你是否曾经为下载大量文件而烦恼当多个下载任务同时进行时网络速度被拖慢文件散落在桌面应用网络上一篇3步搞定Unity游戏汉化XUnity.AutoTranslator完全指南下一篇XUnity.AutoTranslator终极指南5分钟为Unity游戏添加多语言支持创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考