当前位置: 首页 > 知识库问答 >
问题:

使用会话亲和力(Cookies)与SSL直通在NGINX-入口

狄珂
2023-03-14

TL;DR:我想在nginx入口控制器上通过SSL passthrough在K8s中设置基于cookie的会话关联性——可以这样做吗?

嘿所有人,

我有一个正在运行的Azure Kubernetes服务(AKS)(1.11.3),并配置了NGINX入口控制器,将请求路由到我的应用程序的ClusterIP服务(该应用程序至少运行两个pod)。

我已经成功地在入口控制器上配置了SSL直通,以便TLS在Pod终止,因此我可以使用HTTP2(如本文所述)。现在我想设置会话亲和(使用Cookies),以便连接路由到相同的Pod以进行有状态行为(登录到应用程序)。

为此,我尝试在入口对象上使用以下注释:

nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"

但是,我没有看到第一个请求返回的“路由”cookie。我已经解决了这里描述的问题,并确保入口设置正确。然后我在文档中发现了这条消息:

由于SSL直通在OSI模型(TCP)的第4层而不是第7层(HTTP)上工作,因此使用SSL直通会使入口对象上设置的所有其他注释无效。

问:这是否意味着将会话关联与SSL传递一起使用是不可能的?在这种情况下,入口将无法识别连接/cookie(因为它是SSL加密的),并将其指向之前关联的pod?

共有1个答案

徐景明
2023-03-14

简而言之:不,这是不可能的。第4层不知道什么是超文本传输协议,它只是看到字节来回流动。你可以根据ip地址建立亲和力,只是不使用cookie,因为它需要第7层代理解决方案。根据您的情况,您可以在第7层运行一个代理,该代理能够解密流量,然后用另一个证书对其加密,供内部使用。所有的有效负载(例如减去SNI)都没有按照SSL加密,这意味着为了对cookie进行某种关联,代理需要在检查数据之前解密数据。

 类似资料:
  • 第四章 会话与 Cookies 本章主要讨论会话和有状态的Web应用的内在风险。你会首先学习状态、cookies、与会话;然后我会讨论关于cookie盗窃、会话数据暴露、会话固定、及会话劫持的问题及防范它们的方法。 正如大家知道的,HTTP是一种无状态的协议。这说明了两个HTTP请求之间缺乏联系。由于协议中未提供任何让客户端标识自己的方法,因此服务器也就无法区分客户端。 虽然HTTP无状态的特性还

  • 我正在通过helm在minikube运行nginx ingress controller,通过查看nginx ingress controller pod的日志,我可以看到控制器中启用了SSL直通。 在内部,我在19000端口上暴露了一个HTTPS REST API服务。我希望客户端和k8s内运行的服务之间有相互的TLS,所以我试图在启用SSL直通的情况下配置我的入口,但是当我在入口上将nginx

  • OpenShift容器平台3.11 假设设置在同一命名空间中具有一个客户端 Pod 和三个相等的服务器 Pod。服务器 Pod 可通过以下服务获得: 声明,只要客户端具有相同的 IP,其请求就会转发到同一个服务器 pod(除非达到超时秒数)。这种设置按预期工作了几个月,直到突然间请求分布在两个服务器 Pod 之间。重新启动客户端 Pod 暂时解决了该问题,并且请求仅在一段时间内转发到一个服务器 P

  • 我有一个JavaSpring Boot Application,我已经将服务器配置为在SSL上运行,这是强制性的。 我已经为我的域创建了一个证书从LetsEncrypt证书,并通过运行为keystore创建了一个p12文件 我想用Ingress Nginx控制器在Kubernetes上公开它,所以我创建了一个秘密 我已经部署了应用程序,可以看到部署文件,当我将本地8443端口转发到其服务的8443

  • 我试图在我的应用程序上使用SSL,使用express和nginx运行socket.io,但我无法使其工作。我已经做了我的研究,但我发现的都不起作用。 我一直有错误:ERR_CONNECTION_CLOSED在客户端没有http状态代码。 我做错了什么?

  • 我已将AWS ACM提供的SSL证书附加到NLB。NLB将请求转发到nginx入口。Nginx给我以下错误。。我在nginx入口中设置了以下注释。 nginx.ingress.kubernetes.io/force-ssl-redirect: false nginx.ingress.kubernetes.io/ssl-redirect: false 我在运行在NLB后面的nginx入口服务中设置了