Nacos支持https

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://github.com/yzh19961031/blogDemo/tree/master/nacosDemo

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值