Compartir por


Uso de Service Connector en Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) es uno de los servicios de proceso admitidos por Service Connector. Este artículo tiene como objetivo ayudarle a comprender lo siguiente:

  • Qué operaciones se realizan en el clúster al crear una conexión de servicio.
  • Cómo usar los recursos de Kubernetes que Service Connector crea.
  • Solución de problemas y visualización de registros de Service Connector en un clúster de AKS.

Requisitos previos

¿Qué operaciones hace Service Connector en el clúster?

En función de los distintos servicios de destino y tipos de autenticación seleccionados al crear una conexión de servicio, Service Connector realiza diferentes operaciones en el clúster de AKS. A continuación se enumeran las posibles operaciones realizadas por Service Connector.

Agregar la extensión Kubernetes de Service Connector

Se agrega una extensión de Kubernetes denominada sc-extension al clúster la primera vez que se crea una conexión de servicio. Más adelante, la extensión ayuda a crear recursos de Kubernetes en el clúster del usuario, siempre que una solicitud de conexión de servicio llegue a Service Connector. Puede encontrar la extensión en el clúster de AKS en Azure Portal, en el menú Extensiones y aplicaciones.

Captura de pantalla de Azure Portal, vea la extensión de AKS.

La extensión también es donde se almacenan los metadatos de las conexiones de clúster. La desinstalación de la extensión hace que todas las conexiones del clúster no estén disponibles. El operador de extensión se hospeda en el espacio de nombres sc-system del clúster.

Creación de recursos de Kubernetes

Service Connector crea algunos recursos de Kubernetes en el espacio de nombres que especificó el usuario al crear una conexión de servicio. Los recursos de Kubernetes almacenan la información de conexión, que es necesaria para las definiciones de carga de trabajo del usuario o el código de la aplicación para comunicarse con los servicios de destino. En función de los distintos tipos de autenticación, se crean distintos recursos de Kubernetes. Para los tipos de autenticación Connection String y Service Principal, se crea un secreto de Kubernetes. Para el tipo de autenticación Workload Identity, también se crea una cuenta de servicio de Kubernetes además de un secreto de Kubernetes.

Puede encontrar los recursos de Kubernetes creados por Service Connector para cada conexión de servicio en Azure Portal en el recurso de Kubernetes, en el menú Service Connector.

Captura de pantalla de Azure Portal de la vista de recursos de Kubernetes creados por Service Connector.

La eliminación de una conexión de servicio no elimina el recurso de Kubernetes asociado. Si es necesario, quite el recurso manualmente mediante, por ejemplo, el comando kubectl delete.

Habilitación del complemento azureKeyvaultSecretsProvider

Si el servicio de destino es Azure Key Vault y el controlador CSI del almacén secreto está habilitado al crear una conexión de servicio, Service Connector habilita el complemento azureKeyvaultSecretsProvider para el clúster.

Captura de pantalla de Azure Portal en la que se habilita el controlador CSI para keyvault al crear una conexión.

Siga el tutorial de Conexión a Azure Key Vault mediante el controlador CSI para configurar una conexión a Azure Key Vault mediante el controlador CSI de Secret Store.

Habilitación de la identidad de carga de trabajo y el emisor de OpenID Connect (OIDC)

Si el tipo de autenticación es Workload Identity al crear una conexión de servicio, Service Connector habilita la identidad de carga de trabajo y el emisor de OIDC para el clúster.

Captura de pantalla de Azure Portal, mediante la identidad de carga de trabajo para crear una conexión.

Cuando el tipo de autenticación es Workload Identity, se necesita una identidad administrada asignada por el usuario para crear la credencial de identidad federada. Obtenga más información sobre qué son las identidades de carga de trabajo o siga el tutorial para configurar una conexión a Azure Storage mediante la identidad de carga de trabajo.

Uso de los recursos de Kubernetes creados por Service Connector

