nginx容器通过docker内置DNS实现动态负载
nginx容器通过docker内置DNS实现动态负载nginx若upstream中有不可resolve的server时,start/reload都会失败。默认情况下nginx会在start/reload时解析并缓存upstream中的server,当server有变化时nginx无法感知变化,这在容器集群环境容器ip会随着容器重启变化的情况下是一个比较大的问题。源码编译方式构建nginx镜像安装相
·
nginx容器通过docker内置DNS实现动态负载
nginx若upstream中有不可resolve的server时,start/reload都会失败。
默认情况下nginx会在start/reload时解析并缓存upstream中的server,当server有变化时nginx无法感知变化,这在容器集群环境容器ip会随着容器重启变化的情况下是一个比较大的问题。
源码编译方式构建nginx镜像安装相关模块
构建样例:https://github.com/ZhengweiHou/docker-nginx-build-by-sources.git
使用样例中的Dockerfile构建镜像,样例中的Dockerfile中需要在构建容器中下载相关源文件,因某些原因下载缓慢,可以提前自己下载资源,搭建使用本地资源服务链接,加速构建速度。
样例中的针对本文场景的关键模块是nginx-upstream-dynamic-servers
下文演示案例基于该样例构建的镜像
nginx容器动态DNS负载
1. 测试容器编排
version: '3.9'
services:
whoami:
image: containous/whoami:v1.5.0
deploy:
replicas: 3
proxy_nginx:
image: nginx:1.20.1-alpine_sticky
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- 8001:8080
replicas
控制目标容器的副本数
2. nginx关键配置
http {
...
resolver 127.0.0.11 valid=10s;
upstream hzw-back {
server whoami:80 max_fails=1 fail_timeout=1s resolve;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://hzw-back;
}
}
}
- resolver指定docker内置DNS地址(默认为127.0.0.11,通过查看容器中/etc/resolv.conf确认)
演示验证
更多推荐
已为社区贡献1条内容
所有评论(0)