问题:docker 反向代理 DNS/网络问题

我会试着解释并画出来

我想要达到的目标:

图解

对不起,糟糕的油漆图。现在,如果我从 10.10.10.0 网络点击它,它就可以完美运行。问题是 DNS 将 jenkins.network.com 解析为 10.10.10.0 网络。我想通过代理返回,因为它具有 SSL 终止以到达 sonarqube 服务器。有没有一种很好的方法来实现这一点,以保持代理后面的服务?我是否需要创建第二个带有 docker 网络的 DNS 服务器?这可能与 consul 让外部和内部服务都指向同一个域名有关吗?

编辑:做这样的事情会起作用,因为一切都通过代理。因此,当詹金斯击中声纳时,它认为它的 ip 真的是 10.10.10.51 并且它可以通过那里击中它。 在此处输入图像描述

我需要它做什么:在这里输入图片描述我需要它从代理出去,然后通过代理回来。 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.20,则jenkins.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.

你可以从詹金斯和声纳容器中做到这一点并获得相同的结果

编辑-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
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