添加容器网络允许前后端安全的通信

  通常有几种解决方案可以允许前端安全地与后端通信,而不需要将后端端口暴露在公网上。
  1. 反向代理: 使用Nginx或其他反向代理服务器可以转发前端请求到后端服务。你可以在同一台服务器上部署Nginx,配置它监听公网端口并转发请求到内部Docker容器中的后端服务。这样,外部只能看到Nginx的端口,而后端服务仍然保持在内网中不被直接访问。
  2. API网关: 如果你的应用架构支持,可以使用API网关服务,如Kong或Spring Cloud Gateway。这些网关提供了额外的功能,如负载均衡、权限验证、限流等。
  3. VPN或专线: 如果前端和后端之间的通信需要高度安全和可靠性,可以考虑建立VPN或专线连接,确保数据传输的安全性。
  4. 服务发现与负载均衡: 在更复杂的微服务架构中,可以使用Consul、Eureka等服务发现工具和配合负载均衡器(如HAProxy)来实现服务间的安全通信。
  5. 容器网络: 如果你的前端也是用Docker容器化的,可以使用Docker的网络功能,让前端和后端容器处于同一个网络环境中,这样它们就可以直接通信。
  6. 隧道技术: 使用SSH隧道或其他隧道技术,将内网的后端服务映射到公网上的某个端口,但这种方法通常用于临时调试,可能不适用于生产环境。
 
这里使用容器网络技术。
  要使用容器网络方案解决你的问题,可以利用Docker的网络功能来允许前端和后端容器在同一网络环境下相互通信,而不需要将后端端口暴露到宿主机上。以下是基本的步骤指南:
  1. 创建Docker网络: 首先,需要创建一个Docker网络,这样前端和后端容器就可以加入到这个网络中,从而能够相互通信。

    docker network create my-app-network
    // my-app-network是自己取的网络名称
    //docker network create calssmate-jar
    //查看是否成功 docker network ls
    1. 部署后端服务: 当你部署后端服务时,确保将其加入到之前创建的Docker网络中。

      docker run -d --name my-backend --network my-app-network my-backend-image
      //这里的my-backend-image是你的后端服务的Docker镜像名称
      //docker run -d --name classmate-jar --network classmate-jar classmate-jar:latest
      1. 部署前端服务: 同样,当你部署前端服务时,也要确保将其加入到相同的Docker网络中。

        docker run -d -p 80:80 --name my-frontend --network my-app-network my-frontend-image
        //这里的my-frontend-image是你的前端服务的Docker镜像名称。-p 80:80表示将宿主机的80端口映射到容器的80端口,这样外部就可以通过HTTP访问你的前端服务了。
        1. 配置前端以访问后端: 由于前端和后端容器现在处于同一网络中,你可以直接在前端代码中配置后端的容器名称作为后端服务的地址。例如,如果你的后端容器名称是my-backend,并且后端服务监听的是8080端口,那么你可以在前端代码中将后端服务的URL设置为http://my-backend:8080
        2. 测试通信: 最后,确保前端容器可以成功连接到后端服务。可以通过在前端容器内执行curl命令来测试后端服务的可达性。
        docker exec -it my-frontend curl http://my-backend:8080
          如果测试成功,前端应该能够通过容器网络无缝地与后端通信。
          请注意,这个解决方案假设前端和后端服务都已经容器化,并且可以在同一台服务器上管理它们。如果前端服务不在容器中,或者需要从外部网络访问后端服务,那么可能需要考虑其他解决方案,如反向代理或API网关。
         
          使用其他容器测试
          如果您不想在您的应用容器中安装 curl,您可以创建一个新的容器,这个容器包含了 curl 工具,然后从该容器内部向您的后端服务发送请求。
          这里我们使用了 appropriate/curl 镜像,它是一个专门用于 curl 操作的 Docker 镜像。确保这个新创建的容器和您的后端服务处于同一个 Docker 网络中。
          正确的命令格式如下:

        docker run --rm --network classmate appropriate/curl http://classmate-jar:8081
          这里的 --rm 参数表示容器在执行完命令后会被自动删除,--network classmate 表示新创建的 appropriate/curl 容器会加入到名为 classmate 的网络中,以便它能与 classmate-jar 容器通信。
          请确保 classmate-jar 容器的 8081 端口已经正确暴露,并且在 classmate 网络中可访问。如果一切设置正确,这个命令将会从 appropriate/curl 容器向 classmate-jar 容器的 8081 端口发送一个 HTTP GET 请求,并输出响应内容。
点赞

当前页面评论已关闭。

隐藏
变装