SpringCloud容器化部署的网络问题

问题描述

容器化部署中的网络问题是部署过程中比较头疼的一个问题,下面通过一个完整的部署例子,来介绍一下容器化部署的过程。
以nacos启动的日志为例来查看网络问题。
SpringCloud容器化部署的网络问题_第1张图片
可以看到的是,这里的ip是[http://172.17.0.2:8848](http://172.17.0.2:8848),这其实是一个内网地址,之前提到过Docker实际上是一个精简版的虚拟机,这个IP实际上就是此虚拟机的内网地址。那么如果是一个微服务项目的话,实际上的效果往往是多个主机之间需要能够互联互通,最基本的网关服务要能够路由到其他应用,或者应用之间要能够通过RPC远程调用。

Nacos端口映射

首先要做的是把Nacos暴露出来,让其他应用能够注册到Nacos,所以在nacos启动的时候,需要指定端口映射,也就是如下的运行指令。

docker run -p 30848:8848 -p 31848:9848 -p 31849:9849 --name docker-nacos-7 pig-nacos:1.1.4

这里需要注意的是nacos正常工作需要映射三个端口出来,也就是8848、9848和9849,不然可能会出现项目启动以后报错,说无法连接到nacos,也就是这个错误。
Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING
而且要注意的是,这里映射出来的宿主机的端口也应该是遵循原有的端口规范。9448端口映射出来的宿主机端口也应该比8848映射的宿主机端口大1000,而9849映射出来的端口比9848端口映射出的宿主机端口大1,如果没有按照这样的规则的话,应用服务注册服务的时候还是会报上面的错。
映射出来以后,需要注意的是要修改一下各个应用的nacos对那个的IP,这个一般都在应用的yml文件中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XHUMPond-1690187770111)(https://cdn.nlark.com/yuque/0/2023/png/34740586/1689824293986-5ca8a7da-16f0-436d-8d06-0cead68470f7.png#averageHue=%23677d5d&clientId=u47b712fb-10b1-4&from=paste&height=1048&id=u1cbeb4d4&originHeight=1048&originWidth=1920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=170550&status=done&style=none&taskId=u87f54d52-f4bf-41c0-8991-49f84ae42aa&title=&width=1920)]
圈起来的位置就是需要修改的地方server-addr要改成自己的nacos的ip和映射出来的端口号,格式可能和我的不太一样,内容是对的就可以了。

应用端口设置

介绍一下为什么有多写一个ipport,因为如果把当前应用注册到nacos中,后面网关的请求也会根据nacos中注册的信息路由到对应的服务,但是默认的路由位置还是那个内网IP,实际上这样走不通。我的解决方案是:

  1. 在部署项目之前,端口映射分配好
  2. 应用的yml中设置被发现的IP和端口号,IP填宿主机的IP,端口号写分配到的宿主机端口
  3. 应用启动的时候,将应用的服务端口映射到宿主机的端口

这样一来,就可以将应用间的网络打通。此时制作此应用服务的镜像。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gXU41ZZs-1690187770111)(https://cdn.nlark.com/yuque/0/2023/png/34740586/1689837843557-692c8e4f-2cf3-4ed4-8b68-221410b898d6.png#averageHue=%23dddddd&clientId=ue0c233d2-6146-4&from=paste&height=805&id=u29f2859d&originHeight=805&originWidth=1670&originalType=binary&ratio=1&rotation=0&showTitle=false&size=41451&status=done&style=none&taskId=u61a8a148-0aa9-449f-9afb-31781a8b2d5&title=&width=1670)]
SpringCloud容器化部署的网络问题_第2张图片
其他应用启动成功以后,就可以在nacos的WEB页面上,看到对应的应用服务,说明此时已经将微服务项目的后端启动起来了。

你可能感兴趣的:(spring,cloud,网络,spring)