Azure AKS 部署
对应的官方文档地址
本文将指导您使用 Azure 和 AKS 的特定功能来修改您的 Bitwarden 自托管 Helm Chart 部署。
要求
在继续安装之前,请确保满足以下要求:
已安装 kubectl。
已安装 Helm 3。
您拥有 SSL 证书和密钥,或者可以通过证书提供商创建 SSL 证书和密钥。
您拥有 SMTP 服务器或可以访问云 SMTP 提供商。
一个支持 ReadWriteMany 的存储类。
您有一个从 https://bitwarden.com/host 获取到的安装 ID 和密钥。
无根模式要求
Bitwarden 会在启动时检测您的环境是否限制了用户容器的运行身份,并在检测到限制时自动以无根模式启动部署。要成功以无根模式部署,需满足以下两个选项之一:
部署外部 MSSQL 数据库,而不是 Helm 图表中默认包含的 SQL 容器。
使用服务账户、pod 安全上下文或其他方法为包含的 SQL 容器分配高级权限。
入口控制器
本部分介绍了可在 Azure AKS 部署中使用的入口控制器的 2 个选项:
使用 Azure nginx 入口控制器可选择与 Azure DNS 集成以进行区域管理,并与 Azure Key Vault 集成以进行证书颁发。
使用 Azure 应用程序网关入口控制器 (AGIC) 在应用程序负载均衡器后面部署 Bitwarden。
Azure nginx
Azure 提供了一个 nginx 入口控制器选项,该选项支持应用程序路由插件,并且可以选择与 Azure DNS 集成以进行区域管理,以及与 Azure Key Vault 集成以进行证书颁发。如果您使用此选项:
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 集群的入口控制器。
安装图表前
如果您喜欢这个选项,在安装图表之前,您必须:
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 门户中为应用程序网关创建一个空的重写集:
转到 Azure 门户中的负载均衡 → 应用程序网关,选择您的应用程序网关。
选择重写选项卡。
选择重写集按钮。
在此示例中,将名称设置为
my-values.yaml中appgw.ingress.kubernetes.io/rewrite-rule-set:指定的值,即bitwarden-ingress。选择下一步然后选择创建。
安装图表后
安装图表之后,您还需要为重写集创建规则:
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、选择创建。
创建存储类
部署需要使用您提供的支持 ReadWriteMany 的共享存储类。以下示例是一个可以在 Azure Cloud Shell 中运行的脚本,用于创建满足要求的 Azure 文件存储类。
以下是一个说明性的示例,请根据您自己的安全要求分配权限。
您必须在 my-values.yaml 中设置 sharedStorageClassName 的值,值应与您给予类的名称相同,在本例中为:
使用 Azure Key Vault CSI 驱动程序
部署需要使用 Kubernetes secrets 对象为您的部署设置敏感值。虽然 kubectl create secret 命令可用于设置机密,但 Azure 客户可能更倾向于使用 Azure Key Vault 和 AKS Secrets Store CSI Driver。
这些说明假设您已经设置了 Azure Key Vault。如果没有,请立即创建一个。
1、使用以下命令为您的集群添加 Secrets Store CSI Driver 支持:
该插件创建了一个用户分配的托管身份,您可以用它来进行密钥库的身份验证,然而您还有其他选择来进行身份访问控制。如果您使用已创建的用户分配的托管身份,您需要显式地为其分配 Secret > Get 的访问权限(点击这里了解)。
2、创建一个 SecretProviderClass,就像以下示例中所示。请注意,这个示例包含了必须替换的 <REPLACE> 占位符,其取决于您使用的是附带的 SQL pod 还是使用您自己的 SQL 服务器。
3、使用下列命令在密钥库中设置所需的机密值:
此示例将命令记录到您的 shell 历史记录中。可以考虑使用其他方法来安全地设置机密。
4、在您的 my-values.yaml 文件中,设置以下值:
secrets.secretName:将此值设置为 SecretProviderClass 中定义的secretName值。secrets.secretProviderClass:将此值设置为 SecretProviderClass 中定义的metadata.name值。
最后更新于