当前位置:首页 > 技术 > 正文内容

在Kubernetes中部署单节点Nacos服务

访客 技术 2026年8月2日 1

配置准备

1. 初始化MySQL数据库

首先从官方仓库获取Nacos的数据库初始化脚本:

wget https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql

登录MySQL并创建专用数据库与用户:

mysql -uroot -p
CREATE DATABASE IF NOT EXISTS nacos_config DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE nacos_config;
SOURCE /root/mysql-schema.sql;

-- 创建访问账户(避免使用特殊字符)
CREATE USER 'nacos_user'@'%' IDENTIFIED BY 'SecurePass123';
GRANT ALL PRIVILEGES ON nacos_config.* TO 'nacos_user'@'%';
FLUSH PRIVILEGES;
EXIT;

2. 创建ConfigMap存储数据库连接信息

使用ConfigMap管理数据库配置,便于维护和解耦:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-config
  namespace: middleware
data:
  db.host: "mysql-service.middleware.svc.cluster.local"
  db.name: "nacos_config"
  db.port: "3306"
  db.username: "nacos_user"
  db.password: "SecurePass123"

3. 部署Deployment运行Nacos实例

定义单副本Deployment,启用安全认证与持久化配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nacos-server
  namespace: middleware
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nacos
  template:
    metadata:
      labels:
        app: nacos
    spec:
      containers:
        - name: nacos
          image: nacos/nacos-server:v2.2.0
          ports:
            - containerPort: 8848
              name: http
            - containerPort: 9848
              name: rpc-client
            - containerPort: 9849
              name: rpc-raft
          resources:
            requests:
              cpu: 500m
              memory: 1Gi
          env:
            - name: MODE
              value: "standalone"
            - name: SPRING_DATASOURCE_PLATFORM
              value: "mysql"
            - name: MYSQL_SERVICE_HOST
              valueFrom:
                configMapKeyRef:
                  name: nacos-config
                  key: db.host
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  name: nacos-config
                  key: db.name
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  name: nacos-config
                  key: db.port
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:
                  name: nacos-config
                  key: db.username
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: nacos-config
                  key: db.password
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
            - name: NACOS_AUTH_ENABLE
              value: "true"
            - name: NACOS_AUTH_TOKEN_EXPIRE_SECONDS
              value: "18000"
            - name: NACOS_AUTH_IDENTITY_KEY
              value: "authKey"
            - name: NACOS_AUTH_IDENTITY_VALUE
              value: "authValue"
            - name: NACOS_AUTH_TOKEN
              value: "SecretKey012345678901234567890123456789012345678901234567890123456789"

4. 暴露服务 via Service

通过NodePort方式暴露多个必要端口:

apiVersion: v1
kind: Service
metadata:
  name: nacos-service
  namespace: middleware
spec:
  type: NodePort
  selector:
    app: nacos
  ports:
    - name: server-http
      port: 8848
      targetPort: 8848
      nodePort: 31048
    - name: client-rpc
      port: 9848
      targetPort: 9848
    - name: raft-rpc
      port: 9849
      targetPort: 9849

5. 配置Ingress实现外部访问

使用ALB Ingress控制器对外提供HTTPS访问:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nacos-ingress
  namespace: middleware
  annotations:
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80},{"HTTPS":443}]'
    alb.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: alb
  rules:
    - host: nacos.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nacos-service
                port:
                  number: 8848

完成上述YAML文件编写后,依次执行kubectl apply即可完成部署。

常见问题及解决方案

1. 启动时报错"Unknown column 'encrypted_data_key'"

该错误通常出现在升级或迁移场景中。需手动为以下三张表添加缺失字段:

ALTER TABLE config_info ADD COLUMN `encrypted_data_key` text COMMENT '加密密钥';
ALTER TABLE config_info_beta ADD COLUMN `encrypted_data_key` text COMMENT '加密密钥';
ALTER TABLE his_config_info ADD COLUMN `encrypted_data_key` text COMMENT '历史加密密钥';

2. 默认账号密码无法登录

当开启鉴权但数据库中的密码未加密时,会导致登录失败。可通过Bcrypt工具生成加密串,并更新users表中nacos用户的密码字段:

  • 访问在线Bcrypt生成器
  • 输入明文密码nacos,生成哈希值如:$2a$10$...
  • 执行SQL更新:
UPDATE users SET password='$2a$10$...' WHERE username='nacos';

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。