docker化sentinel-dashboard+nacos注册中心

简介: docker化sentinel-dashboard+nacos注册中心

1.先把Sentinel克隆代码到本地

2.把克隆好的代码分支切换到release-1.7。如图所示:

image.png

3.通过idea工具打开克隆的项目(需要等待一段时间,maven需要下载很多依赖包)

4.项目导入成功后,打开sentinel-dashboard模块中的pom.xml,把sentinel-datasource-nacos依赖的scope那一行删掉(作用就是打包的时候把sentinel-datasource-nacos打进去,这样才能把规则写入nacos注册中心)

image.png

5.按照下图所示,把sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos这个包里面的所有java文件都复制sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule

image.png

6.如下图所示,把FlowControllerV2中的两个指定的名字分别改成FlowRuleNacosProvider对象和FlowRuleNacosPublisher对象对应的bean名称

image.png

7.修改前端代码:

image.png

这个修改是有原因的,没修改的时候是这样的:

image.png

修改后是这样的:

image.png

这样才能访问到FlowControllerV2。

至此,当前sentinel-dashboard可以访问localhost上的nacos实例,所以我们下一步需要修改成动态配置目标nacos

8.新增一个NacosProperties

image.png

package com.alibaba.csp.sentinel.dashboard.rule.nacos;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/** @author zouwei */
@Component
@ConfigurationProperties(prefix = "nacos.server")
public class NacosProperties {
    private static final String NACOS_SERVER_ADDR = "NACOS_SERVER_ADDR";
    private static final String NACOS_GROUP_ID = "NACOS_GROUP_ID";
    private static final String NACOS_NAMESPACE = "NACOS_NAMESPACE";
    private static final String NACOS_PORT = "NACOS_PORT";
    private static final String NACOS_IP = "NACOS_IP";
    private String ip = "localhost";
    private String port = "8848";
    private String namespace;
    private String groupId = "DEFAULT_GROUP";
    public String getIp() {
        String nacosIp = getEnv(NACOS_IP);
        if (StringUtils.isNotBlank(nacosIp)) {
            return nacosIp;
        }
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public String getPort() {
        String nacosPort = getEnv(NACOS_PORT);
        if (StringUtils.isNotBlank(nacosPort)) {
            return nacosPort;
        }
        return port;
    }
    public void setPort(String port) {
        this.port = port;
    }
    public String getNamespace() {
        String nacosNamespace = getEnv(NACOS_NAMESPACE);
        if (StringUtils.isNotBlank(nacosNamespace)) {
            return nacosNamespace;
        }
        return namespace;
    }
    public void setNamespace(String namespace) {
        this.namespace = namespace;
    }
    public String getGroupId() {
        String nacosGroupId = getEnv(NACOS_GROUP_ID);
        if (StringUtils.isNotBlank(nacosGroupId)) {
            return nacosGroupId;
        }
        return groupId;
    }
    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }
    public String getServerAddr() {
        String nacosServerAddr = getEnv(NACOS_SERVER_ADDR);
        if (StringUtils.isNotBlank(nacosServerAddr)) {
            return nacosServerAddr;
        }
        return this.getIp() + ":" + this.getPort();
    }
    private static String getEnv(String key) {
        return System.getenv(key);
    }
}
复制代码

9.修改以下三个类

image.png

image.png

image.png

10.添加nacos相关配置

image.png

这四个和nacos相关的配置根据自己的实际情况配置。

到这一步,就已经达到了动态配置目标nacos的目的了。接下来,就是打包和docker化。

11:打包

在idea中找到Terminal,进入sentinel-dashboard中,执行以下命令打包:

mvn clean package
复制代码

执行完毕后,在target中会生成sentinel-dashboard.jar,这个就是我们需要的jar包

image.png

12:准备好docker-compose.yml和Dockerfile

docker-compose.yml

version: "3"
services:
  sentinel-dashboard:
    build: ./sentinel
    container_name: sentinel-dashboard
    ports:
      # 对应Dockerfile中的192.168.2.231:8086及8080端口配置
      - "8086:8080"
    environment:
      # nacos服务地址及端口(根据自身情况配置)
      - NACOS_SERVER_ADDR=192.168.2.231:8848
      # nacos服务namespace(根据自身情况配置)
      - NACOS_NAMESPACE=d1191f93-910a-47cc-8684-234e2b30909b
      # nacos服务group id(根据自身情况配置)
      - NACOS_GROUP_ID=SENTINEL_GROUP
复制代码

Dockerfile

FROM openjdk
MAINTAINER 作者 <邮箱地址>
RUN mkdir /usr/src/sentinel-dashboard
COPY sentinel-dashboard.jar /usr/src/sentinel-dashboard
WORKDIR /usr/src/sentinel-dashboard
EXPOSE 8080
ENTRYPOINT ["java", "-Dserver.port=8080", "-Dcsp.sentinel.dashboard.server=192.168.2.231:8086", "-Dproject.name=sentinel-dashboard", "-jar", "sentinel-dashboard.jar"]
复制代码

以上配置中192.168.2.231:8086为宿主机IP和映射出来的8086端口,其实就是指向sentinel-dashboard服务,该配置可自定义。

13.启动sentinel-dashboard服务

执行以下命令启动服务:

docker-compose up -d sentinel-dashboard
复制代码

通过访问指定的192.168.2.231:8086进入sentinel登录页面

image.png

输入默认的用户名:sentinel 密码:sentinel

image.png

至此,就可以通过sentinel-dashboard和nacos就可以实现流控规则的持久化和动态配置了。


相关文章
|
2月前
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
68 5
|
2月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
72 3
|
25天前
|
存储 持续交付 数据安全/隐私保护
Docker 注册中心
【8月更文挑战第24天】
12 0
|
2月前
|
Nacos 微服务
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
40 4
|
1月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
35 0
|
1月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
41 0
|
1月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
76 0
|
1月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
73 0
|
2月前
|
Nacos 数据中心 Docker
Docker 部署 Nacos 集群
Docker 部署 Nacos 集群
|
3月前
|
关系型数据库 MySQL Nacos
使用 Docker 部署 Nacos 并配置 MySQL 数据源
使用 Docker 部署 Nacos 并配置 MySQL 数据源
701 0