Integrare la distribuzione di Kubernetes con Helm

Le applicazioni ospitate in Kubernetes possono accedere ai dati in Configurazione app usando la libreria del provider Configurazione app. Il provider Configurazione app include funzionalità predefinite di memorizzazione nella cache e aggiornamento in modo che le applicazioni possano avere una configurazione dinamica senza ridistribuire. Se si preferisce non aggiornare l'applicazione, questa esercitazione illustra come trasferire dati da Configurazione app a Kubernetes usando Helm tramite la distribuzione. In questo modo, l'applicazione può continuare ad accedere alla configurazione dalle variabili e dai segreti di Kubernetes. Eseguire l'aggiornamento Helm quando si vuole che l'applicazione rilevi nuove modifiche di configurazione.

Suggerimento

Vedere le opzioni per i carichi di lavoro ospitati in Kubernetes per accedere alla configurazione di app Azure.

Helm consente di definire, installare e aggiornare le applicazioni in esecuzione in Kubernetes. Un grafico Helm contiene le informazioni necessarie per creare un'istanza di un'applicazione Kubernetes. La configurazione viene archiviata all'esterno del grafico stesso, in un file denominato values.yaml.

Durante il processo di rilascio, Helm unisce il grafico alla configurazione corretta per l'esecuzione dell'applicazione. È ad esempio possibile fare riferimento alle variabili definite in values.yaml come variabili di ambiente all'interno dei contenitori in esecuzione. Helm supporta anche la creazione di segreti Kubernetes, che possono essere montati come volumi di dati o esposti come variabili di ambiente.

È possibile eseguire l'override dei valori archiviati in values.yaml specificando altri file di configurazione basati su YAML sulla riga di comando durante l'esecuzione di Helm. Configurazione app di Azure supporta l'esportazione di valori di configurazione in file YAML. L'integrazione di questa funzionalità di esportazione nella distribuzione consente alle applicazioni Kubernetes di sfruttare i valori di configurazione archiviati in Configurazione app.

In questa esercitazione apprenderai a:

  • Usare i valori di Configurazione app quando si distribuisce un'applicazione in Kubernetes con Helm.
  • Creare un segreto Kubernetes in base a un riferimento a Key Vault in Configurazione app.

Questa esercitazione presuppone una conoscenza di base della gestione di Kubernetes con Helm. Per altre informazioni sull'installazione di applicazioni con Helm, vedere Servizio Azure Kubernetes.

Prerequisiti

Aggiungere valori chiave

Aggiungere i valori chiave seguenti all'archivio Configurazione app e lasciare Etichetta e Tipo di contenuto con i valori predefiniti. Per altre informazioni su come aggiungere valori chiave a un archivio usando il portale di Azure o l'interfaccia della riga di comando, vedere Creare un valore chiave.

Chiave valore
settings.color Bianco
settings.message Dati della configurazione di app Azure

Aggiungere a Configurazione app un riferimento a Key Vault

  1. Accedere al portale di Azure e aggiungere un segreto a Key Vault con nome Password e valore myPassword.

  2. Selezionare l'istanza dell'archivio di Configurazione app creata nella sezione precedente.

  3. Selezionare Esplora configurazioni.

  4. Selezionare + Crea>Riferimento all'insieme di credenziali delle chiavi e quindi specificare i valori seguenti:

    • Chiave: selezionare secrets.password.
    • Etichetta: lasciare vuoto questo valore.
    • Sottoscrizione, gruppo di risorse e Insieme di credenziali delle chiavi: immettere i valori corrispondenti a quelli nell'insieme di credenziali delle chiavi creato nel passaggio precedente.
    • Segreto: selezionare il segreto denominato Password creato nella sezione precedente.

Creare il grafico Helm

Creare prima di tutto un grafico Helm di esempio con il comando seguente:

helm create mychart

Helm crea una nuova directory denominata mychart con la struttura illustrata di seguito.

Suggerimento

Per altre informazioni, vedere questa guida ai grafici.

mychart
|-- Chart.yaml
|-- charts
|-- templates
|   |-- NOTES.txt
|   |-- _helpers.tpl
|   |-- deployment.yaml
|   |-- ingress.yaml
|   `-- service.yaml
`-- values.yaml

