nginx-ingress设置⽇志格式-配置转发真实ip-超时参数配置-会话保持参数nginx-ingress设置⽇志格式-配置转发真实ip-⽩名单限制
参考官⽅⽂档
修改nginx-ingrss的configmap配置⽂件
apiVersion: v1
data:
compute-full-forwarded-for: "true"
forwarded-for-header: X-Forwarded-For
log-format-upstream: '{"time": "$time_iso8601", "proxy_protocol_addr": "$proxy_protocol_addr",
"proxy_add_x_forwarded_for": "$proxy_add_x_forwarded_for", "request_id": "$req_id", "remote_user":
"$remote_user", "bytes_sent": $bytes_sent, "request_time": $request_time, "status":
$status, "vhost": "$host", "request_proto": "$server_protocol", "path": "$uri",
"request_query": "$args", "request_length": $request_length, "duration": $request_time,
"method": "$request_method", "http_referrer": "$http_referer", "http_user_agent":
"$http_user_agent", "remote_addr":"$remote_addr", "remote_port": "$remote_port",
"x_forwarded_for": "$http_x_forwarded_for" }'
real_ip_header: X-Forwarded-For #将客户端真实ip替换为请求头的值
real_ip_recursive: "on"#递归排除IP地址,ip串从右到左开始排除set_real_ip_from⾥⾯出现的IP,如果出现了未出现这些ip段的IP,那么这个IP将被认为是⽤户的IP
set_real_ip_from: 100.125.0.0/16 #可信任的ip,真实服务器上⼀级代理的IP地址或者IP段,可以写多⾏
use-forwarded-headers: "true"#如果Nginx在其他7层代理或负载均衡后⾯,当期望Nginx将X-Forwarded-*的头信息传递给后端服务时,则需要将此参数设为true,如果设为false(默认为false),Nginx会忽略掉X-Forwarded-*的头信息。false设置适⽤于Nginx直接对外或前⾯只有3层负载均衡的场景
kind: ConfigMap
metadata:
creationTimestamp: "2021-12-02T02:04:31Z"
labels:
app: nginx-ingress
chart: nginx-ingress-1.2.6
component: controller
heritage: Tiller
release: cceaddon-nginx-ingress
name: cceaddon-nginx-ingress-controller
namespace: kube-system
resourceVersion: "4738338"
selfLink: /api/v1/namespaces/kube-system/configmaps/cceaddon-nginx-ingress-controller
uid: 38ee4b63-4fcb-43c8-8ed1-1258f28ab13c
nginx-ingress配置域名转发时参数注释添加
上述配置需要配置nginx-ingress的本⾝的配置⽂件,下边是给ingress转发创建资源时添加的注释
上传⼀些⼤⽂件参数时需要配置的⼤⼩限制和超时时间限制参数
nginx.ingress.kubernetes.io/proxy-body-size=200m
#指定请求⼤⼩限制
nginx.ingress.kubernetes.io/proxy-read-timeout=600
#连接成功后_等候后端服务器响应时间_其实已经进⼊后端的排队之中等候处理
nginx.ingress.kubernetes.io/proxy-send-timeout=600
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
#我们这是转发到后端需要在后端上传到oss,所以需要等待后端给响应
如果后端还有nginx,nginx也需要调整时间
client_max_body_size 200M;
#请求主体⼤⼩
client_header_buffer_size 32k;
#标准请求头⼤⼩
large_client_header_buffers 4 1024k;
#最⼤请求头⼤⼩
#先根据client_header_buffer_size配置的值分配⼀个buffer,如果分配的buffer⽆法容纳 request_line/request_header,那么就会再次根据large_client_header _buffers配置的参数分配large_buffer,如果large_buffer还是⽆法容纳,那么就会返回414(处理request_line)/400(处理req
uest_header)错误。
proxy_send_timeout 600s;
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout 600s;
#连接成功后_等候后端服务器响应时间_其实已经进⼊后端的排队之中等候处理
nginx-ingress限制⽩名单访问
在ingress资源配置上添加参数
nginx.ingress.kubernetes.io/whitelist-source-range: 127.0.0.1,192.168.8.0/24
nginx-ingress会话保持设置
## 前提
基于kubernetes部署Java项⽬,发现在多pod模式下,会出现登录成功但是页⾯⽆法跳转的问题,在单⼀pod时却可以成功登录并页⾯正常跳转,于是推测是cookie的问题。
⽹上的⼤部分⽂章提供的解决⽅案都是在service的配置⽂件中加⼊sessionAffinity: ClientIP,功能是选择与请求来源ip更接近的pod,这样就会固定同⼀个session,但是好像并不适⽤于我这个项⽬。
最终的解决当然还是要靠⾃⼰读官⽅的⽂档,ingress-nginx有⼤量的注释配置,官⽅针对这种情况已经做了说明,需要细细阅读,详见Cookie affinity。
## 解决⽅案
注释nginx.ingress.kubernetes.io/affinity在Ingress的所有上游中启⽤和设置相似性类型。这样,请求将始终定向到同⼀上游服务器。Nginx唯⼀可⽤的相似性类型是cookie。
如果为⼀个主机定义了多个Ingress nginx.ingress.kubernetes.io/affinity: cookie,并且⾄少⼀个Ingress使⽤,则只有Ingress使⽤的路径nginx.ingress.kubernet es.io/affinity将使⽤会话Cookie相似性。通过随机选择后端服务器,可以在主机的其他⼊⼝定义的所有路径进⾏负载均衡。
如果您使⽤Cookie affinity,则还可以使⽤注释nginx.ingress.kubernetes.io/session-cookie-name来指定将⽤于路由请求的cookie名称。 默认是创建⼀个名为INGRESSCOOKIE的cookie。
注释nginx.ingress.kubernetes.io/affinity-mode定义了会话的粘性。如果将部署规模扩⼤,balance则将此选项设置为(默认)将重新分配⼀些会话,从⽽重新平衡服务器上的负载。将此设置为persistent不
会重新平衡与新服务器的会话,因此提供了最⼤的粘性。
以上是官⽅⽂档的直译。
简⽽⾔之,在ingress-nginx配置中应做以下操作:
设置nginx.ingress.kubernetes.io/affinity属性,启⽤会话保持。
设置nginx.ingress.kubernetes.io/affinity-mode属性,设置为balance在集扩⼤pod时,会⾃动分配⼀些会话到新创建的pod上,⽤于平衡服务器的负载;设置为persistent则永远保证⽤户访问pod的⼀致性,不会访问到其他pod。
设置nginx.ingress.kubernetes.io/session-cookie-name属性,⾃定义cookie名称。
对我⽤到了其中的三个属性进⾏描述:
## 配置⽂件
使⽤session会话保持可以⽤于解决多tomcat的pod下,登录由于session问题导致页⾯⽆法跳转的问题。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-tomcat
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/affinity-mode: "persistent"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
spec:
tls:
- hosts:
- your.host
secretName: https-secret
rules:
- host: your.host
http:
paths:
- path:
backend:
serviceName: your service name
servicePort: 8280
以下为其他⽹友提供的解决⽅案:
在service的配置⽂件中加⼊sessionAffinity: ClientIP,功能是选择与请求来源ip更接近的pod,这样就会固定同⼀个session。
apiVersion: v1nginx 配置文件
kind: Service
metadata:
name: tomcat
namespace: default
spec:
selector:
app: tomcat
release: canary
ports:
- name: http
targetPort: 8280
port: 8280
sessionAffinity: ClientIP
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论