Intégrer au déploiement Kubernetes en utilisant Helm

Les applications hébergées dans Kubernetes peuvent accéder aux données dans App Configuration en utilisant la bibliothèque de fournisseurs App Configuration. Le fournisseur App Configuration a des fonctionnalités intégrées de mise en cache et d’actualisation pour que les applications puissent avoir une configuration dynamique sans redéploiement. Si vous préférez ne pas mettre à jour votre application, ce tutoriel montre comment intégrer des données App Configuration dans votre Kubernetes en utilisant Helm via un déploiement. De cette façon, votre application peut continuer à accéder à la configuration à partir de variables et de secrets Kubernetes. Vous exécutez la mise à niveau Helm quand vous voulez que votre application récupère de nouveaux changements de configuration.

Conseil

Consultez les options permettant aux charges de travail hébergées dans Kubernetes d’accéder à Azure App Configuration.

Helm fournit un moyen de définir, d’installer et de mettre à niveau des applications qui s’exécutent dans Kubernetes. Un chart Helm contient les informations nécessaires à la création d’une instance d’une application Kubernetes. La configuration est stockée en dehors du chart lui-même, dans un fichier nommé values.yaml.

Pendant le processus de publication, Helm fusionne le chart avec la configuration appropriée pour exécuter l’application. Par exemple, les variables définies dans values.yaml peuvent être référencées en tant que variables d’environnement dans les conteneurs en cours d’exécution. Helm prend également en charge la création de secrets Kubernetes, qui peuvent être montés en tant que volumes de données ou exposés en tant que variables d’environnement.

Vous pouvez remplacer les valeurs stockées dans values.yaml en fournissant des fichiers de configuration YAML supplémentaires sur la ligne de commande lors de l’exécution de Helm. Azure App configuration prend en charge l’exportation des valeurs de configuration vers des fichiers YAML. L’intégration de cette fonctionnalité d’exportation à votre déploiement permet à vos applications Kubernetes de tirer parti des valeurs de configuration stockées dans App Configuration.

Dans ce tutoriel, vous allez apprendre à :

  • Utiliser des valeurs d’App Configuration lors du déploiement d’une application sur Kubernetes avec Helm.
  • Créer un secret Kubernetes basé sur une référence Key Vault dans App Configuration.

Ce tutoriel suppose une compréhension de base de la gestion de Kubernetes avec Helm. Découvrez plus d’informations sur l’installation d’applications avec Helm dans Azure Kubernetes Service.

Prérequis

Ajouter des clés-valeurs

Ajoutez les clés-valeurs suivantes au magasin App Configuration et conservez les valeurs par défaut des options Étiquette et Type de contenu. Pour plus d’informations sur l’ajout de clés-valeurs à un magasin avec le Portail Azure ou l’interface CLI, consultez Création d’une clé-valeur.

Clé Valeur
settings.color Blancs
settings.message Data from Azure App Configuration

Ajouter une référence Key Vault à App Configuration

  1. Connectez-vous au portail Azure et ajoutez un secret à Key Vault avec comme nom Password et comme valeur myPassword.

  2. Sélectionnez l’instance de magasin App Configuration que vous avez créée dans la section précédente.

  3. Sélectionnez Explorateur de configuration.

  4. Sélectionnez + Créer>Référence Key Vault, puis choisissez les valeurs suivantes :

    • Clé : Sélectionnez secrets.password.
    • Étiquette : Laissez cette valeur vide.
    • Abonnement, Groupe de ressources et Key Vault : Entrez les valeurs correspondant à ces éléments dans le coffre de clés que vous avez créé dans la section précédente.
    • Secret : Sélectionnez le secret nommé Password que vous avez créé dans la section précédente.

Créer un chart Helm

Commencez par créer un exemple de chart Helm avec la commande suivante :

helm create mychart

Helm crée un répertoire appelé mychart avec la structure ci-dessous.

Conseil

Pour plus d’informations, consultez ce guide des charts.

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

Ensuite, mettez à jour la section spec:template:spec:containers du fichier deployment.yaml. L’extrait de code suivant ajoute deux variables d’environnement au conteneur. Vous définirez leurs valeurs dynamiquement au moment du déploiement.

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

