Compartir a través de


Integración con la implementación de Kubernetes mediante Helm

Las aplicaciones hospedadas en Kubernetes pueden acceder a los datos de App Configuration mediante la biblioteca de proveedores de App Configuration. El proveedor de App Configuration tiene funcionalidades integradas de almacenamiento en caché y actualización para que las aplicaciones puedan tener una configuración dinámica sin necesidad de volver a implementar. Si prefiere no actualizar la aplicación, en este tutorial se muestra cómo traer datos de App Configuration a Kubernetes mediante Helm a través de la implementación. De este modo, la aplicación puede seguir accediendo a la configuración desde variables y secretos de Kubernetes. Ejecute la actualización de Helm cuando quiera que la aplicación recoja nuevos cambios de configuración.

Sugerencia

Consulte opciones para cargas de trabajo hospedadas en Kubernetes para acceder a Azure App Configuration.

Helm proporciona una manera de definir, instalar y actualizar las aplicaciones que se ejecutan en Kubernetes. Un gráfico de Helm contiene la información necesaria para crear una instancia de una aplicación de Kubernetes. La configuración se almacena fuera del propio gráfico, en un archivo denominado values.yaml.

Durante el proceso de lanzamiento, Helm combina el gráfico con la configuración adecuada para ejecutar la aplicación. Por ejemplo, se puede hacer referencia a las variables definidas en values.yaml como variables de entorno dentro de los contenedores en ejecución. Helm también admite la creación de secretos de Kubernetes, que se pueden montar como volúmenes de datos o exponerse como variables de entorno.

Puede invalidar los valores almacenados en values.yaml si proporciona archivos de configuración basados en YAML adicionales en la línea de comandos al ejecutar Helm. Azure App Configuration admite la exportación de valores de configuración a archivos YAML. La integración de esta funcionalidad de exportación en la implementación permite a las aplicaciones de Kubernetes aprovechar los valores de configuración almacenados en App Configuration.

En este tutorial, aprenderá a:

  • Usar valores de App Configuration al implementar una aplicación en Kubernetes con Helm.
  • Crear un secreto de Kubernetes basado en una referencia de Key Vault en App Configuration.

En este tutorial se da por supuesto que tiene conocimientos básicos sobre la administración de Kubernetes con Helm. Consulte más información sobre la instalación de aplicaciones con Helm en Azure Kubernetes Service (AKS).

Prerrequisitos

Agregar pares clave-valor

Agregue los siguientes pares clave-valor al almacén de App Configuration y deje Etiqueta y Tipo de contenido con sus valores predeterminados. Para obtener más información sobre cómo agregar pares clave-valor a un almacén mediante Azure Portal o la CLI, vaya a Creación de un valor de clave.

Clave Value
settings.color Blanco
settings.message Datos de Azure App Configuration

Incorporación de una referencia de Key Vault a App Configuration

  1. Inicie sesión en Azure Portal y agregue un secreto a Key Vault con el nombre Password y el valor miContraseña.

  2. Seleccione la instancia del almacén de App Configuration que creó en la sección anterior.

  3. Seleccione Explorador de configuración.

  4. Seleccione + Crear>Referencia del almacén de claves y, a continuación, especifique los valores siguientes:

    • Clave: Seleccione secrets.password.
    • Etiqueta: deje este valor en blanco.
    • Suscripción, Grupo de recursos y Key Vault: escriba los valores correspondientes a los del almacén de claves que creó en el paso anterior.
    • Secreto: seleccione el secreto llamado Password que creó en la sección anterior.

Creación de un gráfico de Helm

En primer lugar, cree un gráfico de Helm de ejemplo con el siguiente comando:

helm create mychart

Helm crea un directorio nuevo denominado mychart con la estructura que se muestra a continuación.

Sugerencia

Siga esta guía de gráficos para más información.

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

A continuación, actualice la sección de spec:template:spec:containers del archivo deployment.yaml. En el fragmento de código siguiente se agregan dos variables de entorno al contenedor. Establecerá sus valores dinámicamente en el momento de la implementación.

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

El archivo deployment.yaml completo después de la actualización debe ser similar al siguiente.

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

Para almacenar datos confidenciales como secretos de Kubernetes, agregue un archivo secrets.yaml en la carpeta de plantillas.

Sugerencia

Obtenga más información sobre cómo usar secretos de Kubernetes.

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

Por último, actualice el archivo values.yaml con el siguiente contenido para proporcionar de forma opcional los valores predeterminados de las opciones de configuración y los secretos a los que se hace referencia en los archivos deployment.yaml y secrets.yaml. Los valores reales se sobrescribirán con la configuración extraída de App Configuration.

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

Paso de la configuración desde App Configuration en la instalación de Helm

En primer lugar, descargue la configuración de App Configuration en un archivo myConfig.yaml. Use un filtro de clave para descargar solo las claves que comiencen por settings. . Si en su caso el filtro de clave no es suficiente para excluir las claves de las referencias de Key Vault, puede usar el argumento --skip-keyvault para excluirlas.

Sugerencia

Obtenga más información sobre el comando export.

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

A continuación, descargue los secretos en un archivo denominado mySecrets.yaml. El argumento de línea de comandos --resolve-keyvault resuelve las referencias de Key Vault mediante la recuperación de los valores reales de Key Vault. Deberá ejecutar este comando con credenciales que tengan permisos de acceso a la instancia de Key Vault correspondiente.

Advertencia

Como este archivo contiene información confidencial, conserve el archivo con cuidado y elimínelo cuando ya no lo necesite.

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

Use el argumento -f de la actualización de Helm para pasar los dos archivos de configuración que ha creado. Invalidarán los valores de configuración definidos en values.yaml con los valores exportados de App Configuration.

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

También puede usar el argumento --set para que la actualización de Helm pase valores de clave literal. El uso del argumento --set es una buena manera de evitar la persistencia de datos confidenciales en el 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
}

Compruebe que las configuraciones y los secretos se establecieron correctamente; para ello, acceda al panel de Kubernetes. Verá que los valores color y message de App Configuration se rellenaron en las variables de entorno del contenedor.

Inicio de la aplicación del artículo de inicio rápido en un entorno local

Un secreto, password, se almacena como referencia de Key Vault en App Configuration y también se agregó a los secretos de Kubernetes.

Captura de pantalla que resalta la contraseña en la sección de datos.

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.

Pasos siguientes

En este tutorial, ha exportado los datos de Azure App Configuration que se van a usar en una implementación de Kubernetes con Helm. Para más información sobre App Configuration, continúe con los ejemplos de la CLI de Azure.