我正在执行一个 ARM 模板,该模板从 Azure 资源组部署任务创建 Azure Kubernetes 服务和其他资源。
我的 ARM 模板有一个参数servicePrincipalClientId
和servicePrincipalClientSecret
敏感数据,用于创建 Azure Kubernetes 集群,就在这里。(这个链接是我完整的ARM模板)
所以,我正在做的事情如下:
- 我创建了
servicePrincipalClientId
andservicePrincipalClientSecret
作为管道变量
- 我之前创建了服务主体及其数据
servicePrincipalClientId
,servicePrincipalClientSecret
我使用它们来创建服务连接,以便以这种方式连接到 Azure 云:
- 我有一个 PowerShell 任务以这种方式将
servicePrincipalClientId
和servicePrincipalClientSecret
变量值转换为安全字符串:
$env:secretServicePrincipalClientId = ConvertTo-SecureString '$($env:servicePrincipalClientId)' -AsPlainText -Force
$env:secretServicePrincipalClientSecret = ConvertTo-SecureString '$($env:servicePrincipalClientSecret)' -AsPlainText -Force
为了部署 ARM 模板中定义的资源,我创建了一个 Azure 资源组部署任务,其中包含以下选项:
我正在使用创建的服务连接与我的订阅进行交互。
- 要执行的操作:创建或更新资源组
Template,上面引用的 ARM 模板路径。
覆盖模板参数 我在这里包含了所有 ARM 模板参数值,我想在这里强调我如何引用
servicePrincipalClientId
和servicePrincipalClientSecret
变量值的方式:
在我的第一个 azure devops 任务中,我在这里引用了我用来转换secretServicePrincipalClientId
和变量值作为安全字符串的变量和变量secretServicePrincipalClientSecret
servicePrincipalClientId
servicePrincipalClientSecret
-servicePrincipalClientId $($secretServicePrincipalClientId)
-servicePrincipalClientSecret $($secretServicePrincipalClientSecret)
.
.
-serviceCidr "100.0.0.0/16"
-dnsServiceIP "100.0.0.10"
-dockerBridgeCidr "172.17.0.1/16"
.
.
所以,当我执行发布管道时,我在 Azure 资源组部署任务中得到了这个错误
2019-10-26T20:05:13.3246017Z The detected encoding for file 'd:\a\r1\a\Project\Deployments\ARMTemplates\Infrastructure\AzResourceGroupDeploymentApproach\testing.json' is 'utf-8'
2019-10-26T20:05:13.3410693Z Starting Deployment.
2019-10-26T20:05:13.3412081Z Deployment name is AzureDevOpsDeployment
2019-10-26T20:05:18.1729784Z There were errors in your deployment. Error code: InvalidTemplateDeployment.
2019-10-26T20:05:18.1730624Z ##[error]The template deployment 'AzureDevOpsDeployment' is not valid according to the validation procedure. The tracking id is 'xxxxxxx'. See inner errors for details.
2019-10-26T20:05:18.1731223Z ##[error]Details:
2019-10-26T20:05:18.1732062Z ##[error]ServicePrincipalNotFound: Provisioning of resource(s) for container service KubernetesCluster-aks in resource group testing failed. Message: {
"code": "ServicePrincipalNotFound",
"message": "Service principal clientID: $($secretServicePrincipalClientId) not found in Active Directory tenant ***, Please see https://aka.ms/aks-sp-help for more details."
}. Details:
2019-10-26T20:05:18.1733305Z ##[error]Task failed while creating or updating the template deployment.
2019-10-26T20:05:18.1765718Z ##[section]Finishing: Azure Deployment:Create Or Update Resource Group action on testing
看起来我用来连接到 Azure 云的服务主体不存在,但事实并非如此。该服务主体存在。
如果我直接在任务中的纯文本中包含servicePrincipalClientId
和servicePrincipalClientSecret
值
-servicePrincipalClientId <servicePrincipalClientId-value>
-servicePrincipalClientSecret <servicePrincipalClientSecret-value>
Azure 资源组任务有效,ARM 模板中的资源从 Azure DevOps 部署在 Azure 云中。
- 问题是什么?
根据此链接, AKS 需要创建一个服务主体。
az cli
此外,当我们使用服务主体创建 Azure Kubernetes 服务时,会自动创建。当我们从 Azure 门户创建 Azure Kubernetes 服务时,也会发生同样的情况。
因此,我使用任务和服务连接中的现有服务主体凭据,通过资源组部署任务从执行 ARM 模板的 Azure Devops 创建 Azure Kubernetes 服务。
- 为什么我的服务主体无法识别?
我尝试使用此选项来解决问题并解决问题,但我担心问题不是服务主体本身,而不是它,我认为我需要引用特殊方式的
- servicePrincipalClientId $($secretServicePrincipalClientId)
and
-servicePrincipalClientSecret $($secretServicePrincipalClientSecret)
。
我怎样才能做到这一点?
如果有人能指出我正确的方向,我将不胜感激