Aggiornare quindi la sezione spec:template:spec:containers del file deployment.yaml. Il frammento di codice seguente aggiunge due variabili di ambiente al contenitore. I valori verranno impostati dinamicamente in fase di distribuzione.

env:
- name: Color
    value: {{ .Values.settings.color }}
- name: Message
    value: {{ .Values.settings.message }}

Il file deployment.yaml dopo l'aggiornamento dovrebbe essere simile al seguente.

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "mychart.name" . }}
    helm.sh/chart: {{ include "mychart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "mychart.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "mychart.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: Color
              value: {{ .Values.settings.color }}
            - name: Message
              value: {{ .Values.settings.message }}
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
{{ toYaml .Values.resources | indent 12 }}
    {{- with .Values.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}

Per archiviare dati sensibili come segreti Kubernetes, aggiungere un file secrets.yaml nella cartella templates.

Suggerimento

Per altre informazioni, vedere l'articolo su come usare i segreti Kubernetes.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: {{ .Values.secrets.password | b64enc }}

Aggiornare infine il file values.yaml con il contenuto seguente per fornire facoltativamente i valori predefiniti delle impostazioni di configurazione e dei segreti a cui viene fatto riferimento nei file deployment.yaml e secrets.yaml. I valori effettivi verranno sovrascritti dalla configurazione di cui è stato eseguito il pull da Configurazione app.

# settings will be overwritten by App Configuration
settings:
  color: red
  message: myMessage

Passare la configurazione da Configurazione app all'installazione di Helm

Per prima cosa, scaricare la configurazione da Configurazione app a un file myConfig.yaml. Usare un filtro per scaricare solo le chiavi che iniziano con settings.. Se in questo caso il filtro non è sufficiente a escludere le chiavi dei riferimenti a Key Vault, è possibile usare l'argomento --skip-keyvault per escluderli.

Suggerimento

Altre informazioni sul comando export.

az appconfig kv export -n myAppConfiguration -d file --path myConfig.yaml --key "settings.*"  --separator "." --format yaml

Scaricare quindi i segreti in un file denominato secrets.yaml. L'argomento della riga di comando --resolve-vault risolve i riferimenti a Key Vault recuperando i valori effettivi in Key Vault. È necessario eseguire questo comando con credenziali che hanno autorizzazioni di accesso per il Key Vault corrispondente.

Avviso

Dal momento che questo file contiene informazioni riservate, conservarlo in modo sicuro e pulirlo quando non è più necessario.

az appconfig kv export -n myAppConfiguration -d file --path mySecrets.yaml --key "secrets.*" --separator "." --resolve-keyvault --format yaml

Usare l'argomento -f di helm upgrade per passare i due file di configurazione creati. Tali file eseguiranno l'override dei valori di configurazione definiti in values.yaml con i valori esportati da Configurazione app.

helm upgrade --install -f myConfig.yaml -f mySecrets.yaml "example" ./mychart

È anche possibile usare l'argomento --set di helm upgrade per passare valori di chiave letterali. L'argomento --set è utile per evitare il salvataggio permanente di dati sensibili sul disco.

$secrets = az appconfig kv list -n myAppConfiguration --key "secrets.*" --resolve-keyvault --query "[*].{name:key, value:value}" | ConvertFrom-Json

foreach ($secret in $secrets) {
  $keyvalues += $secret.name + "=" + $secret.value + ","
}

if ($keyvalues){
  $keyvalues = $keyvalues.TrimEnd(',')
  helm upgrade --install --set $keyvalues "example" ./mychart
}
else{
  helm upgrade --install "example" ./mychart
}

Verificare che configurazioni e segreti siano stati impostati correttamente accedendo al dashboard di Kubernetes. Si noterà che i valori di color e message di Configurazione app sono stati popolati nelle variabili di ambiente del contenitore.

Quickstart app launch local

Un segreto, password, archiviato come riferimento a Key Vault in Configurazione app, è stato aggiunto anche nei segreti Kubernetes.

Screenshot that highlights the password in the Data section.

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.

Passaggi successivi

In questa esercitazione sono stati esportati i dati di Configurazione app di Azure da usare in una distribuzione di Kubernetes con Helm. Per altre informazioni sull'uso di Configurazione app, passare agli esempi dell'interfaccia della riga di comando di Azure.