Azure AKS 部署

本文深入探讨了如何根据 Azure 和 AKS 的具体特性来调整您的 Bitwarden 自托管 Helm Chart 部署

要求

在继续安装之前,请确保满足以下要求:

无根模式要求

Bitwarden 会在启动时检测您的环境是否限制了用户容器的运行身份,并在检测到限制时自动以无根模式启动部署。要成功以无根模式部署,需满足以下两个选项之一:

circle-info

虽然 Microsoft 要求 SQL 容器必须以 root 身份运行,但容器启动后会在执行应用程序代码前逐步降级为非 root 用户。

入口控制器

本部分介绍了可在 Azure AKS 部署中使用的入口控制器的 2 个选项:

  • 使用 Azure nginx 入口控制器,可选择与 Azure DNS 集成以进行区域管理,并与 Azure Key Vault 集成以进行证书颁发。

  • 使用 Azure 应用程序网关入口控制器 (AGIC),在应用程序负载均衡器后面部署 Bitwarden。

Azure nginx

Azure 提供了一个 nginx 入口控制器选项,该选项支持应用程序路由附加组件,并且可以选择与 Azure DNS 集成以进行区域管理,以及与 Azure Key Vault 集成以进行证书颁发。如果您使用此选项:

1、创建一个「托管」的 nginx 入口控制器arrow-up-right

2、在 my-values.yaml 文件中,将 generic.ingress.className: 设置为 webapprouting.kubernetes.azure.com

3、在 my-values.yaml 文件中,取消注释以下值:

完成后,您可以使用命令 kubectl get ingress -n bitwarden 获取分配给 Azure nginx 入口控制器的 IP 地址。部署后可能需要几分钟时间,您的 IP 地址才会显示。

Azure 应用程序网关

然而,Azure 客户可能更倾向于使用 Azure 应用程序网关作为他们 AKS 集群的入口控制器,以便将 Bitwarden 部署在应用程序负载均衡器之后。

安装图表之前

如果您倾向于使用此选项,在安装图表之前,您必须:

1、为您的群集启用 Azure 应用程序网关入口控制器arrow-up-right

2、更新您的 my-values.yaml 文件,特别是 general.ingress.className:general.ingress.annotations:general.ingress.paths:

3、如果您打算使用提供的 Let's Encrypt 示例作为 TLS 证书,请将此处链接的脚本中的 spec.acme.solvers.ingress.class: 更新为 "azure/application-gateway"

4、在 Azure 门户中,为应用程序网关创建一个空的重写集:

  1. 转到 Azure 门户中的负载均衡应用程序网关,选择您的应用程序网关。

  2. 选择重写选项卡。

  3. 选择 ✚重写集按钮。

  4. 将名称设置为 my-values.yamlappgw.ingress.kubernetes.io/rewrite-rule-set: 指定的值,在此示例中为 bitwarden-ingress

  5. 选择下一步然后选择创建

安装图表之后

安装图表之后,您还需要为重写集创建规则:

1、重新打开您在安装图表之前创建的空重写集。

2、选择所有以 pr-bitwarden-self-host-ingress... 开头的路由路径,取消选择任何不以该前缀开头的路径,然后选择下一步

3、选择 ✚添加重写规则按钮。您可以为重写规则指定任意名称和任意顺序。

4、添加以下条件:

  • 要检查的变量类型:服务器变量

  • 服务器变量:uri_path

  • 区分大小写:否

  • 运算符:等于 (=)

  • Pattern to match^(\/(?!admin)(?!identity)(?!sso)[^\/]*)\/(.*)

5、添加以下操作:

  • 重写类型:URL

  • 操作类型:设置

  • 组件:URL 路径

  • URL 路径值/{var_uri_path_2}

  • 重新评估路径图:未选中

6、选择创建

创建存储类

部署需要使用您提供的支持 ReadWriteManyarrow-up-right 的共享存储类。以下示例是一个可以在 Azure Cloud Shell 中运行的脚本,用于创建满足要求的 Azure 文件存储类。

triangle-exclamation

您必须在 my-values.yaml 中设置 sharedStorageClassName 的值,值应与您给予类的名称相同,在本例中为:

使用 Azure Key Vault CSI 驱动程序

部署需要使用 Kubernetes secrets 对象为您的部署设置敏感值。虽然 kubectl create secret 命令可用于设置机密,但 Azure 客户可能更倾向于使用 Azure Key Vault 和 AKS Secrets Store CSI Driver。

circle-check

1、使用以下命令为您的集群添加 Secrets Store CSI Driver 支持:

该插件创建了一个用户分配的托管身份,您可以用它来进行密钥库的身份验证,然而您还有其他选择来进行身份访问控制。如果您使用已创建的用户分配的托管身份,您需要显式地为其分配 Secret > Get 的访问权限(点击这里了解arrow-up-right)。

2、创建一个 SecretProviderClass,就像以下示例中所示。请注意,这个示例包含了必须替换的 <REPLACE> 占位符,其取决于您使用的是附带的 SQL pod 还是使用您自己的 SQL 服务器。

3、使用下列命令在密钥库中设置所需的机密值:

triangle-exclamation

4、在您的 my-values.yaml 文件中,设置以下值:

  • secrets.secretName :将此值设置为 SecretProviderClass 中定义的 secretName 值。

  • secrets.secretProviderClass :将此值设置为 SecretProviderClass 中定义的 metadata.name 值。

最后更新于