IngressController的session stick问题

高可用ingress-controller部署 高可用ingress-controller部署所用yaml文件,ingress-controller-v1.1.0,kube-webhook-certgen-v1.1.1。 立即下载

周末爬坑,IngressController恢复因为镜像下载和版本问题折腾一下午,晚上终于折腾出个眉目。

首先,在Kubernetes的service中是可以设置Session Affinity的。例子如下:

复制代码
[root@k8s-master ~]# cat rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: helloworld-service
spec:
  replicas: 2 
  template:
    metadata:
      labels:
        weblogic-app: "helloworld"
        version: "0.1"
    spec:
      containers:
      - name: weblogichelloworld
        image: 1213-helloworld:v2
        ports:
        - containerPort: 7001
---
apiVersion: v1
kind: Service
metadata:
  name: helloworldsvc
  labels:
    weblogic-app: helloworld
spec:
  type: NodePort
  ports:
  - port: 7001
    protocol: TCP
    targetPort: 7001
    name: http
    nodePort: 30005
  selector:
    weblogic-app: helloworld
  sessionAffinity: ClientIP
复制代码

最核心就是最后那句,会基于客户端访问服务的ip进行hash运算后把同一ip的请求路由到同一个pod.这样通过nodePort方式过来的请求就不会到处分发了。

但这并不意味着通过IngressController过来的请求不会到处发,实际上在gcr.io/google_containers/nginx-ingress-controller:0.61版本就加上了session stick的功能,需要你在

创建Ingress对象的时候添加Annotation,比如:

复制代码
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dashboard-weblogic-ingress
  annotations:
    ingress.kubernetes.io/affinity: "cookie"
    ingress.kubernetes.io/session-cookie-name: "route"
    ingress.kubernetes.io/session-cookie-hash: "sha1"
spec:
  rules:
  - host: helloworld.paic.test
    http:
      paths:
      - backend:
          serviceName: helloworldsvc 
          servicePort: 7001
        path: /
复制代码

 

如何验证这个annotation已经生效了呢?这个问题我折腾了很久,因为按照文档的说法通过

curl -v http://<ingress-svc-address> -H 'Host: example.com'

kubectl  exec -n kube-system nginx-ingress-lb-303jx  -- curl -v localhost  -H'Host: helloworld.test' 

全部返回的是404,503,并没有以下的cookie

< Set-Cookie: route=dc89ae303c62a8bfce8bf32f06d27c31f0980ef7; Path=/; HttpOnly

无奈进入IngressController,查看具体的最终Nginx配置

在 /etc/nginx/nginx.conf 中。

 

 而Pod的信息是

 

 可见Nginx是绕开了Service,直接把pod的ip写入到配置文件,所以也就是Service中的Session Affinity设置应该不起作用。

但Cookie到底有没有设置成功呢,通过chrome访问网站,然后查看Cookie

 

 成功看到,验证的时候也没问题,所以应该配置生效。

最后贴一个ingress-controller的yaml

复制代码
[root@k8s-master ingress]# cat nginx-ingress-controller.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-ingress-lb
  labels:
    name: nginx-ingress-lb
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: nginx-ingress-lb
      annotations:
        prometheus.io/port: '10254'
        prometheus.io/scrape: 'true'
    spec:
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      containers:
      - image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.7
        name: nginx-ingress-lb
        readinessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
          initialDelaySeconds: 10
          timeoutSeconds: 1
        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: KUBERNETES_MASTER
            value: http://192.168.0.104:8080
        args:
        - /nginx-ingress-controller
        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
        - --apiserver-host=http://192.168.0.104:8080
复制代码
ATE测试基础——直流参数测试 芯片测试在发展过程中诞生了许多术语,初次接触的人大部分都会被绕晕。因此为方便广大读者理解,在开始介绍测试项之前,需要对测试领域的名词进行解释。还有部分较为抽象的内容,需要略作展开。DUT——Device Under Test,正在被测试的器件Pin——器件引脚,信号引脚分为输入,输出,三态和双向四类,负责与外界进行信息交互;电源引脚分为电源和地两类,结构与信号引脚不同,负责给器件内部运行和外部输出提供电平。输入:在外部信号和器件内部逻辑之间起缓冲作用的信号输入通道; 阅读详情

相关推荐

PWM(脉宽调制)技术详解:从基础到应用实践示例

PWM(脉宽调制)技术是嵌入式系统中一项重要的控制技术,通过调节脉冲宽度来实现对模拟设备的精准控制。从LED亮度到电机速度,PWM的应用场景非常广泛。对于嵌入式学习者来说,理解PWM的工作原理、掌握其配置方法,不仅能提升编程能力,还能为更多复杂系统的开发打下坚实的基础。

SpringWJN的博客 6329

Ingress session sticky

