Docker Swarm 跨云集群实现流量就地转发(Nginx 全局网关)

本文基于全局 Nginx 网关,在保持配置中心化的同时,实现请求的就地转发,构建出兼具弹性扩展与高效传输特性的简易云原生网络架构。

跨云 Mesh 组网

多云、多地域环境下,网络情况复杂且不可控,本文推荐通过 Tailscale 来创建一个虚拟的网络平面。

参见文章:https://www.rehiy.com/post/592/

创建 Swarm 集群

基于上面创建的 Mesh 网络,在虚拟网络平面上创建 Swarm 集群,避免因NAT、防火墙等因素干扰集群通信。

参见文章:https://www.rehiy.com/post/285/

使用 Nginx 原地转发请求到服务

下列代码保存到 /srv/nginx-gw/etc/0-example.conf

如果你有多个站点,可以参照 server 段写入多个站点或多个配置文件,创建服务时这些配置将被自动合并到集群 config 存储。

# 此代码必须且只能出现一次
resolver 127.0.0.11 valid=30s;

# 站点转发配置,可根据需要重写
server {
    listen 80;
    listen 443 ssl;

    http2 on;

    # 注意修改为业务域名
    server_name www.example.org;

    # 默认使用内置自签证书,套 CDN 可忽略配置
    #ssl_certificate certs/example.org.cer;
    #ssl_certificate_key certs/example.org.key;

    location / {
        # 替换 example 为后端容器名称,确保和 Nginx 在同一个 Overlay 网络
        proxy_pass http://example;
        proxy_http_version 1.1;
        proxy_request_buffering off;
        proxy_buffering off;
    }
}

下列代码保存到 /srv/nginx-gw/docker

脚本会把配置文件转为 swarm config 存储,以便 nginx-gw 跨主机访问,实现配置中心化,减少维护成本。
:可以参考此方法配置自定义的 SSL 证书等。

#!/bin/sh
#
# @Author  Rehiy <[email protected]>
# @Website http://www.rehiy.com
#

APP_NAME=nginx-gw

APP_FROM=rehiy/webox:nginx

APP_PATH=$(cd `dirname $0`; pwd)

#####################################################################################

if [ "$1" = "remove" ] || [ "$1" = "update" ]; then
    docker service rm $APP_NAME
    docker config rm nginx_conf
fi

if [ "$1" = "install" ] || [ "$1" = "update" ]; then
    cat $APP_PATH/etc/* | docker config create nginx_conf -; sleep 5
    docker service create --name $APP_NAME \
        --mode global \
        --network ovnet \ # 此处请填写自定义的 Overlay 网络
        --publish mode=host,target=80,published=80 \
        --publish mode=host,target=443,published=443 \
        --config source=nginx_conf,target=/var/config/nginx/host.d/site.conf \
        --env TZ=Asia/Shanghai \
        $APP_FROM
fi

运行 /srv/nginx-gw/docker install

服务启动后,将在所有节点上运行 nginx 服务,无论从哪个节点接入流量,都会就地转发给后端服务。
这样可以避免单副本服务导致的多次转发,同时也只需要维护一份 nginx 配置即可。

总结

  • ​配置集中管理​​:单点配置自动同步至所有节点
  • 低损流量转发​​:规避传统反向代理的多次跳跃
  • 弹性扩展能力​​:低成本随集群节点自动扩缩容
文章作者: 若海; 原文链接: https://www.rehiy.com/post/598/; 转载需声明来自技术写真 - 若海

添加新评论