如何解决nginx 入口使用 k8s 秘密作为 HTTP 标头
我使用 Nginx ingress 的设置如下:
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)
解决方法
您可以使用注释 nginx.ingress.kubernetes.io/auth-proxy-set-headers
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#external-authentication 来指代包含标题的 ConfigMap
。
您可以在此处找到示例 https://kubernetes.github.io/ingress-nginx/examples/customization/custom-headers
,如何在不硬编码入口定义中的 auth-header 的情况下定义入口?
开发自己的控制器。一个如何做的例子是here。
如果您不想将其附加到 Ingress 实体 - 必须有人这样做。
自己的控制器可以观察现有的入口(通过一些你的标签过滤)并更新入口清单:附加你想要的注释。
内省端点(解码 JWT 令牌并将其附加到代理到其他微服务的原始请求)没有暴露在集群之外,但我希望更加安心,因为知道端点,即使在集群中,也只响应到经过身份验证的请求(auth-header 是一个 base64 编码的字符串,其中包含一个客户端密钥和客户端 ID)
如果您想将您的 JWT 令牌隐藏到 Secret - 使用 vanilla Nginx IngressController 没有简单的方法可以做到。 The source 说:
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(甚至 make the class Default 用于集群)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。