Se crean diferentes recursos de Kubernetes cuando el tipo de servicio de destino y el tipo de autenticación son diferentes. En las secciones siguientes se muestra cómo usar los recursos de Kubernetes creados por Service Connector en la definición de cargas de trabajo del clúster y los códigos de aplicación.

Secreto de Kubernetes

Se crea un secreto de Kubernetes cuando el tipo de autenticación es Connection String o Service Principal. La definición de la carga de trabajo del clúster puede hacer referencia directamente al secreto. El siguiente fragmento es un ejemplo.

apiVersion: batch/v1
kind: Job
metadata:
  namespace: default
  name: sc-sample-job
spec:
  template:
    spec:
      containers:
      - name: raw-linux
        image: alpine
        command: ['printenv']
        envFrom:
          - secretRef:
              name: <SecretCreatedByServiceConnector>
      restartPolicy: OnFailure

A continuación, los códigos de aplicación pueden consumir la cadena de conexión en el secreto de la variable de entorno. Puede comprobar el código de ejemplo para obtener más información sobre los nombres de las variables de entorno y cómo usarlos en los códigos de aplicación para autenticarse en diferentes servicios de destino.

Cuenta de servicio de Kubernetes

Tanto una cuenta de servicio de Kubernetes como un secreto se crean cuando el tipo de autenticación es Workload Identity. La definición de la carga de trabajo del clúster puede hacer referencia a la cuenta de servicio y al secreto para autenticarse a través de la identidad de la carga de trabajo. El siguiente fragmento proporciona un ejemplo.

apiVersion: batch/v1
kind: Job
metadata:
  namespace: default
  name: sc-sample-job
  labels:
    azure.workload.identity/use: "true"
spec:
  template:
    spec:
      serviceAccountName: <ServiceAccountCreatedByServiceConnector>
      containers:
      - name: raw-linux
        image: alpine
        command: ['printenv']
        envFrom:
          - secretRef:
              name: <SecretCreatedByServiceConnector>
      restartPolicy: OnFailure

Puede consultar el tutorial para aprender cómo conectarse a Azure Storage mediante la identidad de carga de trabajo.

Solución de problemas y visualización de registros

Si se produce un error y no se pudo mitigar mediante el reintento al crear una conexión de servicio, los métodos siguientes pueden ayudar a recopilar más información para solucionar problemas.

Comprobación de la extensión Kubernetes de Service Connector

La extensión Kubernetes de Service Connector se basa en las extensiones de clúster de Kubernetes habilitadas para Azure Arc. Use los siguientes comandos para investigar si hay errores durante la instalación o actualización de la extensión.

  1. Instale la extensión CLI de Azure k8s-extension.
az extension add --name k8s-extension
  1. Obtenga el estado de la extensión de Service Connector. Compruebe la propiedad statuses en la salida del comando para ver si hay algún error.
az k8s-extension show \
    --resource-group MyClusterResourceGroup \
    --cluster-name MyCluster \
    --cluster-type managedClusters \
    --name sc-extension

Comprobación de los registros de clúster de Kubernetes

Si se produce un error durante la instalación de la extensión y el mensaje de error de la propiedad statuses no proporciona suficiente información sobre lo que ha ocurrido, puede comprobar en más profundidad los registros de Kubernetes con los pasos siguientes.

  1. Conéctese al clúster AKS.

    az aks get-credentials \
        --resource-group MyClusterResourceGroup \
        --name MyCluster
    
  2. La extensión de Service Connector se instala en el espacio de nombres sc-system a través del gráfico de Helm, compruebe el espacio de nombres y la versión de Helm siguiendo los comandos siguientes.

    • Asegúrese de que el espacio de nombres existe.
    kubectl get ns
    
    • Compruebe el estado de la versión de Helm.
    helm list -n sc-system
    
  3. Durante la instalación o actualización de la extensión, un trabajo de Kubernetes denominado sc-job crea los recursos de Kubernetes para la conexión de servicio. El error de ejecución del trabajo suele provocar el error de extensión. Ejecute los siguientes comandos para comprobar el estado del trabajo. Si sc-job no existe en el espacio de nombres sc-system, debe haberse ejecutado correctamente. Este trabajo está diseñado para eliminarse automáticamente después de la ejecución correcta.

    • Compruebe que el trabajo exista.
    kubectl get job -n sc-system
    
    • Obtenga el estado del trabajo.
    kubectl describe job/sc-job -n sc-system
    
    • Vea los registros del trabajo.
    kubectl logs job/sc-job -n sc-system
    

