如何将 HTTP 基本身份验证添加到 Kubernetes NGINX Ingress

如何将 HTTP 基本身份验证添加到 Kubernetes NGINX Ingress,第1张

如何将 HTTP 基本身份验证添加到 Kubernetes NGINX Ingress


NGINX Ingress 是一种流行的 Kubernetes 入口控制器,用于将流量路由到您的集群中。标准Ingress 资源可让您将 HTTP 请求映射到 Kubernetes 服务。以下是如何使用 HTTP 基本身份验证保护您的路由。

创建 HTPasswd 文件

htpasswd在处理 Kubernetes 配置之前,请确保您有一个可用的文件。您可以htpasswd在终端中创建一个新的单个用户:

apt install apache2-utils
htpasswd -c auth example-user

系统会提示您输入密码。auth将在您的工作目录中创建一个名为的新文件。

接下来,您需要对凭证字符串进行 base64 编码,以便将其用作 Kubernetes 机密中的值:

cat auth | base64

将 base64 编码的字符串复制到剪贴板。我们将在下一节中使用它来创建一个包含您的凭据的 Kubernetes 机密。

添加 Kubernetes Secret

NGINX Ingress 将htpasswd文件作为Kubernetes 机密引用。文件的内容必须存储在auth一个Opaque秘密的密钥中。Kubernetes 也有一个内置的basic-auth秘密类型,但这不适用于 NGINX Ingress。

创建一个新的秘密清单并使用 Kubectl将其应用到您的集群:

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: htpasswd
data:
  auth: 

添加您的 base64 编码htpasswd文件作为auth密钥的值。

修改你的入口

NGINX Ingress 支持多个自定义注释,让您可以将额外的行为附加到 Ingress 资源。要使用 HTTP 基本身份验证,您需要设置auth-type注释并提供对您的秘密的引用。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: htpasswd
    nginx.ingress.kubernetes.io/auth-realm: "Enter your credentials"
spec:
  rules:
    - host: example.com
      http:
        paths:
         - path: /
           backend:
            serviceName: example-service
            servicePort: 80

这三个注释将 NGINX 配置为要求对与您的 Ingress 资源匹配的每个请求进行身份验证。该basic认证类型用于从凭证htpasswd先前创建的秘密。该auth-realm注释定义显示时,系统会提示他们输入凭据的用户信息。

与此 Ingress 匹配的请求现在需要用户登录才能继续。身份验证质询在大多数 Web 浏览器中显示为d出对话框。输入提供给htpasswd命令的用户名和密码以验证您自己。

替代秘密形式

上面显示的秘密使用了该auth-file格式。这意味着它有一个auth包含来自htpasswd命令的base64 编码输出的字段。

NGINX Ingress 还支持另一种形式,称为auth-map. 在此变体中,该auth字段由一组密钥替换,每个密钥为单个用户提供密码。

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: htpasswd
data:
  user1: 
  user2: 

将您的用户名添加到文件中,然后用于htpasswd生成散列凭据。检查htpasswd输出;它将具有以下格式:

username:

获取密码部分,使用base64命令对其进行编码,然后将结果添加到您的 Kubernetes 密钥中。

NGINX 将接受来自机密中定义的任何有效用户名和密码组合的登录。这种方法可以更轻松地设置多个用户帐户,并帮助您准确查看谁有权访问。

更高级的身份验证

如果您需要更多控制但想要类似直接的设置体验,NGINX Ingress 可以与外部身份验证提供程序集成。使用外部身份验证提供程序会将用户重定向到该站点,然后他们才能访问 Ingress 后面的服务。这使您可以在不涉及后端代码的情况下强制执行完整的身份验证例程。

该nginx.ingress.kubernetes.io/auth-url注释定义了要使用的外部身份验证服务的 URL。Kubernetes 会将每个传入的请求转发给服务。只有当服务返回200 OK状态代码时,才会向用户授予访问权限。然后正常流程继续请求进入您的 Kubernetes 服务。

当 auth 服务指示错误时,用户将被重定向到nginx.ingress.kubernetes.io/auth-signinURL指示的页面。这将在成功的身份验证尝试后接收要重定向回的原始 URL,作为使用auth-signin-redirect-param注释定义的 URL 参数。

其他几个注释可让您在与身份验证平台通信时调整 NGINX 的行为。您可以更改用于发出身份验证请求的 HTTP 方法、添加其他标头以及为身份验证响应设置缓存。如果用户在短时间内向您的服务发出多个请求,后者可确保您不会持续访问外部平台。

概括

HTTP 基本身份验证是保护网站的最简单方法。它非常适用于内部系统和临时站点,在这些站点中,您需要处理一小部分用户并且不需要集中的凭据管理。

通过在 Kubernetes 密钥中提供凭据并在 Ingress 资源上设置注释,将基本身份验证与 NGINX Ingress 结合使用。在实际用例中,您不应将凭据硬编码到 Kubernetes 清单中。在将资源应用到集群时,可以使用 Helm或CI/CD 系统来安全地提供值。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5684190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存