问题描述
在部署流水线中使用 ArgoCD 时,希望能够配置 ArgoCD 访问 Azure Repos。用户目前有几个理论上的想法,但都存在问题。用户的环境如下:
– Azure DevOps Services
– Azure Cloud
– 使用强大的服务主体连接运行流水线
想法 #1
1. 流水线部署 AKS 集群、AAD Pod Identity 和 Argo CD。
2. 流水线为 Argo CD 服务配置托管标识。
3. 流水线将 ArgoCD 托管标识添加为 Azure Repos 的用户。
问题 – 找不到将托管标识添加为 Azure Repos 用户的方法。
想法 #2
1. 流水线部署 AKS 集群、Argo CD 并生成 SSH 公钥/私钥。
2. 流水线使用 Azure DevOps Services 注册公共 SSH 密钥。
3. Argo CD 将使用生成的私钥以流水线账户的身份访问 Azure DevOps。
问题 – Azure DevOps Services 没有 REST API 来注册公共 SSH 密钥。另一个问题是我们需要管理 SSH 私钥的存储(可以是 terraform 远程状态或 Azure KV 或两者兼有)。
想法 #3
1. 手动在 Azure DevOps 中注册 SSH 公钥。相应的私钥作为安全文件上传到 Pipelines Library。
2. 流水线部署 AKS 集群、Azure Key Vault 和 Argo CD。
3. 流水线将 SSH 私钥上传到 Azure Key Vault。
4. 流水线配置 ArgoCD 从 Azure Key Vault 读取 SSH 私钥,并使用它来与 Azure Repos 进行身份验证。
问题 – 如何让 ArgoCD 从 Azure Key Vault 获取密钥?似乎有多种方法:
– https://learn.microsoft.com/en-us/azure/aks/csi-secrets-store-driver
– https://github.com/SparebankenVest/azure-key-vault-to-kubernetes
– https://github.com/external-secrets/external-secrets
问题是 – 哪种方法最成熟、最安全?
用户想知道其他人是如何解决这个问题的,你对这个问题有什么看法?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在 Azure DevOps 中,可以使用服务连接来实现 ArgoCD 访问 Azure Repos。以下是实现的步骤:
1. 在 Azure DevOps 中创建一个服务连接。
2. 在 Argo CD 中配置 Azure Repos 访问凭据。
具体步骤如下:
1. 登录到 Azure DevOps。
2. 转到项目设置。
3. 在左侧导航栏中,选择“服务连接”。
4. 点击“新建服务连接”。
5. 选择“Azure Repos”作为服务类型。
6. 根据提示提供必要的信息,如仓库 URL、访问令牌等。
7. 点击“保存”以创建服务连接。
8. 在 Argo CD 中,使用创建的服务连接配置 Azure Repos 访问凭据。
方案2
另一种方法是使用 Azure Key Vault 来存储和管理 SSH 密钥,并让 Argo CD 从 Key Vault 中获取密钥。以下是实现的步骤:
1. 在 Azure Key Vault 中创建一个密钥。
2. 在 Argo CD 中配置 Azure Key Vault 访问凭据。
具体步骤如下:
1. 登录到 Azure 门户。
2. 打开 Azure Key Vault。
3. 创建一个新的密钥,并将 SSH 私钥作为密钥的值。
4. 在 Argo CD 中,使用 Azure Key Vault 的访问凭据配置密钥的获取。
方案3
如果你使用的是 Azure Kubernetes Service (AKS),你可以考虑使用 Azure Key Vault 和 Azure Key Vault CSI 驱动程序来管理和获取密钥。以下是实现的步骤:
1. 在 Azure Key Vault 中创建一个密钥。
2. 在 AKS 中安装 Azure Key Vault CSI 驱动程序。
3. 在 Argo CD 中配置 Azure Key Vault 访问凭据。
具体步骤如下:
1. 登录到 Azure 门户。
2. 打开 Azure Key Vault。
3. 创建一个新的密钥,并将 SSH 私钥作为密钥的值。
4. 在 AKS 中安装 Azure Key Vault CSI 驱动程序。
5. 在 Argo CD 中,使用 Azure Key Vault 的访问凭据配置密钥的获取。
请注意,以上方案仅提供了一些可能的解决方案。根据你的具体需求和环境,你可能需要进一步调查和测试这些方案,以确定最适合你的情况的解决方案。
以上是我对这个问题的解决方案的建议,希望对你有帮助。如果你有其他问题或需要进一步的帮助,请随时提问。