k8s: 配置ingress的会话亲和

Ingress会话亲和,又称会话保持,粘性会话,指同一客户端的请求在一定时间内会被ingress路由到相同的pod处理. 本文控制器使用的是ingress-nginx

  • ingress默认的负载均衡策略是轮询, 验证如下

    1. 使用浏览器连续访问9次ingress

    2. 查看ingress日志, 可看到9次请求被轮询负载到不同pod处理

  • 配置会话亲和

    1. 修改ingress, 增加如下内容

      nginx.ingress.kubernetes.io/affinity: cookie # 实现会话亲和的方式,目前只支持cookie
      nginx.ingress.kubernetes.io/affinity-mode: persistent  # 默认是balanced平衡的,伸缩应用时会重新分配一些session, 以确保每个pod处理的会话数均衡;persistent持续的, 保持最大限度的会话亲和
      nginx.ingress.kubernetes.io/session-cookie-hash: sha1  # 
      nginx.ingress.kubernetes.io/session-cookie-name: awesome-java  # 自定义cookie名字, 默认为INGRESSCOOKIE
      

    2. 使用浏览器连续访问9次ingress

    3. 查看ingress日志, 可看到9次请求被负载到同一个pod处理

    4. 使用curl -i访问可看到awesome-java的cookie

  • 其他如cookie的有效时间等设置, 可参考ingress-nginx官方文档:https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes Ingress是一个控制器,它允许以一致的方式暴露服务并将流量路由到不同的服务,它可以在同一个IP地址和同一个端口上处理多个规则,这些规则定义了如何将入站请求路由到不同的服务或URI路径。 以下是如何配置Ingress规则的步骤: 1. 确认是否已经安装和启用了Ingress控制器。使用kubectl命令来查看是否有ingress-controller pod运行。 2. 在kubernetes集群中创建一个Ingress对象。这一步需要指定Ingress对象的metadata和spec字段。metadata中必须要指定一个名称,spec中必须要指定规则列表(rules),每个规则中需要定义host和对应的http(s)路径。 例如: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: example.com http: paths: - path: /api/v1 pathType: Prefix backend: service: name: api-service port: name: http ``` - host:用于匹配请求的主机名。 - http:HTTP协议规则,还有一个TLS协议规则,需要使用secret配置。HTTP和TLS规则不能同时出现。 - paths:一组定义要匹配请求和转发服务的路径规则。 - path:用于匹配传入请求的路径前缀。 - backend:后端服务的配置。 3. 创建服务对象 ```yaml apiVersion: v1 kind: Service metadata: name: api-service namespace: default spec: selector: app: api ports: - name: http port: 80 targetPort: 8080 ``` - 应该根据实际情况配置targetPort和selector字段。targetPort是要暴露的端口,selector指定要将请求转发到哪个Pod。 4. 部署后端服务的Pod ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: api spec: selector: matchLabels: app: api template: metadata: labels: app: api spec: containers: - name: api image: my-api-image ports: - containerPort: 8080 ``` - deployment对象需要指定pod的镜像和容器端口。 5. 应用ingress和service和deployment. ```bash kubectl apply -f your-configuration.yaml ``` 这些规则定义了如何将入站http请求路由到不同的Kubernetes服务。可以使用类似于nginx-ingress等的Ingress控制器来处理这些规则并负载均衡流量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值