service session sticky kind: Service apiVersion: v1 metadata: name: my-service spec: selector: app: my-app ports: - name: http protocol: TCP port: 80 targetPort: 80 sessionAffinity: ClientIP sessionAffinityConfig: clientIP:

总结、分享、交流 1843

COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧)

本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。

weixin_29284657的博客 419

k8s(二)、对外服务(Traefik部署/https/session sticky使用)

前言 在上文完成k8s集群搭建的基础上k8s(一)、1.9.0高可用集群本地离线部署记录,承接上文,本文简单介绍一下k8s对外暴露服务 拓扑图: 一、k8s对外暴露服务方式介绍 1.Load Blance 目前已经有很多主流的公有云平台已经都提供基于k8s服务的组件,工作的原理本质上是k8s的服务向云平台申请一个负载均衡器来对外服务。因此这种方式只适合在云平台内部使用,这里略...

ywq935的博客 7770

WorkBuddy Skill赋能HYSYS与Comsol:AI工作台下的仿真自动化实践

AI Agent正将工业软件自动化带向新高度。在工程仿真领域,流程模拟与多物理场分析常因重复性操作而效率低下,Aspen HYSYS的批量工况调整、Comsol的参数扫描与网格重构均属此类。WorkBuddy这类AI工作台通过Skill将软件二次开发能力封装为可插拔技能包,利用HYSYS的COM/OLE接口和Comsol的Java API,实现自然语言指令到自动化执行的转变。其技术价值在于降低自动化门槛、沉淀工程经验,并支持日志审计与异常重试。在实际应用中,无论化工流程的灵敏度分析,还是激光焊接、移动网格等

weixin_29055699的博客 301

别再只调API了!深度拆解Dify文件上传的两种传参方式(sys.file vs. inputs.upload_file)

本文深度解析Dify平台文件上传的两种传参方式——sys.file与inputs.upload_file,详细对比其设计原理、技术实现及适用场景。通过代码示例和性能分析,帮助开发者在本地大模型应用中做出精准技术选型,提升文件处理效率与系统稳定性。

weixin_29063979的博客 268

彻底解决K8s会话丢失问题:ingress-nginx Sticky Session配置指南

你是否遇到过用户登录状态频繁丢失、购物车数据异常、表单提交重复的问题?在Kubernetes集群中,这些现象往往与**会话保持(Sticky Session)**配置不当有关。本文将通过3个实战步骤+2个避坑指南,帮助你在15分钟内掌握ingress-nginx控制器的会话保持方案,确保用户请求稳定路由到同一后端Pod。 ## 什么是Sticky Session(会话保持) **Sticky ...

gitblog_00704的博客 640

差分信号_差分信号的原理及其在PCB的设计

差分线是 PCB 设计中非常重要的一部分信号线,信号处理要求也是相当严谨,今天为大家介绍下差分信号的原理以及其在 PCB 设计中的处理方法。 什么是差分信号 差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相等,相位相差 180 度,极性相反。在这两根线上传输的信号就是差分...

weixin_31849185的博客 1812

Ingress Controller高可用部署

Ingress Controller 是集群流量的接入层,对它做高可用非常重要,可以基于 keepalive 实现nginx-ingress-controller 高可用

qq_759035366的博客 1664

使用petalinux做嵌入式设计开发(1)

1.创建vivado工程,建立硬件环境,最终导出hdf文件 既可以在windows系统下的vivado上编写硬件工程并导出hdf文件,也可以在linux系统下的vivado中编写硬件工程并导出hdf文件。(对于windows系统下导出的hdf文件还需要传递到linux系统下的文件夹中。) 2.以hdf硬件文件为基础创建,配置,编译,打包petalinux工程,导出linux系统所需镜像文件。 具体步骤: (0)设置环境变量 设置环境变量使得我们可以直接使用petalin...

plotup的博客 2076

Android系统修改驱动固定USB摄像头节点绑定前后置摄像头

Android系统中usb摄像头节点会因为摄像头所接的usb口不同或者usb设备识别顺序不一样而出现每次开机生成的video节点不一样的问题。由于客户app调用摄像头时,需要固定摄像头的节点。因此需要针对前面的情况做处理。

Android系统开发笔记 2250

学习笔记三十五:Ingress-controller高可用

链接:https://pan.baidu.com/s/1BP1Vr0IUxkMYqrP-MDs8vQ?链接:https://pan.baidu.com/s/1nNx9ZDHCu1stqtV7qo6bJA?链接:https://pan.baidu.com/s/18AU47-mvEMeqFS9IGUQURw?链接:https://pan.baidu.com/s/1UE81sqHEELqPQhB6lx5xEQ?参考:https://github.com/kubernetes/ingress-nginx。

weixin_43258559的博客 1730

英飞凌Tricore实战系列导读

笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。

initiallizer的博客 3791

k8s ingress详解(1)

