恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Kubeapps 项目全景指南:Kubernetes 集群内应用部署与管理的 Web UI
首页
资讯中心
/
Kubeapps 项目全景指南:Kubernetes 集群内应用部署与管理的 Web UI
Kubeapps 项目全景指南:Kubernetes 集群内应用部署与管理的 Web UI
发布时间:2026/10/13 17:32:03
云原生后端前端【免费下载链接】kubeappsA web-based UI for deploying and managing applications in Kubernetes clusters项目地址https://gitcode.com/gh_mirrors/ku/kubeapps点击查看免费下载导读Kubeapps 是一个运行在 Kubernetes 集群内部的 Web 应用通过一次安装即可为团队提供浏览、部署、升级与删除应用的能力同时内置基于 Kubernetes RBAC 的授权与基于 OAuth2/OIDC 的认证方案。本篇指南以仓库site/content/docs/latest/project/readme.md为骨架结合源码、Helm Chart 配置与官方文档系统讲解 Kubeapps 的核心能力、快速安装、生产配置、排障路径与多集群部署要点帮助你从零搭建一套可用的集群应用管理入口。一、Kubeapps 是什么核心能力与架构概览Kubeapps 官方定位是 in-cluster web-based application即部署在集群内部、面向集群用户的 Web 应用。它的价值在于把在集群里装软件这件事标准化无论是 Helm Chart、Flux 还是 Carvel 包用户都可以通过统一的 Web 界面完成从浏览、选型、定制参数到部署、升级、删除的全生命周期管理。官方能力清单见 site/content/docs/latest/project/readme.md包括从公有或私有仓库浏览并部署各类包Helm Chart、Flux 包、Carvel 包含 VMware Marketplace 与 Bitnami Application Catalog通过直观的表单式 UI 定制部署参数浏览、升级、删除集群中已安装的应用浏览并部署 Kubernetes Operator使用独立 OAuth2/OIDC 提供方或 Pinniped 完成安全认证基于 Kubernetes RBAC 实现细粒度授权。从源码结构看Kubeapps 由一组职责分离的组件组成仓库中对应的实现位于cmd/与dashboard/目录组件仓库位置职责Kubeapps Dashboarddashboard/srcReact TypeScript 前端提供 Catalog、部署表单、应用详情等界面Kubeapps-APIscmd/kubeapps-apis/server/server.gogRPC HTTP 网关聚合层通过插件协议注册 Helm、Flux、Carvel 等后端AppRepository Controllercmd/apprepository-controller/server/controller.go监听apprepositories.kubeapps.comCRD周期性触发资产同步Asset Syncercmd/asset-syncer/server/sync.go拉取仓库索引并写入 PostgreSQL资产数据库OCI Catalogcmd/oci-catalogRust 实现的可选 OCI 目录 gRPC 服务Pinniped Proxycmd/pinniped-proxy将 Kubeapps 的 Kubernetes API 请求代理到 Pinniped 认证的集群前端反向代理chart/kubeapps/templates/frontendNGINX负责把 Dashboard 流量路由到各后端并代理 Kubernetes API其中 Kubeapps-APIs 是 2.x 的架构核心Serve()会先创建 gRPC 网关再通过pluginsv1alpha1.NewPluginsServer扫描插件目录中的.so插件cmd/kubeapps-apis/core/plugins/v1alpha1/plugins.go然后调用GetPluginsSatisfyingInterface把实现了 core.packages / core.repositories 接口的插件注册到统一服务上server.go。每个插件通过RegisterWithGRPCServer描述自身如 Helm 插件在 main.go 中声明Name: helm.packages、Version: v1alpha1从而实现一个网关、多套打包后端的插件化架构。注意Kubeapps 2.0 及以后仅支持 Helm 3 API大部分为 Helm 2 编写的 Chart 仍可正常工作但官方不再保证兼容。二、快速开始两条命令完成安装官方在项目 README 中给出的最小安装命令如下原文即完整安装方式仅两条命令kubectl create namespace kubeapps helm install kubeapps --namespace kubeapps oci://registry-1.docker.io/bitnamicharts/kubeapps对应的更完整形式Chart README 的 TL;DR为helm install my-release oci://registry-1.docker.io/bitnamicharts/kubeapps --namespace kubeapps --create-namespace说明与前提命令中的REGISTRY_NAME/REPOSITORY_NAME占位符以 Bitnami 为例应替换为registry-1.docker.io与bitnamichartsChart 官方要求Kubernetes 1.23、Helm 3.8.0、具备创建 CRD 的集群管理员权限、底层基础设施支持 PVPostgreSQL 需要持久化——这些要求记录在 chart/kubeapps/README.mdKubeapps 生产部署使用的是独立的 Bitnami Kubeapps Chart 主要用于开发目的注意每个 namespace 只支持一个 Kubeapps 安装实例一个 namespace 内只能安装一个 Kubeapps该 Chart 同时打包了 Bitnami PostgreSQL 子 Chart数据库与 Redis 子 ChartFlux 插件所需。安装完成后可参照 getting-started 教程 继续使用。三、安装后的第一步创建演示凭据并访问 Dashboard官方快速入门getting-started.md建议任何面向真实用户的安装都应配置 OAuth2/OIDC但为了快速体验可以用 Kubernetes ServiceAccount 令牌登录。创建 ServiceAccount 与绑定Linux/macOSkubectl create --namespace default serviceaccount kubeapps-operator kubectl create clusterrolebinding kubeapps-operator --clusterrolecluster-admin --serviceaccountdefault:kubeapps-operator cat EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: kubeapps-operator-token namespace: default annotations: kubernetes.io/service-account.name: kubeapps-operator type: kubernetes.io/service-account-token EOF注意给用户分配cluster-admin仅用于演示生产环境请参考 访问控制文档 配置细粒度 RBAC。提取令牌kubectl get --namespace default secret kubeapps-operator-token -o go-template{{.data.token | base64decode}}启动 Dashboardkubectl port-forward -n kubeapps svc/kubeapps 8080:80随后在浏览器打开http://127.0.0.1:8080/粘贴令牌即可进入 Kubeapps 主界面。部署 WordPress 等应用的完整交互流程搜索包 → 填参数 → 查看状态与访问地址同样在 getting-started.md 中有逐步说明本文不再重复截图细节。四、生产环境配置Ingress、TLS 与外部暴露前端本身带有一个到 Kubernetes API 的反向代理因此把 Kubeapps 暴露到集群外网络时Kubernetes API 也会随之暴露给该网络的已认证请求。官方强烈建议配置 OAuth2/OIDC 提供方让认证代理而非裸的 Kubeapps 前端暴露在外从而保证只有 IdP 信任的用户能触达前端进而触达 APIService Token 认证只应用于演示环境。4.1 LoadBalancer 方式最简单的暴露方式是把前端 Service 改为 LoadBalancerhelm install kubeapps oci://REGISTRY_NAME/REPOSITORY_NAME/kubeapps \ --namespace kubeapps \ --set frontend.service.typeLoadBalancer然后观察 LoadBalancer 分配情况kubectl get services --namespace kubeapps --watch4.2 Ingress 方式Chart 原生支持 Ingress参数集中在ingress.*默认值见 values.yaml参数默认值说明ingress.enabledfalse是否生成 Ingress 记录ingress.hostnamekubeapps.localIngress 默认主机名ingress.path/默认路径ALB 控制器可能需要/*ingress.pathTypeImplementationSpecific路径匹配类型ingress.annotations{nginx.ingress.kubernetes.io/proxy-read-timeout:600}额外注解可放 cert-manager 自动签发注解ingress.tlsfalse是否为ingress.hostname启用 TLSingress.selfSignedfalse由 Helm 生成自签名证书并创建 TLS Secretingress.certManagerfalse使用 cert-manager 管理证书ingress.extraHosts[]附加主机名数组ingress.secrets[]自定义 TLS 证书 Secret把http://example.com映射到 Dashboardhelm install kubeapps oci://REGISTRY_NAME/REPOSITORY_NAME/kubeapps \ --namespace kubeapps \ --set ingress.enabledtrue \ --set ingress.hostnameexample.com \ --set ingress.annotations.kubernetes\.io/ingress\.classnginxTLS 的四种常见管理方式来自 chart/kubeapps/README.md由 Helm 依据参数生成/管理证书把证书与私钥写入ingress.secrets[].certificate/ingress.secrets[].key用户自行管理证书需提供名为_INGRESS_HOSTNAME_-tls的 TLS SecretINGRESS_HOSTNAME替换为ingress.hostname的值同时设置ingress.tlstrue与ingress.selfSignedtrue由 Helm 生成自签名证书集群已安装 cert-manager 时设置ingress.certManagertrue通过注解自动签发。在子路径下提供服务例如把 Kubeapps 挂到http://example.com/subpathhelm install kubeapps oci://REGISTRY_NAME/REPOSITORY_NAME/kubeapps \ --namespace kubeapps \ --set ingress.enabledtrue \ --set ingress.hostnameexample.com \ --set ingress.path/subpath \ --set ingress.annotations.kubernetes\.io/ingress\.classnginx若同时启用 OIDC 登录还需同步调整认证代理的路径参数--set authProxy.oauthLoginURI/subpath/oauth2/login \ --set authProxy.oauthLogoutURI/subpath/oauth2/logout \ --set authProxy.extraFlags{other flags,--proxy-prefix/subpath/oauth2}Cookie 过大报错使用 LDAP via Dex 与 OIDC 时可能遇到upstream sent too big header while reading response header from upstream可在 NGINX Ingress 上追加注解解决--set ingress.annotations.nginx\.ingress\.kubernetes\.io/proxy-read-timeout600 --set ingress.annotations.nginx\.ingress\.kubernetes\.io/proxy-buffer-size8k --set ingress.annotations.nginx\.ingress\.kubernetes\.io/proxy-buffers4五、认证与授权OIDC 与 RBAC认证官方提供了两条路径——独立 OAuth2/OIDC 提供方教程 与 Pinniped 集成教程。Chart 层面由authProxy.*参数驱动默认关闭authProxy.enabledfalse关键参数包括参数默认值说明authProxy.enabledfalse是否启用 OAuth 登录/登出authProxy.oauthLoginURI/oauth2/start前端重定向的 OAuth 登录 URIauthProxy.oauthLogoutURI/oauth2/sign_out前端重定向的 OAuth 登出 URIauthProxy.providerOAuth 提供方authProxy.clientID/clientSecretOAuth 客户端凭据authProxy.cookieSecretoauth2-proxy 加密凭据用密钥authProxy.existingOauth2Secret复用现有 Secret需含clientID、clientSecret、cookieSecret键authProxy.scopeopenid email groupsOAuth 作用域authProxy.emailDomain*允许的邮箱域名authProxy.skipKubeappsLoginPagefalse跳过 Kubeapps 登录页直接跳转 IdP授权Kubeapps 本身不额外实现权限模型而是把 Kubernetes RBAC 当作授权依据见 访问控制文档。用户令牌被透传给 Kubernetes API因此用户能做什么完全取决于其 ServiceAccount / User 在集群中的 RBAC 绑定。例如列表 namespaces 过慢这类问题就与 RBAC 枚举逻辑相关见下文排障。六、应用仓库AppRepository CRD 与初始仓库配置Kubeapps 通过自定义资源apprepositories.kubeapps.com管理应用仓库CRD 定义见 chart/kubeapps/crds/apprepository-crd.yamlGo 类型见 cmd/apprepository-controller/pkg/apis/apprepository/v1alpha1/types.go。其 Spec 包含type、url、auth、interval、filterRule、ociRepositories等字段。默认情况下 Kubeapps 会跟踪 Bitnami Application Catalog如需修改默认仓库通过 Chart 的apprepository.initialRepos覆盖。仓库同步由 AppRepository Controller 驱动的 CronJob/Job 完成——从 controller.go 的syncHandler可以看到典型的 controller-runtime 工作队列模式informer 监听 CRD 变更、写入 workqueue、syncHandler对比期望状态与实际状态并更新 Status。相关 Chart 参数参数默认值说明apprepository.initialRepos[]初始仓库列表apprepository.crontab仓库同步默认调度默认每 10 分钟apprepository.watchAllNamespacestrue是否监听所有 namespace支持按 namespace 隔离仓库apprepository.globalReposNamespaceSuffix全局仓库 namespace 后缀Helm 插件私有仓库Kubeapps 支持私有仓库配置方法见 private-app-repository 文档。注意官方不允许为集群级全局仓库配置imagePullSecrets因为那要求 Kubeapps 在用户部署时把 Secret 拷贝到目标 namespace存在安全扩散风险最佳实践是把所需imagePullSecrets配置到 Kubernetes 节点上或让 Secret 在目标 namespace 中可用。全局仓库的认证imagePullSecrets只能手动配置原因同上可通过节点级凭据配置解决。七、Operator 支持与功能开关Kubeapps 自 v1.9.0 起支持在 Dashboard 中部署与管理 Operatorv2.0 起默认启用详见 operators 教程。Chart 中的功能开关汇总参数默认值说明featureFlags.operatorsfalse启用 Operator 支持featureFlags.apiOnly.enabledfalse仅暴露 API 的 Ingress此时 Dashboard 不可用featureFlags.schemaEditor.enabledfalse启用包 Schema 可视化编辑器打包后端同样可开关参数默认值说明packaging.helm.enabledtrue启用标准 Helm 打包packaging.carvel.enabledfalse启用 Carvelkapp-controller打包packaging.flux.enabledfalse启用 Flux v2 打包需要 Redis八、多集群与离线部署多集群Kubeapps 2.0 支持多集群环境将 Kubeapps 所在集群称为 Kubeapps cluster其余为 additional clusters详细配置见 deploying-to-multiple-clusters 文档。clustersChart 参数用于声明可部署目标集群列表Kubeapps-APIs 侧为多集群场景预留了/etc/additional-clusters-cafiles目录存放各集群 CA 证书见 plugins.go。离线air-gapped安装官方提供 offline-installation 文档适合无外网环境。九、API 说明与文档导航Kubeapps-APIs 基于 gRPCbufbuild/connect grpc-gateway同时提供 gRPC 与 RESTful 风格接口端口默认50051kubeappsapis.containerPorts.http。Serve()还挂载了/openapi.json与/docs路径见 server.go。官方 API 文档OpenAPI可从仓库 dashboard/public/openapi.yaml 获取Swagger 定义见 cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json注意官方声明 API 仍在演进非最终版本。更多资料按类型组织在 site/content/docs/latest/README.md章节说明Tutorials面向新用户的手把手入门How-to guides解决具体问题与用例访问控制、多集群、离线安装、私有仓库等Background架构与实现细节Reference开发者指南、设计提案、翻译等十、排障手册常见错误与解决步骤以下内容来自 chart/kubeapps/README.md 的官方 FAQ可直接用于实战10.1 卸载与清理helm uninstall -n kubeapps kubeapps # 可选仅当集群中再无其他 Kubeapps 实例时 kubectl delete crd apprepositories.kubeapps.com警告删除apprepositories.kubeapps.comCRD 会删除所有已安装 Kubeapps 实例的仓库配置会破坏仍在运行的安装。若为 Kubeapps 单独开辟了 namespace可彻底清理残留资源kubectl delete namespace kubeapps10.2 升级失败重置式升级当 Chart 升级报错新版本破坏性变更或安装状态不一致时按官方步骤处理可选备份个人仓库kubectl get apprepository -A -o yaml repo name.yaml删除 Kubeappshelm del --purge kubeapps可选仅单实例时删除 CRDkubectl delete crd apprepositories.kubeapps.com可选仅 namespace 中无其他负载时清理 namespacekubectl delete namespace kubeapps安装最新版本携带需要的自定义参数helm install --name kubeapps --namespace kubeapps oci://REGISTRY_NAME/REPOSITORY_NAME/kubeapps可选恢复仓库kubectl apply -f repo name.yaml升级前请特别留意 Chart 升级说明中的破坏性变更例如到 17.1.0引入镜像验证如需关闭设置global.security.allowInsecureImagestrue到 17.0.0PostgreSQL 子 Chart 升级到 16.0.0PostgreSQL 17.x需按官方指引升级数据库到 16.0.0Redis 子 Chart 升级到 20.0.0到 15.0.0安全默认值变更——runAsGroup从0改为1001、readOnlyRootFilesystemtrue、resourcesPreset由none改为最小可用值、global.compatibility.openshift.adaptSecurityContext由disabled改为auto、networkPolicy归一化且默认enabledtrue到 8.0.0大量参数重命名如frontend.service.port→frontend.service.ports.http、postgresql.postgresqlPassword→postgresql.auth.password等现有 PostgreSQL Secret 的键需从postgresql-password改为postgres-password到 6.0.0Kubeapps 不再自动创建数据库 Secret升级时需用旧 Secret 密码显式传入--set postgresql.postgresqlPassword$POSTGRESQL_PASSWORD并先删除旧的bitnami初始仓库否则出现rendered manifests contain a resource that already exists错误。10.3 RBAC 未启用时报错安装时出现如下错误说明集群可能未启用 RBACError: release kubeapps failed: clusterroles.rbac.authorization.k8s.io kubeapps-apprepository-controller is forbidden: attempt to grant extra privileges: ... Error: namespaces kubeapps is forbidden: User system:serviceaccount:kube-system:default cannot get namespaces in the namespace kubeapps检查方法kubectl api-versions若输出不含rbac.authorization.k8s.io则关闭 RBAC 创建后安装helm install --name kubeapps --namespace kubeapps oci://REGISTRY_NAME/REPOSITORY_NAME/kubeapps --set rbac.createfalse10.4 列表 namespaces 响应缓慢Kubeapps 使用当前登录用户的凭据列出 namespaces若无权限后端会退回到自己的 ServiceAccount 列举全部 namespaces再逐个检查用户权限namespace 数量大时响应变慢。可提升并行度--set kubeappsapis.burstdesired_number --set kubeappsapis.QPSdesired_number对应 Chart 默认值为kubeappsapis.qps50.0、kubeappsapis.burst100并会在 Kubeapps-APIs 的 Kubernetes 客户端中生效插件注册时透传给各插件见 plugins.go 中ClientQPS/ClientBurst。10.5 IPv6 错误启用--set enableIPv6true后 NGINX 报nginx: [emerg] socket() [::]:8080 failed (97: Address family not supported by protocol)说明集群不支持 IPv6改用--set enableIPv6false即可。十一、版本历史与演进线索Kubeapps Chart 版本与上游能力演进记录在 chart/kubeapps/CHANGELOG.md 与 Chart.yamlChart 当前版本 17.1.1appVersion: DEVEL开发版apiVersion: v2仅 Helm 3 可安装kubeVersion: 1.21.0-02.0 起仅支持 Helm 3MongoDB 支持被移除数据库只保留 PostgreSQL5.0.0 起 Chart 从apiVersion: v1迁移到v2正式与 Helm 2 告别。注本仓库中 chart/kubeapps 为开发用 Chart面向生产安装请使用官方 Bitnami 发布的 Kubeapps Chartoci://registry-1.docker.io/bitnamicharts/kubeapps。十二、为项目做贡献项目鼓励开发者直接参与阅读 CONTRIBUTING.md 了解开发环境搭建与提交流程参考 ROADMAP.md 了解演进方向。需要提醒的是上游官方仓库已于 2025 年 8 月宣布归档停更并由 SAP SE 团队 fork 继续维护如果你正规划新部署建议优先评估该 fork 的后续版本。结语从项目 README 出发可以看到Kubeapps 的设计哲学是一次安装、聚合多种打包生态、把 Kubernetes 自身的认证与授权机制作为安全边界。无论是单集群快速体验、OIDC RBAC 的生产加固还是多集群、离线场景的扩展官方文档 与 Chart README 都提供了可直接落地的操作步骤而仓库源码尤其是 kubeapps-apis 插件机制 与 AppRepository Controller则是理解其内部工作原理的最佳材料。赞分享云原生后端前端【免费下载链接】kubeappsA web-based UI for deploying and managing applications in Kubernetes clusters项目地址https://gitcode.com/gh_mirrors/ku/kubeapps点击查看免费下载相关推荐Hello-CTF安全测试Fuzzing技术深度解析Hello CTF安全测试Fuzzing技术深度解析 引言为什么需要Fuzzing技术 在CTF竞赛和实际安全评估中我们经常面临一个核心问题 如何高效示例工程Kubeapps与Bitnami应用目录集成简化Kubernetes应用部署的终极指南Kubeapps与Bitnami应用目录集成简化Kubernetes应用部署的终极指南 在Kubernetes生态系统中 Kubeapps 作为基于Web的云原生后端前端3步给Docker容器里的Windows上锁dockur/windows 容器安全加固与访问控制避坑指南3步给Docker容器里的Windows上锁dockur/windows 容器安全加固与访问控制避坑指南 Dockur 的 dockur/windows 项目虚拟化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考