【问题标题】:K8s -> nginx Ingress: SSOK8s -> nginx 入口:SSO
【发布时间】:2019-08-12 03:31:43
【问题描述】:

我有一个具有 HTTP 基本身份验证的服务。在它前面我有 nginx Ingress,它也有 basic-auth。如何在使用 Ingress 登录后将 Authorization 标头与凭据附加,以实现单点登录?

这是我的 Ingress 的配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/auth-realm: Authentication Required
    nginx.ingress.kubernetes.io/auth-secret: kibana-user-basic-auth
    nginx.ingress.kubernetes.io/auth-type: basic
  name: kibana-user
  namespace: {{.Release.Namespace}}
spec:
  tls:
  - secretName: kibana-tls
    hosts:
    - {{.Values.ingress.user.host}}
  rules:
  - host: {{.Values.ingress.user.host}}
    http:
      paths:
      - backend:
          serviceName: kibana-logging
          servicePort: {{ .Values.kibana.service.internalPort }}
        path: /

【问题讨论】:

    标签: authentication kubernetes single-sign-on nginx-ingress


    【解决方案1】:

    我猜你可以在 nginx.ingress.kubernetes.io/auth-response-headers annotation 中传播 Authorization 标头:

    nginx.ingress.kubernetes.io/auth-response-headers: Authorization

    或者,您可以通过configuration snippet 注释在目标入口位置内应用proxy_set_header 来实现相同的方法,如here 所述:

    annotations:
        nginx.ingress.kubernetes.io/configuration-snippet: |
            proxy_set_header Authorization "Basic base64 encode value";
    

    【讨论】:

    • 我认为如果您希望 Ingress 从查询中读取标头,则使用这些注释。但在我的情况下,身份验证在 Ingress 中。我想让 Ingress 将授权标头传播到后端服务。换句话说,当 Ingress 向后端服务发送请求时,我希望授权标头在此请求中
    • 根据 Nginx 入口文档nginx.ingress.kubernetes.io/auth-response-headers 注释用于将授权标头传递给后端服务。
    【解决方案2】:

    您可以使用注解nginx.ingress.kubernetes.io/configuration-snippet: proxy_set_header Authorization $http_authorization;Authorization 标头转发到后端服务。

    Ingress 资源应如下所示

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/auth-realm: Authentication Required
        nginx.ingress.kubernetes.io/auth-secret: kibana-user-basic-auth
        nginx.ingress.kubernetes.io/auth-type: basic
        nginx.ingress.kubernetes.io/configuration-snippet: "proxy_set_header Authorization $http_authorization;"
      name: kibana-user
      namespace: {{.Release.Namespace}}
    spec:
      tls:
      - secretName: kibana-tls
        hosts:
        - {{.Values.ingress.user.host}}
      rules:
      - host: {{.Values.ingress.user.host}}
        http:
          paths:
          - backend:
              serviceName: kibana-logging
              servicePort: {{ .Values.kibana.service.internalPort }}
            path: /
    

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 2021-05-16
      • 2018-07-17
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多