ingress 是除了 hostport  nodeport  clusterIP以及云环境专有的负载均衡器外比较灵活的服务访问方式,官方提供了Nginx 通常情况下,服务和豆荚的IPS只有路由集群网络。在边缘路由器结束的所有流量要么丢弃或转发到别处。从概念上来说,这可能看起来像

yevvzi的博客 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Kubernetes的负载均衡问题(Nginx Ingress)

Kubernetes关于服务的暴露主要是通过NodePort方式,通过绑定minion主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式下缺陷是 Service可能有很多个,如果每个都绑定一个node主机端口的话,主机需要开放外围一堆的端口进行服务调用,管理混乱 无法应用很多公司要求的防火墙规则 理想的方式是通过一个外部的负载均衡器,绑定固定的端口,比如80,然...

weixin_30721077的博客 580

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【云原生 | Kubernetes 实战】19、K8s Ingress-Controller 高可用方案

K8s Ingress-Controller 高可用方案

GG Bond 的博客 2922

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

K8S Base: Nginx Ingress实现金丝雀发布

通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。需给服务创建2个 Ingress,其中1个常规 Ingress另1个为带固定的 annotation 的 Ingress,称为 Canary Ingress。Canary Ingress 一般代表新版本的服务,结合另外针对流量切分策略的 annotation 一起配置即可实现多种场景的金丝雀发布。表示如果请求头中包含指定的 header 名称,并且值为always。

summer_fish的专栏 2318

nginx添加Set-Cookie属性Secure和HttpOnly

问题:在https环境中,等保要求为set-cookie增加secure属性(为了安全,防止http请求时使用此cookie) 解决办法: 在nginx配置文件中可以是用proxy_cookie_path属性实现,该属性可以修改response set-cookie的path属性。如下: proxy_cookie_path / "/; Path=/; Secure; HttpOnly"; 完整的location代码: location / { proxy...

sumengnan的博客 4万+

实现Ingress-Nginx Controller高可用方案

实现Ingress-Nginx Controller高可用方案

qq_44930876的博客 2746

Kubernetes Ingress Controller的使用及高可用落地

Kubernetes Ingress Controller的使用及高可用落地 看懂本文要具备一下知识点: Service实现原理和会应用 知道反向代理原理,了解nginx和apache的vhost概念 了解service的几种类型(Nodeport、clusterip、LB) 四层和七层区别(不明白就这样去理解,七层最常见就是应用层的http,也就是url...

weixin_30681615的博客 697

Ingress 常用的10个配置(annotation)

比如在有些时候我们需要在 server 里或者 location 里添加一些参数,例如添加包体大小限制、添加跨域配置、添加自定义header、处理响应header等等。遇到这些需求的时候,我们开始怀念原生的 nginx 配置,因为那样我们可以随心所欲的修改。我们有这样的需求,官方在做这个的时候,也做了一些考虑,为了我们提供了一些配置切入点,我们可以通过配置 annotation,按照官方提供的一些规则来将我们的一些自定义配置插入进去。

Jerry00713的博客 6158

Nginx Ingress Controller原理简介及使用示例

一、概念介绍 介绍Nginx Ingress Controller之前,需要先理解三个概念。 Ingress:对集群中服务的外部访问进行管理的 API 对象,可以理解为kubernetes中一种定义从集群外部到集群内服务的HTTP/HTTPS 路由的资源类型; Ingress Controller:负责通过负载均衡器(如nginx/haproxy)来实现 Ingress中定义的路由,通常以pod形式运行; IngressClass:一种定义某个具体Ingress Controller的资..

洒满阳光的午后的博客 1万+

Ingress 负载均衡配置实战指南

在 Kubernetes 中,Ingress 的负载均衡通过 Ingress Controller 实现,支持多种负载均衡策略和高级配置。合理配置 Ingress 负载均衡是保障 Kubernetes 服务高可用性和性能的关键,建议根据业务需求选择合适的策略并定期监控优化。

sre救赎之路 1034

记一次酣畅淋漓的 K8s Ingress 排错过程(302,404,503,...)

记一次酣畅淋漓的 K8s Ingress 排错过程(302,404,503,...)

虫虫的博客 1952

Ingress-Nginx Annotations 指南:配置要点全方面解读(下)

Ingress-Nginx Annotations 指南:配置要点全方面解读(下)

虽非技冠群英首,愿与同道共长歌; 大鹏一日同风起,扶摇直上九万里; 1909

Kubernetes Ingress Controller 高可靠部署最佳实践

背景简介 在Kubernetes集群中,Ingress是授权入站连接到达集群服务的规则集合,为您提供七层负载均衡能力,您可以通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。作为集群流量接入层,Ingress Controller的高可用性显得尤为重要,今天我们主要探讨如何部署一套高性能高可靠的Ingress C...

weixin_34217711的博客 551
上一篇: Heapster Metrics
下一篇: Glusterfs的常用命令
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值