Solución de problemas de certificado de ca del complemento de malla de servicio Istio
En este artículo se describen los problemas comunes de solución de problemas con la característica de certificados de entidad de certificación (CA) del complemento Istio y ofrece soluciones para solucionar estos problemas. En el artículo también se revisa el proceso general de configuración de certificados de CA de complemento para el complemento de malla de servicio.
Nota:
En este artículo se supone que la revisión asm-1-21
de Istio se implementa en el clúster.
Requisitos previos
La herramienta kubectl de Kubernetes, o una herramienta similar, para conectarse al clúster. Para instalar kubectl mediante la CLI de Azure, ejecute el comando az aks install-cli .
Las siguientes herramientas de shell estándar de estilo Linux:
grep
sort
tail
awk
xargs
La herramienta jq para consultar datos JSON.
Proceso de configuración general
Antes de habilitar el complemento Istio para usar la característica de certificados de ENTIDAD de certificación del complemento, debe habilitar el proveedor de Azure Key Vault para el complemento Secrets Store en el clúster. Asegúrese de que Azure Key Vault y el clúster están en el mismo inquilino de Azure.
Una vez habilitado el complemento del proveedor de secretos de Azure Key Vault, debe configurar el acceso a Azure Key Vault para la identidad administrada asignada por el usuario que crea el complemento.
Después de conceder permiso para que la identidad administrada asignada por el usuario acceda a Azure Key Vault, puede usar la característica de certificados de entidad de certificación del complemento junto con el complemento Istio. Para obtener más información, consulte la sección Habilitar el complemento Istio para usar un certificado de ENTIDAD de certificación del complemento.
Para que el clúster detecte automáticamente los cambios en los secretos de Azure Key Vault, debe habilitar la rotación automática para el complemento del proveedor de secretos de Azure Key Vault.
Aunque los cambios en el certificado intermedio se aplican automáticamente, los cambios en el certificado raíz solo los recoge el plano de control después de reiniciar la
istiod
implementación mediante un cronjob que implementa el complemento, como se explica en la sección Recursos implementados . Este cronjob se ejecuta en un intervalo de 10 minutos.
Habilitar el complemento istio para usar un certificado de ENTIDAD de certificación del complemento
La característica de certificados de entidad de certificación del complemento Istio le permite configurar certificados intermedios y raíz del complemento para la malla. Para proporcionar información del certificado de complemento al habilitar el complemento, especifique los parámetros siguientes para el comando az aks mesh enable en la CLI de Azure.
Parámetro | Descripción |
---|---|
--key-vault-id <resource-id> |
Identificador de recurso de Azure Key Vault. Se espera que este recurso esté en el mismo inquilino que el clúster administrado. Este identificador de recurso debe estar en el formato de identificador de recurso de plantilla de Azure Resource Manager (plantilla de ARM). |
--root-cert-object-name <root-cert-obj-name> |
Nombre del objeto de certificado raíz en Azure Key Vault. |
--ca-cert-object-name <inter-cert-obj-name> |
Nombre del objeto de certificado intermedio en Azure Key Vault. |
--ca-key-object-name <inter-key-obj-name> |
Nombre del objeto de clave privada del certificado intermedio en Azure Key Vault. |
--cert-chain-object-name <cert-chain-obj-name> |
Nombre del objeto de cadena de certificados en Azure Key Vault. |
Si desea usar la característica certificados de entidad de certificación del complemento, debe especificar los cinco parámetros. Se espera que todos los objetos de Azure Key Vault sean del tipo Secret.
Para más información, consulte Plug in CA certificates for Istio-based service mesh add-on on on Azure Kubernetes Service (Complementos de certificados de ENTIDAD de certificación para el complemento de malla de servicio basado en Istio en Azure Kubernetes Service).
Recursos implementados
Como parte de la implementación del complemento para la característica de certificados de complemento, los siguientes recursos se implementan en el clúster:
El
cacerts
secreto de Kubernetes se crea en elaks-istio-system
espacio de nombres en el momento de la implementación del complemento. Este secreto contiene secretos de Azure Key Vault sincronizados:kubectl describe secret cacerts --namespace aks-istio-system
Name: cacerts Namespace: aks-istio-system Labels: secrets-store.csi.k8s.io/managed=true Annotations: <none> Type: opaque Data ==== ca-cert.pem: 1968 bytes ca-key.pem: 3272 bytes cert-chain.pem: 3786 bytes root-cert.pem: 3636 bytes
El
istio-spc-asm-1-21
objeto SecretProviderClass se crea en elaks-istio-system
espacio de nombres en el momento de la implementación del complemento. Este recurso contiene parámetros específicos de Azure para el controlador secrets Store Container Storage Interface (CSI):kubectl get secretproviderclass --namespace aks-istio-system
NAME AGE istio-spc-asm-1-21 14h
El
istio-ca-root-cert
configmap se crea en elaks-istio-system
espacio de nombres y en todos los espacios de nombres administrados por el usuario. Este configmap contiene el certificado raíz que usa la entidad de certificación y las cargas de trabajo de los espacios de nombres usan para validar la comunicación entre cargas de trabajo y carga de trabajo, como se indica a continuación:kubectl describe configmap istio-ca-root-cert --namespace aks-istio-system
Name: istio-ca-root-cert Namespace: aks-istio-system Labels: istio.io/config=true Annotations: <none> Data ==== root-cert.pem: ---- -----BEGIN CERTIFICATE----- <certificate data> -----END CERTIFICATE-----
El
istio-cert-validator-cronjob-asm-1-21
objeto cronjob se crea en elaks-istio-system
espacio de nombres . Este cronjob está programado para ejecutarse cada 10 minutos para comprobar si hay actualizaciones en el certificado raíz. Si el certificado raíz que se encuentra en elcacerts
secreto de Kubernetes no coincide con elistio-ca-root-cert
mapa de configuración en elaks-istio-system
espacio de nombres, reinicia laistiod-asm-1-21
implementación:kubectl get cronjob --namespace aks-istio-system
NAME SCHEDULE SUSPEND ACTIVE istio-cert-validator-cronjob-asm-1-21 */10 * * * * False 0
Puede ejecutar el siguiente comando para comprobar los registros cronjob de la última ejecución:
kubectl logs --namespace aks-istio-system $(kubectl get pods --namespace aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
Este comando genera uno de los siguientes mensajes de salida, en función de si se detectó una actualización del certificado raíz:
Root certificate update not detected.
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-21 restarted Deployment istiod-asm-1-21 restarted.
Determinación del tipo de certificado en los registros de implementación
Puede ver los istiod
registros de implementación para determinar si tiene un certificado de ENTIDAD de certificación autofirmado o un certificado de entidad de certificación del complemento. Para ver los registros, ejecute el siguiente comando:
kubectl logs deploy/istiod-asm-1-21 --container discovery --namespace aks-istio-system | grep -v validationController
Inmediatamente antes de cada entrada del registro de certificados es otra entrada de registro que describe ese tipo de certificado. Para un certificado de CA autofirmado, la entrada indica "No hay certificado conectado en etc/cacerts/ca-key.pem; Se usa el certificado autofirmado". Para un certificado de complemento, la entrada indica "Usar certificado conectado en etc/cacerts/ca-key.pem". Las entradas de registro de ejemplo que pertenecen a los certificados se muestran en las tablas siguientes.
Entradas de registro para un certificado de entidad de certificación autofirmado
Marca de tiempo Nivel de registro Mensaje 2023-11-20T23:27:36.649019Z info Uso del formato de archivo istiod para firmar archivos ca 2023-11-20T23:27:36.649032Z info No hay ningún certificado conectado en etc/cacerts/ca-key.pem; Se usa el certificado autofirmado 2023-11-20T23:27:36.649536Z info Certificado x509: <detalles del certificado> 2023-11-20T23:27:36.649552Z info Los certificados Istiod se vuelven a cargar 2023-11-20T23:27:36.649613Z info spiffe Se han agregado 1 certificados al dominio de confianza cluster.local en el comprobador de certificados del mismo nivel. Entradas de registro para un certificado de entidad de certificación del complemento
Marca de tiempo Nivel de registro Mensaje 2023-11-21T00:20:25.808396Z info Uso del formato de archivo istiod para firmar archivos ca 2023-11-21T00:20:25.808412Z info Uso del certificado conectado en etc/cacerts/ca-key.pem 2023-11-21T00:20:25.808731Z info Certificado x509: <detalles del certificado> 2023-11-21T00:20:25.808764Z info Certificado x509: <detalles del certificado> 2023-11-21T00:20:25.808799Z info Certificado x509: <detalles del certificado> 2023-11-21T00:20:25.808803Z info Los certificados Istiod se vuelven a cargar 2023-11-21T00:20:25.808873Z info spiffe Se han agregado 1 certificados al dominio de confianza cluster.local en el comprobador de certificados del mismo nivel.
Los detalles del certificado de una entrada de registro se muestran como valores separados por comas para el emisor, asunto, número de serie (SN, una cadena hexadecimal larga) y los valores de marca de tiempo inicial y final que definen cuándo el certificado es válido.
Para un certificado de ENTIDAD de certificación autofirmado, hay una entrada detallada. Los valores de ejemplo de este certificado se muestran en la tabla siguiente.
Emisor | Asunto | SN | NotBefore | NotAfter |
---|---|---|---|---|
"O=cluster.local" | "" | <Valor hexadecimal de 32 dígitos> | "2023-11-20T23:25:36Z" | "2033-11-17T23:27:36Z" |
Para un certificado de ENTIDAD de certificación del complemento, hay tres entradas detalladas. Las otras dos entradas son para una actualización del certificado raíz y un cambio en el certificado intermedio. Los valores de ejemplo de estas entradas se muestran en la tabla siguiente.
Emisor | Asunto | SN | NotBefore | NotAfter |
---|---|---|---|---|
CN=CA intermedia - A1,O=Istio,L=cluster-A1" | "" | <Valor hexadecimal de 32 dígitos> | "2023-11-21T00:18:25Z" | "2033-11-18T00:20:25Z" |
CN=Root A,O=Istio" | "CN=CA intermedia - A1,O=Istio,L=cluster-A1" | <Valor hexadecimal de 40 dígitos> | "2023-11-04T01:40:22Z" | "2033-11-01T01:40:22Z" |
CN=Root A,O=Istio" | "CN=Root A,O=Istio" | <Valor hexadecimal de 40 dígitos> | "2023-11-04T01:38:27Z" | "2033-11-01T01:38:27Z" |
Solucionar problemas comunes
Problema 1: El acceso a Azure Key Vault está configurado incorrectamente
Después de habilitar el complemento del proveedor de secretos de Azure Key Vault, debe conceder acceso a la identidad administrada asignada por el usuario del complemento a Azure Key Vault. La configuración del acceso a Azure Key Vault incorrectamente hace que la instalación del complemento se detenga.
kubectl get pods --namespace aks-istio-system
En la lista de pods, puede ver que los istiod-asm-1-21
pods están bloqueados en un Init:0/2
estado.
NOMBRE | LISTO | STATUS | REINICIO | AGE |
---|---|---|---|---|
istiod-asm-1-21-6fcfd88478-2x95b | 0/1 | Terminando | 0 | 5m55s |
istiod-asm-1-21-6fcfd88478-6x5hh | 0/1 | Terminando | 0 | 5m40s |
istiod-asm-1-21-6fcfd88478-c48f9 | 0/1 | Init:0/2 | 0 | 54s |
istiod-asm-1-21-6fcfd88478-wl8mw | 0/1 | Init:0/2 | 0 | 39 s |
Para comprobar el problema de acceso de Azure Key Vault, ejecute el kubectl get pods
comando para buscar pods que tengan la secrets-store-provider-azure
etiqueta en el kube-system
espacio de nombres:
kubectl get pods --selector app=secrets-store-provider-azure --namespace kube-system --output name | xargs -I {} kubectl logs --namespace kube-system {}
En la salida de ejemplo siguiente se muestra que se produjo un error "403 Prohibido" porque no tiene permisos "get" para secretos en Key Vault:
"failed to process mount request" err="failed to get objectType:secret, objectName:<secret-object-name>, objectVersion:: keyvault. BaseClient#GetSecret: Error al responder a la solicitud: StatusCode=403 -- Error original: autorest/azure: El servicio devolvió un error. Status=403 Code=\"Forbidden\" Message=\"The user, group or application 'appid=<appid>; oid=<oid>; iss=<iss' no tiene permiso de obtención de secretos> en el almacén de claves 'MyAzureKeyVault; location=eastus'. Para obtener ayuda para resolver este problema, consulte https://go.microsoft.com/fwlink/?linkid=2125287\" InnerError={\"code\":\"AccessDenied\"}"
Para solucionar este problema, configure el acceso a la identidad administrada asignada por el usuario para el complemento del proveedor de secretos de Azure Key Vault mediante la obtención de permisos Get y List en secretos de Azure Key Vault y vuelva a instalar el complemento Istio. En primer lugar, ejecute el comando az aks show para obtener el identificador de objeto de la identidad administrada asignada por el usuario para el complemento del proveedor de secretos de Azure Key Vault:
OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId')
Para establecer la directiva de acceso, ejecute el siguiente comando az keyvault set-policy especificando el identificador de objeto que obtuvo:
az keyvault set-policy --name $AKV_NAME --object-id $OBJECT_ID --secret-permissions get list
Nota:
¿Ha creado la instancia de Key Vault mediante la autorización de RBAC de Azure para el modelo de permisos en lugar de la directiva de acceso del almacén? En este caso, consulte Proporcionar acceso a claves, certificados y secretos de Key Vault con un control de acceso basado en roles de Azure para crear permisos para la identidad administrada. Agregue una asignación de roles de Azure para el Lector de Key Vault para la identidad administrada asignada por el usuario del complemento.
Problema 2: La detección automática de cambios en secretos de Key Vault no está configurada
Para que un clúster detecte automáticamente los cambios en los secretos de Azure Key Vault, debe habilitar la rotación automática para el complemento del proveedor de Azure Key Vault. La rotación automática puede detectar cambios en certificados intermedios y raíz automáticamente. Para un clúster que habilita el complemento del proveedor de Azure Key Vault, ejecute el siguiente az aks show
comando para comprobar si la rotación automática está habilitada:
az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.enableSecretRotation'
Si el clúster ha habilitado el complemento del proveedor de Azure Key Vault, ejecute el siguiente az aks show
comando para determinar el intervalo de sondeo de rotación:
az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.rotationPollInterval'
Los secretos de Azure Key Vault se sincronizan con el clúster cuando transcurre el tiempo del intervalo de sondeo después de la sincronización anterior. El valor de intervalo predeterminado es de dos minutos.
Problema 3: Faltan valores de certificado o se configuran incorrectamente
Si faltan objetos secretos en Azure Key Vault o si estos objetos están configurados incorrectamente, los istiod-asm-1-21
pods podrían quedarse bloqueados en un Init:0/2
estado, retrasando la instalación del complemento. Para encontrar la causa subyacente de este problema, ejecute el siguiente kubectl describe
comando en la istiod
implementación y vea la salida:
kubectl describe deploy/istiod-asm-1-21 --namespace aks-istio-system
El comando muestra eventos que podrían parecerse a la siguiente tabla de salida. En este ejemplo, un secreto que falta es la causa del problema.
Tipo | Motivo | Edad | De | Mensaje |
---|---|---|---|---|
Normal | Programadas | 3m9s | programador predeterminado | Se asignó correctamente aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj a aks-userpool-24672518-vmss00000000 |
Advertencia | FailedMount | 66s | kubelet | No se pueden adjuntar o montar volúmenes: volúmenes desmontados=[cacerts], volúmenes no conectados=[], no se pudieron procesar volúmenes=[]: se agotó el tiempo de espera en espera de la condición. |
Advertencia | FailedMount | 61s (x9 sobre 3m9s) | kubelet | Error de MountVolume.SetUp para el volumen "cacerts": error rpc: código = Desc desconocido = no se pudieron montar los objetos de almacén de secretos para pod aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj, err: rpc error: code = Unknown desc = failed to mount objects, error: failed to get objectType:secret, objectName:test-cert-chain, objectVersion:: keyvault. BaseClient#GetSecret: Error al responder a la solicitud: StatusCode=404 -- Error original: autorest/azure: El servicio devolvió un error. Status=404 Code="SecretNotFound" Message="No se encontró un secreto con test-cert-chain (name/id) en este almacén de claves. Si ha eliminado recientemente este secreto, puede recuperarlo mediante el comando de recuperación correcto. Para obtener ayuda para resolver este problema, consulte https://go.microsoft.com/fwlink/?linkid=2125182" |
Recursos
Solución de problemas generales del complemento de malla de servicio de Istio
Solución de problemas del complemento mesh de istio service meshConfig
Solución de problemas de puerta de enlace de entrada de complemento de Istio Service Mesh
Aviso de declinación de responsabilidades sobre la información de terceros
Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.
Aviso de declinación de responsabilidades sobre la información de contacto de terceros
Microsoft proporciona información de contacto de otros proveedores para ayudarle a encontrar información adicional sobre este tema. Esta información de contacto puede cambiar sin previo aviso. Microsoft no garantiza la precisión de esta información de contacto de terceros.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.