使用托管应用示例在 Azure 应用程序中引用 Kubernetes 应用

本文提供了技术资源和建议,可帮助你使用托管应用示例在 Azure 应用程序中引用 Kubernetes 应用。

限制

托管应用产品/服务不适用于现有群集。 产品/服务需要创建新的群集并在群集上安装应用程序,否则产品/服务将无法部署。

先决条件

需要在Azure 市场中设置要引用的 Kubernetes 产品/服务。 可以参考 入门指南 来创建 Kubernetes 产品/服务。

此产品/服务的 UI 定义和 ARM 模板可能非常简单,因为你将在托管应用产品/服务中扩展它。

在此示例中,我们从 k8s-offer-azure-vote 文件夹开始,为基础 Kubernetes 产品/服务创建 CNAB 捆绑包。

发布产品/服务并在预览阶段Azure 市场发布后,即可开始创建托管应用产品/服务。

显示用于显示托管应用产品/服务的预览链接的屏幕截图。

托管应用产品/服务

从此文件夹中的 mainTemplatecreateUIDefinition 文件开始。

首先,更新变量部分:

"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 应用程序产品/服务以创建托管应用产品/服务。