docker反向代理DNS/网络问题

标签 docker networking proxy consul

我会尝试解释并绘制出来

我想要实现的目标:

Diagram

抱歉,绘制图很糟糕。现在,如果我从 10.10.10.0 网络访问它,它就可以完美运行。问题是 DNS 将 jenkins.network.com 解析为 10.10.10.0 网络。我想通过代理返回,因为它有 SSL 终止来到达 sonarqube 服务器。有没有一种好方法可以实现此目的,以将服务保留在代理后面?我是否需要创建第二个带有 docker 网络的 DNS 服务器?是否可以通过 consul 使外部和内部服务都指向同一个域名?

编辑: 做这样的事情是可行的,因为一切都通过代理进行。因此,当 Jenkins 击中声纳时,它认为它的IP确实是10.10.10.51,并且可以通过那里击中它。 enter image description here

我需要它做什么: enter image description here 我需要它离开代理,然后通过代理返回。 IE:

172.16.10.2 ---- 172.16.10.1 ----- 10.10.10.50 ----- 代理然后接管路由到正确的位置(172.16.10.3:8080 或其他)

最佳答案

因为您没有发布您的作文。我做了一些假设。假设的组成如下

version: '3'

services:
  nginx:
    image: nginx
    ports:
      - 80:80
      - 443:443
    depends_on:
      - jenkins
      - sonar
  jenkins:
    image: jenkins
  sonar:
    image: sonarqube

所有这些都在 10.10.10.50 上运行。现在,如果您将内部和外部的 DNS 设置为 10.10.10.20jenkins.network.com 都将解析为 10.10.10.50。但在 docker 网络内部,您希望将 jenkins.network.com 解析为容器的 IP。

如果以上所有内容都是正确的,那么下面是最简单的解决方案

version: '3'

service:
  nginx:
    image: nginx
    ports:
      - 80:80
      - 443:443
    depends_on:
      - jenkins
      - sonar
  jenkins:
    image: jenkins
    networks:
      default:
        aliases:
          - jenkins.network.com
  sonar:
    image: sonar
    networks:
      default:
        aliases:
          - sonar.network.com

在 nginx 镜像上我可以访问 jenkins.network.com

root@be6492f18851:/# telnet jenkins.network.com 8080
Trying 172.23.0.3...
Connected to jenkins.network.com.
Escape character is '^]'.
Connection closed by foreign host.

您可以从 Jenkins 和声纳容器中执行此操作并获得相同的结果

编辑-1

如果您希望 DNS 通过代理,您可以更改该网络的别名

version: '3'

service:
  nginx:
    image: nginx
    ports:
      - 80:80
      - 443:443
    depends_on:
      - jenkins
      - sonar
    networks:
      default:
        aliases:
          - sonar.network.com
          - jenkins.network.com
  jenkins:
    image: jenkins
  sonar:
    image: sonar

关于docker反向代理DNS/网络问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002372/

相关文章:

c# - 如何降低 dockerized .Net Core 应用程序的大小?

docker exec 命令未在 sh 文件中执行

java - 是否有任何技术原因导致 Java 应用程序和 C++ 应用程序之间的吞吐量存在显着差异?

python - 用 Python 编写一个可靠的、完全有序的多播系统

kubernetes - 如何在前后服务之间使用Istio虚拟服务

php - 如何使用docker-compose将用户上传的文件保存到已安装的卷中?

linux - Cron 不会在 Ubuntu 21.10 impish 上执行我的任何命令

c# - Windows 内核排队出站网络连接

nginx - 带有docker的nginx反向代理-负载平衡

apache - 是否可以在代理和用户之间使用带有 ssl 加密的转发代理?