【问题标题】:Kubernetes nginx ingress 0.22 not respecting cookie affinity annotation?Kubernetes nginx 入口 0.22 不尊重 cookie 亲和性注释?
【发布时间】:2019-03-11 23:28:09
【问题描述】:

我们最近升级到 nginx-ingress 0.22。在此升级之前,我的服务使用旧的命名空间 ingress.kubernetes.io/affinity: cookie 并且一切都按预期工作。但是,在升级到 0.22 后,亲和力停止应用于我的服务(我在 nginx.conf 中的任何地方都看不到 sticky)。

我查看了文档并将命名空间更改为nginx.ingress.kubernetes.io,如in this example 所示,但没有帮助。

我可以查看一些调试日志来显示配置解析/构建过程吗?我的猜测是其他一些设置阻止了它的工作(我无法想象 k8s 团队发布的版本完全破坏了这个功能),但我不确定那可能是什么。

k8s 仪表板显示的我的入口配置如下:

  "kind": "Ingress",
  "apiVersion": "extensions/v1beta1",
  "metadata": {
    "name": "example-ingress",
    "namespace": "master",
    "selfLink": "/apis/extensions/v1beta1/namespaces/master/ingresses/example-ingress",
    "uid": "01e81627-3b90-11e9-bb5a-f6bc944a4132",
    "resourceVersion": "23345275",
    "generation": 1,
    "creationTimestamp": "2019-02-28T19:35:30Z",
    "labels": {
    },
    "annotations": {
      "ingress.kubernetes.io/backend-protocol": "HTTPS",
      "ingress.kubernetes.io/limit-rps": "100",
      "ingress.kubernetes.io/proxy-body-size": "100m",
      "ingress.kubernetes.io/proxy-read-timeout": "60",
      "ingress.kubernetes.io/proxy-send-timeout": "60",
      "ingress.kubernetes.io/secure-backends": "true",
      "ingress.kubernetes.io/secure-verify-ca-secret": "example-ingress-ssl",
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/affinity": "cookie",
      "nginx.ingress.kubernetes.io/backend-protocol": "HTTPS",
      "nginx.ingress.kubernetes.io/limit-rps": "100",
      "nginx.ingress.kubernetes.io/proxy-body-size": "100m",
      "nginx.ingress.kubernetes.io/proxy-buffer-size": "8k",
      "nginx.ingress.kubernetes.io/proxy-read-timeout": "60",
      "nginx.ingress.kubernetes.io/proxy-send-timeout": "60",
      "nginx.ingress.kubernetes.io/secure-verify-ca-secret": "example-ingress-ssl",
      "nginx.ingress.kubernetes.io/session-cookie-expires": "172800",
      "nginx.ingress.kubernetes.io/session-cookie-max-age": "172800",
      "nginx.ingress.kubernetes.io/session-cookie-name": "route",
      "nginx.org/websocket-services": "example"
    }
  },
  "spec": {
    "tls": [
      {
        "hosts": [
          "*.example.net"
        ],
        "secretName": "example-ingress-ssl"
      }
    ],
    "rules": [
      {
        "host": "*.example.net",
        "http": {
          "paths": [
            {
              "path": "/",
              "backend": {
                "serviceName": "example",
                "servicePort": 443
              }
            }
          ]
        }
      }
    ]
  },
  "status": {
    "loadBalancer": {
      "ingress": [
        {}
      ]
    }
  }
}

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    当我使用 Nginx Ingress 0.22 版测试粘性会话亲和性时,我可以保证它工作得很好。然后,当我在寻找您的配置时,我将通配符主机 host: "*.example.net" 替换为 host: "stickyingress.example.net" 只是为了忽略通配符,它​​再次正常工作。 所以经过一番搜索,我从这个issue

    Ingress 规范不支持通配符主机名(仅 SSL 通配符证书)

    甚至为 NGINX Ingress 控制器版本打开了这个问题: 0.21.0

    【讨论】:

    • 啊,感谢您的发现。虽然非常不幸。猜猜我将不得不做那个问题中提到的“部署一个单独的入口实例”解决方案......
    猜你喜欢
    • 2020-07-26
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2020-08-14
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多