Le fichier deployment.yaml complet après la mise à jour doit ressembler à ce qui suit.

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 }}

Pour stocker des données sensibles en tant que secrets Kubernetes, ajoutez un fichier secrets.yaml dans le dossier templates.

Conseil

Découvrez plus d’informations sur la façon d’utiliser les secrets Kubernetes.

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

Enfin, mettez à jour le fichier values.yaml avec le contenu suivant pour fournir si nécessaire les valeurs par défaut des paramètres de configuration et des secrets référencés dans les fichiers deployment.yaml et secrets.yaml. Leurs valeurs réelles seront remplacées par la configuration extraite d’App configuration.

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

Passer la configuration d’App Configuration dans l’installation Helm

Tout d’abord, téléchargez la configuration depuis App Configuration dans un fichier myConfig.yaml. Utilisez un filtre de clé pour télécharger seulement les clés qui commencent par settings. . Si dans votre cas, le filtre de clé n’est pas suffisant pour exclure les clés des références Key Vault, vous pouvez utiliser l’argument --skip-keyvault pour les exclure.

Conseil

Découvrez plus d’informations sur la commande export.

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

Ensuite, téléchargez les secrets dans un fichier appelé mySecrets.yaml. L’argument de ligne de commande --resolve-keyvault résout les références Key Vault en extrayant les valeurs réelles dans Key Vault. Vous devez exécuter cette commande avec des informations d’identification qui ont des autorisations d’accès au coffre de clés correspondant.

Avertissement

Comme ce fichier contient des informations sensibles, conservez soigneusement le fichier et effacez-le quand il n’est plus nécessaire.

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

Utilisez l’argument -f de mise à niveau de Helm pour passer les deux fichiers de configuration que vous avez créés. Elles remplacent les valeurs de configuration définies dans values.yaml avec les valeurs exportées depuis App Configuration.

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

Vous pouvez également utiliser l’argument --set pour la mise à niveau helm pour passer des valeurs de clé littérale. L’utilisation de l’argument --set est un bon moyen d’éviter de conserver des données sensibles sur le disque.

$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
}

Vérifiez que les configurations et les secrets ont été définis correctement en accédant au Tableau de bord Kubernetes. Vous voyez que les valeurs pour color et message provenant d’App Configuration ont été renseignées dans les variables d’environnement du conteneur.

Démarrage rapide du lancement d’application local

Un secret, password, stocké en tant que référence Key Vault dans App Configuration, a également été ajouté aux secrets Kubernetes.

Capture d’écran mettant en évidence le mot de passe dans la section Data.

Nettoyer les ressources

Si vous ne souhaitez plus utiliser les ressources créées dans cet article, supprimez le groupe de ressources que vous avez créé ici afin d’éviter des frais.

Important

La suppression d’un groupe de ressources est irréversible. Le groupe de ressources et toutes les ressources qu’il contient sont supprimés définitivement. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé les ressources pour cet article dans un groupe de ressources contenant d’autres ressources que vous souhaitez conserver, supprimez chaque ressource individuellement à partir de son volet, au lieu de supprimer l’intégralité du groupe de ressources.

  1. Connectez-vous au portail Azure, puis sélectionnez Groupes de ressources.
  2. Dans la zone Filtrer par nom, entrez le nom de votre groupe de ressources.
  3. Dans la liste de résultats, sélectionnez le nom du groupe de ressources pour afficher une vue d’ensemble.
  4. Sélectionnez Supprimer le groupe de ressources.
  5. Vous êtes invité à confirmer la suppression du groupe de ressources. Entrez le nom de votre groupe de ressources à confirmer, puis sélectionnez Supprimer.

Après quelques instants, le groupe de ressources et toutes ses ressources sont supprimés.

Étapes suivantes

Dans ce tutoriel, vous avez exporté des données d’App Configuration à utiliser dans un déploiement Kubernetes avec Helm. Pour en savoir plus sur l’utilisation d’App Configuration, passez aux exemples Azure CLI.