docker 反向代理 DNS/networking 问题
docker reverse proxy DNS/networking issues
我会试着解释并把它画出来
我想达到的目标:
抱歉画图太烂了。现在,如果我从 10.10.10.0 网络访问它,它会完美运行。问题是 DNS 将 jenkins.network.com 解析为 10.10.10.0 网络。我想通过代理返回,因为它有 SSL 终止以到达 sonarqube 服务器。有没有一种好方法可以做到这一点以将服务保留在代理后面?我是否需要使用 docker 网络创建第二个 DNS 服务器?这可能与 consul 的外部和内部服务都指向同一个域名有关吗?
编辑:
这样做是可行的,因为一切都通过代理。因此,当詹金斯点击声纳时,它认为它的 IP 确实是 10.10.10.51,它可以通过那里点击它。
我需要它做什么:
我需要它离开代理,然后通过代理返回。即:
172.16.10.2 ---- 172.16.10.1 ----- 10.10.10.50 ----- 然后代理接管路由到正确的位置(172.16.10.3:8080 或其他)
用nginx做反向代理怎么样?
如果我没看错的话,你要监听443端口
并反转为 172.16.10.1
下面是一个 nginx 配置示例
server {
listen 443;
root /data/up1;
location / {
proxy_pass 172.16.10.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
希望对您有所帮助
因为你没有post你的撰写。我几乎没有做任何假设。假定的撰写如下
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.
您可以从 jenkins 和 sonar 容器中执行此操作并获得相同的结果
编辑-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
我会试着解释并把它画出来
我想达到的目标:
抱歉画图太烂了。现在,如果我从 10.10.10.0 网络访问它,它会完美运行。问题是 DNS 将 jenkins.network.com 解析为 10.10.10.0 网络。我想通过代理返回,因为它有 SSL 终止以到达 sonarqube 服务器。有没有一种好方法可以做到这一点以将服务保留在代理后面?我是否需要使用 docker 网络创建第二个 DNS 服务器?这可能与 consul 的外部和内部服务都指向同一个域名有关吗?
编辑:
这样做是可行的,因为一切都通过代理。因此,当詹金斯点击声纳时,它认为它的 IP 确实是 10.10.10.51,它可以通过那里点击它。
我需要它做什么:
172.16.10.2 ---- 172.16.10.1 ----- 10.10.10.50 ----- 然后代理接管路由到正确的位置(172.16.10.3:8080 或其他)
用nginx做反向代理怎么样?
如果我没看错的话,你要监听443端口
并反转为 172.16.10.1
下面是一个 nginx 配置示例
server {
listen 443;
root /data/up1;
location / {
proxy_pass 172.16.10.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
希望对您有所帮助
因为你没有post你的撰写。我几乎没有做任何假设。假定的撰写如下
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.
您可以从 jenkins 和 sonar 容器中执行此操作并获得相同的结果
编辑-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