【问题标题】:nginx-ingress session affinity behavior when ingress maps to 2 different ports on the same service当入口映射到同一服务上的 2 个不同端口时的 nginx-ingress 会话亲和行为
【发布时间】:2021-10-21 12:19:38
【问题描述】:

假设我有一个映射到具有 2 个容器的 pod 的服务,1 个公开端口 8080,另一个公开端口 8081。该服务公开两个端口。入口使用 nginx-ingress,并具有基于 cookie 的会话亲和性注释。它有2个路径,1个是/映射到8080端口,另一个是/static映射到同一个服务的8081端口。无论路径是/ 还是/static,会话亲和性是否会以这样一种方式工作,即来自同一个客户端的所有请求都将发送到同一个 pod?

以下是完整配置:

入口

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  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"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
  rules:
    - host: test.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-service
                port:
                  number: 8080
          - path: /static
            pathType: Prefix
            backend:
              service:
                name: test-service
                port:
                  number: 8081

服务

apiVersion: v1
kind: Service
metadata:
  name: test-service
spec:
  type: ClusterIP
  selector:
    app: test-pod
  ports:
    - name: container1
      port: 8080
      targetPort: 8080
    - name: container2
      port: 8081
      targetPort: 8081

部署

apiVersion: apps/v1
kind: Deployment
...
spec:
  ...
  template:
    metadata:
      labels:
        app: test-pod
    spec:
      containers:
        - name: container1
          image: ...
          ports:
            - containerPort: 8080
        - name: container2
          image: ...
          ports:
            - containerPort: 8081

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    我设法测试了您的配置。

    实际上,此关联注释仅适用于 / 路径 - 这就是 nginx ingress works 的方式 - 要使关联注释适用于两条路径,您需要创建两个入口定义:

    路径/的入口:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-ingress-one
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/affinity: "cookie"
        nginx.ingress.kubernetes.io/affinity-mode: "balanced"
        nginx.ingress.kubernetes.io/session-cookie-name: "route-one"
        nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
        nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    spec:
      rules:
        - host: <your-domain>
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: test-service
                    port:
                      number: 8080
    

    路径/static的入口:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-ingress-two
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/affinity: "cookie"
        nginx.ingress.kubernetes.io/affinity-mode: "balanced"
        nginx.ingress.kubernetes.io/session-cookie-name: "route-two"
        nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
        nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    spec:
      rules:
        - host: <your-domain>
          http:
            paths:
              - path: /static
                pathType: Prefix
                backend:
                  service:
                    name: test-service
                    port:
                      number: 8081
    

    回到您的主要问题 - 因为我们正在创建两个不同的入口,使用两个不同的 cookie,它们彼此独立。他们每个人都会选择他的“豆荚”来“坚持”,而不管对方选择了什么。我进行了研究,但找不到任何有关将其设置为使其按您想要的方式工作的信息。 简要回答您的问题:

    无论路径是/ 还是/static,会话亲和性是否会以这样一种方式工作,即来自同一个客户端的所有请求都将发送到同一个 pod?

    没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多