使用托管应用示例在 Azure 应用程序中引用 Kubernetes 应用
本文提供了技术资源和建议,可帮助你使用托管应用示例在 Azure 应用程序中引用 Kubernetes 应用。
限制
托管应用产品/服务不适用于现有的托管 AKS 群集和已启用 Azure Arc 的 Kubernetes 群集。 产品/服务需要创建新的托管 AKS 群集并在群集上安装应用程序,否则产品/服务将无法部署。
先决条件
需要在Azure 市场中设置要引用的 Kubernetes 产品/服务。 可以参考 入门指南 来创建 Kubernetes 产品/服务。
此产品/服务的 UI 定义和 ARM 模板可能非常简单,因为你将在托管应用产品/服务中扩展它。
在此示例中,我们从 k8s-offer-azure-vote 文件夹开始,为基础 Kubernetes 产品/服务创建 CNAB 捆绑包。
发布产品/服务并在预览阶段Azure 市场发布后,即可开始创建托管应用产品/服务。
托管应用产品/服务
从此文件夹中的 mainTemplate 和 createUIDefinition 文件开始。
首先,更新变量部分:
"variables": {
"plan-name": "DONOTMODIFY",
"plan-publisher": "DONOTMODIFY",
"plan-offerID": "DONOTMODIFY",
"releaseTrain": "DONOTMODIFY",
"clusterExtensionTypeName": "DONOTMODIFY"
},
若要直接从 Kubernetes 产品/服务检索值,请按照指南操作: 使用 ARM 模板部署 Azure Kubernetes 应用程序。
准备mainTemplate.json
在此示例 mainTemplate 中,我们添加了额外的组件,演示如何向托管应用产品/服务添加更多组件。
用户分配的标识:
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"name": "[concat(parameters('clusterResourceName'), '-identity')]",
"apiVersion": "2023-01-31",
"location": "[resourceGroup().location]"
},
- Keyvault、访问策略和机密:
{
"name": "[uniqueString(resourceGroup().id, resourceGroup().location, 'keyvault')]",
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2019-09-01",
"location": "[resourceGroup().location]",
"tags": {
"displayName": "keyVault1"
},
"properties": {
"enabledForDeployment": true,
"enabledForTemplateDeployment": true,
"enabledForDiskEncryption": true,
"tenantId": "[subscription().tenantId]",
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', concat(parameters('clusterResourceName'), '-identity')), '2023-01-31').principalId]",
"permissions": {
"keys": [
"Get"
],
"secrets": [
"List",
"Get",
"Set"
]
}
}
],
"sku": {
"name": "standard",
"family": "A"
}
},
"resources": [
{
"type": "secrets",
"name": "secretExample1",
"apiVersion": "2016-10-01",
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', uniqueString(resourceGroup().id, resourceGroup().location, 'keyvault'))]"
],
"properties": {
"value": "secretValue"
}
}
],
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', concat(parameters('clusterResourceName'), '-identity'))]"
]
}
- 将标识分配给群集的节点,具体取决于:
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2022-11-01",
"name": "[parameters('clusterResourceName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', concat(parameters('clusterResourceName'), '-identity'))]"
],
"tags": {},
"sku": {
"name": "Basic",
"tier": "Free"
},
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', concat(parameters('clusterResourceName'), '-identity'))]": {}
}
},
UIDefinition
在此示例 createUiDefinition 中,我们删除了不适用于托管应用产品/服务的额外组件。
将文件打包
将这两个文件 mainTemplate.json
添加到 createUiDefinition.json
zip 文件。
创建托管应用产品/服务
完成所需的项目后,可以按照指南操作:在Azure 市场中创建 Azure 应用程序产品/服务以创建托管应用产品/服务。