繁体   English   中英

nginx 入口使用 k8s 密钥作为 HTTP header

[英]nginx ingress use k8s secret as HTTP header

我正在使用 nginx 入口,设置如下:

nginx.ingress.kubernetes.io/auth-url: http://api/v1/introspect
nginx.ingress.kubernetes.io/auth-method: POST
nginx.ingress.kubernetes.io/auth-response-headers: X-User-Auth
nginx.ingress.kubernetes.io/auth-snippet: |
  proxy_set_header  auth-header "authheaderhere==";

我的问题很简单,但不确定答案是否是:

如何在不硬编码入口定义中的auth-header的情况下定义入口?

自省端点(解码 JWT 令牌并将其附加到代理到其他微服务的原始请求)没有暴露在集群外部,但我希望知道端点即使在集群中也只响应经过身份验证的请求,让我更加安心(auth-header 是一个 base64 编码字符串,其中包含客户端密码和客户端 ID)

You can use the annotation nginx.ingress.kubernetes.io/auth-proxy-set-headers https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#external-authentication referring to包含标头的ConfigMap

在这里您可以找到一个示例https://kubernetes.github.io/ingress-nginx/examples/customization/custom-headers

如何在不硬编码入口定义中的 auth-header 的情况下定义入口?

开发自己的 controller。 如何做到这一点的一个例子是here

如果您不想将其附加到 Ingress 实体 - 必须有人这样做。

自己的 controller 可以观看现有的入口(由您的一些标签过滤)并更新入口清单:附加您想要的注释。

自省端点(解码 JWT 令牌并将其附加到代理到其他微服务的原始请求)没有暴露在集群外部,但我希望知道端点即使在集群中也只响应经过身份验证的请求,让我更加安心(auth-header 是一个 base64 编码字符串,其中包含客户端密码和客户端 ID)

如果您想将 JWT 令牌隐藏到 Secret - 使用 vanilla Nginx IngressController 没有简单的方法。 消息来源说:

nginx.ingress.kubernetes.io/auth-snippet : <Auth_Snippet>指定一个自定义片段与外部身份验证一起使用,例如

即只是您可以包含的 nginx 配置的示例,无需额外的转换。

但是如果你可以部署额外的 IngressController 实例,你可以在那里使用global-auth-snippet参数。

将您的代码段添加到 Nginx 的 ConfigMap。 然后创建一些IngressClass并将kubernetes.io/ingress.class=my_ingress_class_name注释添加到您的 Ingress (甚至将 class 设为集群的默认值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM