Fare riferimento alle app Kubernetes nell'applicazione Azure usando un esempio di app gestita

Questo articolo offre risorse tecniche e consigli utili per fare riferimento alle app Kubernetes nell'applicazione Azure usando un esempio di app gestita.

Limiti

L'offerta di app gestita non funzionerà con un cluster del servizio Azure Kubernetes gestito esistente e un cluster Kubernetes abilitato per Azure Arc. L'offerta deve creare un nuovo cluster del servizio Azure Kubernetes gestito e installare l'applicazione nel cluster. In caso contrario, l'offerta non verrà distribuita.

Prerequisiti

È necessario configurare un'offerta Kubernetes in Azure Marketplace a cui si vuole fare riferimento nell'offerta di app gestita. È possibile fare riferimento alla guida introduttiva per creare un'offerta Kubernetes.

La definizione dell'interfaccia utente e il modello di Resource Manager in questa offerta possono essere molto semplici, perché si estenderà l'offerta nell'app gestita.

In questo esempio si inizia dalla cartella k8s-offer-azure-vote per creare il bundle CNAB per l'offerta Kubernetes di base.

Dopo la pubblicazione e la disponibilità dell'offerta in Azure Marketplace nella fase di anteprima, è possibile iniziare a creare l'offerta di app gestita.

Screenshot della visualizzazione del collegamento di anteprima per visualizzare l'offerta di app gestite.

Offerta di app gestite

Iniziare con i file mainTemplate e createUIDefinition in questa cartella.

Prima di tutto, aggiornare la sezione variables:

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

Per recuperare il valore direttamente dall'offerta Kubernetes, seguire la guida: Distribuire un'applicazione Azure Kubernetes usando un modello di Resource Manager.

Preparare mainTemplate.json

In questo esempio mainTemplate sono stati aggiunti componenti aggiuntivi per illustrare come aggiungere altri componenti all'offerta di app gestita.

Identità assegnata dall'utente:

{
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
    "name": "[concat(parameters('clusterResourceName'), '-identity')]",
    "apiVersion": "2023-01-31",
    "location": "[resourceGroup().location]"
},
  • Keyvault, criteri di accesso e segreto:
{
    "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'))]"
    ]
}
  • L'assegnazione dell'identità al nodo del cluster e dipende da:
"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

In questo esempio createUiDefinition sono stati rimossi componenti aggiuntivi non applicabili per l'offerta di app gestita.

Creare il pacchetto dei file

Aggiungere i due file mainTemplate.json e createUiDefinition.json a un file ZIP.

Creare l'offerta di app gestita

Ora che sono necessari gli artefatti, è possibile seguire la guida: Creare un'offerta di applicazione Azure in Azure Marketplace per creare l'offerta di app gestita.