[英]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.