云原生小白|KubeGems 启用 Nacos 配置中心

KubeGems是一款以围绕 Kubernetes 通过自研和集成云原生项目而构建的通用性开源 PaaS 云管理平台。经过我们内部近一年的持续迭代,当前 KubeGems 的核心功能已经初步具备多云多租户场景下的统一管理。并通过插件化的方式,在用户界面中灵活控制包括 监控系统、日志系统、微服务治理 等众多插件的启用和关闭。
Nacos 介绍 Nacos 是阿里云开源一款在微服务场景下用于处理应用配置发布管理和服务注册管理的服务平台。其主要提供了如下几个特性:
  • 服务发现和服务健康监测
    基于 DNS 和 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
  • 动态配置服务
    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  • 动态 DNS 服务
    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
  • 服务及其元数据管理
    Nacos 从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
    KubeGems 中的 Nacos
    KubeGems 自v1.21版本之后开启了对 Nacos 配置中心的支持,并利用了内置 Plugins CRD 实现了对 Nacos 的快速启动。
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

  • KubeGems 中的 Nacos 安装源来至官方社区提供https://github.com/nacos-group/nacos-k8s,并在 plugin crd 中来管理部署的版本。用过 Nacos 的同学可能知道,其内部的数据模型主要围绕dataidgroupnamespace这 3 个进行操作。由于 KubeGems 的设计是一个支持多租户的平台,所以在应用 nacos 数据模型时,按照了 tenant + project来区分内部的命名空间。
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

【云原生小白|KubeGems 启用 Nacos 配置中心】云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

启用和配置插件 KubeGems 启用 Nacos 需要具备系统管理员的权限进行操作。管理员进入管理后台的“插件管理”,点击“启用“按钮“即可开启Nacos。
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

直到出现如下状态,代表插件运行正常
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

此时,我们就可以在租户的环境中开始使用 Nacos 服务
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

个性化配置
Nacos插件的配置以 CRD 的形式存放在 nacos命名空间中,我们可以通过命令kubectl edit plugin nacos -n nacos对插件进行个性化配置。
apiVersion: plugins.kubegems.io/v1beta1 kind: Plugin metadata: finalizers: - plugins.kubegems.io/finalizer generation: 1 name: nacos namespace: nacos spec: kind: helm path: helm url: https://github.com/nacos-group/nacos-k8s.git values: namespace: nacos global: mode: cluster nacos: replicaCount: 1 image: repository: registry.cn-beijing.aliyuncs.com/kubegems/nacos-server tag: v2.1.1 plugin: image: repository: registry.cn-beijing.aliyuncs.com/kubegems/nacos-peer-finder-plugin persistence: data: storageClassName: local-path enabled: true service: type: ClusterIP version: master

提示:KubeGems的插件 CRD 由 https://github.com/kubegems/bundle-controller提供支持,我们也可以直接使用 bundle-controller 在非 kubegems 集群中管理插件。
集群部署
Nacos集群由社区提供支持部署,kubegems 默认将 nacos 的全局运行模式设置为“cluster”,如果您需要扩展成多集群,只需修改replicaCount的副本数为 3 即可。
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

开放集群外访问
Nacos 插件默认运行在 Kubernetes 内部,如果需要在集群外访问 Nacos 需借助网关实现。管理员可以在后台创建一条基于默认网关的 ingress 来代理 nacos api。过程如下:
第一步:进入路由功能页面,选择 nacos 命名空间
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片


第二步:创建并提交一条路由规则,用于 nacos 的代理
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

第三步:获取访问地址
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

提示:Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成
使用配置中心 进入应用环境下的“应用配置”,可以点击右上角的“获取访问信息”查看当前环境下的 nacos sdk 所需的配置信息
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

配置管理
点击“创建配置项”就可以创建配置
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

配置历史与回滚
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

监听列表
云原生小白|KubeGems 启用 Nacos 配置中心
文章图片

运行测试 我们用 nacos-sdk-go/v1来做一个简单的认证
package mainimport ( "fmt" "time" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo" )func main() { sc := []constant.ServerConfig{ { IpAddr: "nacos.kubegems.io", Port:31956, }, } cc := constant.ClientConfig{ NamespaceId:"69f7325702bc396a8773f9a0a94eea310b21ec39", //namespace id TimeoutMs:5000, NotLoadCacheAtStart: true, LogDir:"/tmp/nacos/log", CacheDir:"/tmp/nacos/cache", LogLevel:"debug", } client, err := clients.NewConfigClient( vo.NacosClientParam{ ClientConfig:&cc, ServerConfigs: sc, }, ) if err != nil { panic(err) } content, err := client.GetConfig(vo.ConfigParam{ DataId: "test", Group:"e3", }) fmt.Println("GetConfig,config :" + content) err = client.ListenConfig(vo.ConfigParam{ DataId: "test", Group:"e3", OnChange: func(namespace, group, dataId, data string) { fmt.Println("config changed group:" + group + ", dataId:" + dataId + ", content:" + data) }, }) time.Sleep(300 * time.Second) }

以下是运行情况


总结 本文主要介绍了在 KubeGems 中启用并使用Nacos插件作为应用的配置中心的基本管理功能。Nacos 是一个非常棒的应用配置管理平台,KubeGems 团队将持续关注此项目,并为用户在 Kubernetes 集群提供更友好的支持。

    推荐阅读