前言:
因为公司业务发版需要进行灰度发布,基于一定的权重来指向用户流量到不同的版本应用中,这里用nginx的两种不同的方法来实现。
参考:
nginx会话保持之sticky模块 - 天生帅才 - 博客园 (cnblogs.com)
方法一:利用Nginx-sticky
我将在这里介绍容器化的nginx配置,如果是主机部署的nginx则会简单点(需添加了sticky模块的nginx),下面可提供参考。
部署一个deployment并将配置文件挂载到对应configmap。镜像名为:runnable/sticky-nginx:v1.8.1
对应关系:
/etc/nginx/nginx.conf => nginx-conf(nginx.conf)
/etc/nginx/conf.d => conf-d(*.conf)
1.首先我们创建一个比较通用的nginx.conf配置文件内容的ConfigMap:
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-conf
namespace: proxy
data:
nginx.conf: |-
# 设置工作进程数为 4。通常这个值设置为 CPU 核心数,但根据负载情况可以调整。
worker_processes 4;
# 将错误日志输出到标准错误流,以便容器化环境中能捕获和管理日志。
error_log /dev/stderr notice;
events {
# 设置每个工作进程的最大连接数为 1024。
worker_connections 1024;
}
http {
# 包含 mime.types 文件,该文件定义了各种文件扩展名和 MIME 类型的映射。
include mime.types;
# 包含 conf.d 目录下的所有配置文件。方便分模块管理配置。
include conf.d/*.conf;
# 设置默认的 MIME 类型为 application/octet-stream。用于未定义 MIME 类型的文件。
default_type application/octet-stream;
# 启用 sendfile 选项,提高文件传输效率。
sendfile on;
# 设置 keep-alive 超时时间为 65 秒。这个值可以根据需要调整。
keepalive_timeout 65;
# 定义日志格式,命名为 main。日志格式包含客户端 IP、用户信息、请求时间、请求行、响应状态、发送字节数、引用页面、用户代理、转发信息、Cookie 和上游服务器地址。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '