GKE 入口传递 cookie 作为 header

GKE ingress pass cookie as header

我想在 google Cloud GKE 1.19.7-gke.1302 上使用一些 kubernetes ingress(与 ingress 类型无关),以及 nginx-ingress-0.8 部署的 nginx ingress .0 helm chart,我需要获取一个 cookie 并在以后使用它来对我们的服务进行身份验证。当我使用 nginx 作为部署时它工作,但是当我使用 nginx ingress 时它似乎忽略了注释。

我尝试将此配置片段用于 nginx 入口,它适用于 nginx 部署但不适用于入口:

nginx.ingress.kubernetes.io/configuration-snippet: |
  proxy_set_header "Authorization" "Basic $cookie_myToken";  

这是我的整个入口 yaml:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-nginx-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    # enable backend redirections
    kubernetes.io/tls-acme: "true"
    # enable stickiness
    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/configuration-snippet: |
      proxy_set_header "Authorization" "Basic $cookie_myToken";  
spec:
  tls:
  - secretName: supersmart-tls
    hosts: 
    - "test.com"
  defaultBackend:
    service:
      name: supersmart-nodeport
      port:
        number: 80
  rules:
    - host: "test.com"
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: my-nodeport
                port:
                  number: 80

有什么想法吗?

发布此答案是为了在 comment section.

中发现并解决问题时使其更加明显

此问题的根本原因是 Nginx Ingress Controller 配置错误。

在 OP 的设置 Nginx Ingress Controller 中,使用了 v.0.8.0。将 Nginx IngressNginx Ingress Documentation 重新部署到最新版本 (v0.44.0) 后,它开始正常工作。

Yes, reinstalling nginx ingress to the latest version with helm solved the problem.