Nacos支持https
前言
本文主要整理了Nacos Server如何开启https,以及对于注册发现和客户端负载均衡需要如何适配修改。
软件版本
Spring Boot 2.6.7
Spring Cloud 2021.0.2
Spring Cloud Alibaba 2021.0.1.0
Nacos 2.1.0
测试项目图示
实现方案
Nacos官方文档中没有明确支持Nacos Server的https,目前参阅部分技术文档,都是通过nginx代理转发来实现的https。这种方式其实没有真正的让Nacos Server开启https,默认我们应该是通过 https://localhost:8848/nacos/index.html 的方式去访问Nacos才算开启https。
其实Nacos是基于Spring Boot项目做的开发,我这边的思路就是对源码做一下定制修改,以Spring Boot支持的方式开启Nacos Server支持https。
Nacos Server的源码是一个maven的聚合工程,有很多子模块,通过源码阅读发现主工程应该是console,所以可以直接修改console模块中的配置文件,加入证书的配置信息,然后源码编译之后重新启动,就可以让Nacos开启https。
首先生成一份Nacos Server的证书,这边通过keytool命令生成,具体的生成命令可以自行百度一下,也可以参考我之前的博客。
然后通过github下载nacos源码工程,将证书信息放到console模块的resources目录下:
之后在console模块的配置文件application.properties中添加如下配置,添加证书信息:
# 支持https
server.ssl.enabled=true
server.ssl.key-alias=nacosServer
server.ssl.key-store=classpath:nacosServer.jks
server.ssl.key-store-type=JKS
server.ssl.key-password=123456
重新执行编译构建,启动nacos,可以在控制台看到nacos已经开启了https:
通过https访问nacos控制端,访问ok:
客户端适配
参考官方issue#3654,目前Nacos client已经支持注册到https的server上了,下面也整理下客户端如何注册到Nacos Server上面。
注册发现
首先需要将Nacos Server的证书导出出来,作为客户端的信任证书。可以直接从页面导出或者通过keytool命令从jks文件中导出:
将导出的证书文件nacosServer.cer放到resources目录下:
然后通过设置如下几个系统变量,开启客户端校验nacosServer证书:
public static void main(String[] args) {
loadNacosCertificate();
SpringApplication.run(NacosHttpsProviderApplication.class, args);
}
// 加载nacos证书
private static void loadNacosCertificate() {
System.setProperty(TlsSystemConfig.TLS_ENABLE, "true");
System.setProperty(TlsSystemConfig.CLIENT_AUTH, "true");
try {
System.setProperty(TlsSystemConfig.CLIENT_TRUST_CERT, ResourceUtils.getFile("classpath:nacosServer.cer").getCanonicalPath());
} catch (Exception e) {
log.error("Init nacosServer cer error", e);
}
}
自己觉得nacos对于https的适配没有那么好,之前在使用eureka的时候,都是使用类似@ConditionalOnMissingBean这种注解来提供覆盖源码中默认的bean来拓展框架提供的能力,比如加载信任库证书信息等等。
之后修改application.properties配置文件中的spring.cloud.nacos.discovery.server-addr的值,修改为https:
spring.application.name=nacos-https-consumer
server.port=8089
spring.cloud.nacos.discovery.server-addr=https://localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
之后启动微服务,注册ok:
结语
参考:https://github.com/alibaba/nacos/pull/3654文章来源:https://www.toymoban.com/news/detail-467511.html
代码地址:https://github.com/yzh19961031/blogDemo/tree/master/nacosDemo文章来源地址https://www.toymoban.com/news/detail-467511.html
到了这里,关于Nacos支持https的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!