Поделиться через


Справочник по приложениям Kubernetes в приложении Azure с помощью примера управляемого приложения

В этой статье содержатся технические ресурсы и рекомендации, которые помогут вам ссылаться на приложения Kubernetes в приложении Azure с помощью примера управляемого приложения.

Ограничения

Предложение управляемого приложения не будет работать в существующем кластере. Предложение должно создать новый кластер и установить приложение в кластере, в противном случае предложение не будет развернуто.

Необходимые компоненты

Необходимо настроить предложение Kubernetes в Azure Marketplace, на которое вы хотите ссылаться в предложении управляемого приложения. Вы можете ознакомиться с руководством по началу работы, чтобы создать предложение Kubernetes.

Определение пользовательского интерфейса и шаблон ARM в этом предложении могут быть очень простыми, так как вы добавите это в предложении управляемого приложения.

В этом примере мы начнем с папки k8s-offer-azure-vote , чтобы создать пакет CNAB для базового предложения Kubernetes.

После публикации и доступности предложения в Azure Marketplace на этапе предварительной версии можно приступить к созданию предложения управляемого приложения.

Снимок экрана: отображение ссылки предварительного просмотра для отображения предложения управляемого приложения.

Предложение управляемого приложения

Начните с файлов mainTemplate и createUIDefinition в этой папке.

Сначала обновите раздел переменных:

"variables": {
    "plan-name": "DONOTMODIFY",
    "plan-publisher": "DONOTMODIFY",
    "plan-offerID": "DONOTMODIFY",
    "releaseTrain": "DONOTMODIFY",
    "clusterExtensionTypeName": "DONOTMODIFY"
},

Чтобы получить значение непосредственно из предложения Kubernetes, выполните инструкции. Разверните приложение Azure Kubernetes с помощью шаблона ARM.

Подготовка 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 Marketplace для создания предложения управляемого приложения.