Errores comunes y mitigaciones

Conflict

Mensaje de error: Operation returned an invalid status code: Conflict.

Motivo: este error suele producirse al intentar crear una conexión de servicio mientras el clúster de AKS (Azure Kubernetes Service) está en un estado de actualización. La actualización de la conexión de servicio entra en conflicto con la actualización en curso. También puede ocurrir cuando la suscripción no se vuelve a asignar para el proveedor de recursos Microsoft.KubernetesConfiguration.

Mitigación:

  • Ejecute el siguiente comando para asegurarse de que la suscripción está registrada para el proveedor de recursos Microsoft.KubernetesConfiguration.

    az provider register -n Microsoft.KubernetesConfiguration
    
  • Asegúrese de que el clúster está en un estado "Correcto" y vuelva a intentar la creación.

Tiempo de espera

Mensaje de error:

  • Long running operation failed with status 'Failed'. Unable to get a response from the Agent in time.
  • Timed out waiting for the resource to come to a ready/completed state

Motivo: este error suele producirse cuando el trabajo de Kubernetes usado para crear o actualizar la extensión del clúster de Service Connector no se puede programar debido a limitaciones de recursos u otros problemas.

Mitigación: Consulte Comprobación de los registros de clúster de Kubernetes para identificar y resolver los motivos detallados. Un problema común es que no hay nodos disponibles debido al adelantamiento. En este caso, considere la posibilidad de agregar más nodos o habilitar el escalado automático para los nodos.

Acceso a recursos no autorizado

Mensaje de error:You do not have permission to perform ... If access was recently granted, please refresh your credentials.

Motivo: Service Connector requiere permisos para operar los recursos de Azure a los que quiere conectarse, con el fin de realizar operaciones de conexión en su nombre. Este error indica la falta de permisos necesarios en algunos recursos de Azure.

Mitigación: compruebe los permisos de los recursos de Azure especificados en el mensaje de error. Obtenga los permisos necesarios y vuelva a intentar la creación.

Falta de registro de suscripción

Mensaje de error:The subscription is not registered to use namespace 'Microsoft.KubernetesConfiguration'

Motivo: el conector de servicios requiere que la suscripción se registre para Microsoft.KubernetesConfiguration, que es el proveedor de recursos para las extensiones de clúster de Kubernetes habilitadas para Azure Arc.

Mitigación: registre el proveedor de recursos Microsoft.KubernetesConfiguration mediante la ejecución del siguiente comando. Para obtener más información sobre los errores de registro del proveedor de recursos, consulte este tutorial.

az provider register -n Microsoft.KubernetesConfiguration

Otros problemas

Si las mitigaciones anteriores no resuelven el problema, intente restablecer la extensión del clúster del conector de servicio quitandola y reintentando la creación. Se espera que este método resuelva la mayoría de los problemas relacionados con la extensión del clúster de Service Connector.

Use los siguientes comandos de la CLI para restablecer la extensión:

az extension add --name k8s-extension

az k8s-extension delete \
    --resource-group <MyClusterResourceGroup> \
    --cluster-name <MyCluster> \
    --cluster-type managedClusters \
    --name sc-extension

Pasos siguientes

Obtenga información sobre cómo integrar diferentes servicios de destino y lea sobre sus opciones de configuración y métodos de autenticación.