Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Al implementar el complemento Open Service Mesh (OSM) para Azure Kubernetes Service (AKS), es posible que experimente problemas relacionados con la configuración de la malla de servicios. El artículo explora los errores más comunes y cómo resolverlos.
Nota
Con la retirada de Open Service Mesh (OSM) de Cloud Native Computing Foundation (CNCF), se recomienda identificar las configuraciones de OSM y migrarlas a una configuración equivalente de Istio. Para obtener información sobre la migración de OSM a Istio, consulte Guía de migración para configuraciones de Open Service Mesh (OSM) a Istio.
Comprobación y solución de problemas de componentes de OSM
Comprobación de la implementación, el pod y el servicio del controlador de OSM
Compruebe la implementación de controlador OSM, el pod y el estado del servicio mediante el comando
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-controller
Un controlador OSM saludable da una salida similar a la siguiente salida de ejemplo:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/osm-controller 2/2 2 2 3m4s NAME READY STATUS RESTARTS AGE pod/osm-controller-65bd8c445c-zszp4 1/1 Running 0 2m pod/osm-controller-65bd8c445c-xqhmk 1/1 Running 0 16s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/osm-controller ClusterIP 10.96.185.178 <none> 15128/TCP,9092/TCP,9091/TCP 3m4s service/osm-validator ClusterIP 10.96.11.78 <none> 9093/TCP 3m4s
Nota
Para los servicios
osm-controller
, el CLUSTER-IP es diferente. El NOMBRE del servicio y los PUERTOS deben ser los mismos que los de la salida de ejemplo.
Comprobación de la implementación, el pod y el servicio del inyector de OSM
Compruebe la implementación del inyector OSM, el pod y el estado del servicio mediante el comando
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-injector
Un inyector OSM saludable da una salida similar a la siguiente salida de ejemplo:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/osm-injector 2/2 2 2 4m37s NAME READY STATUS RESTARTS AGE pod/osm-injector-5c49bd8d7c-b6cx6 1/1 Running 0 4m21s pod/osm-injector-5c49bd8d7c-dx587 1/1 Running 0 4m37s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/osm-injector ClusterIP 10.96.236.108 <none> 9090/TCP 4m37s
Compruebe la implementación, el pod y el servicio de arranque OSM
Compruebe la implementación de arranque OSM, el pod y el estado del servicio mediante el comando
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-bootstrap
Un arranque OSM saludable da una salida similar a la siguiente salida de ejemplo:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/osm-bootstrap 1/1 1 1 5m25s NAME READY STATUS RESTARTS AGE pod/osm-bootstrap-594ffc6cb7-jc7bs 1/1 Running 0 5m25s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/osm-bootstrap ClusterIP 10.96.250.208 <none> 9443/TCP,9095/TCP 5m25s
Comprobación de la validación y mutación de webhooks
Compruebe el webhook de validación de OSM utilizando el comando
kubectl get ValidatingWebhookConfiguration
.kubectl get ValidatingWebhookConfiguration --selector app=osm-controller
Un webhook de validación OSM en buen estado da una salida similar a la del siguiente ejemplo:
NAME WEBHOOKS AGE aks-osm-validator-mesh-osm 1 81m
Compruebe el webhook mutante OSM utilizando el comando
kubectl get MutatingWebhookConfiguration
.kubectl get MutatingWebhookConfiguration --selector app=osm-injector
Un webhook mutante OSM saludable da una salida similar a la siguiente salida de ejemplo:
NAME WEBHOOKS AGE aks-osm-webhook-osm 1 102m
Comprobación del servicio y del paquete CA del webhook de validación
Comprueba el servicio y el paquete CA del webhook de validación de OSM utilizando el comando
kubectl get ValidatingWebhookConfiguration
conaks-osm-validator-mesh-osm
yjq '.webhooks[0].clientConfig.service'
.kubectl get ValidatingWebhookConfiguration aks-osm-validator-mesh-osm -o json | jq '.webhooks[0].clientConfig.service'
Una configuración de webhook de validación bien configurada es similar a la siguiente salida JSON de ejemplo:
{ "name": "osm-config-validator", "namespace": "kube-system", "path": "/validate-webhook", "port": 9093 }
Compruebe el servicio y el conjunto de CA del webhook mutante
Compruebe el servicio y el conjunto de CA del webhook mutante de OSM utilizando el comando
kubectl get ValidatingWebhookConfiguration
conaks-osm-validator-mesh-osm
yjq '.webhooks[0].clientConfig.service'
.kubectl get MutatingWebhookConfiguration aks-osm-webhook-osm -o json | jq '.webhooks[0].clientConfig.service'
Una configuración del webhook mutante bien configurada se parece a la siguiente salida JSON de ejemplo:
{ "name": "osm-injector", "namespace": "kube-system", "path": "/mutate-pod-creation", "port": 9090 }
Comprobación del recurso osm-mesh-config
Compruebe que el recurso OSM MeshConfig existe mediante el comando
kubectl get meshconfig
.kubectl get meshconfig osm-mesh-config -n kube-system
Compruebe el contenido del recurso OSM MeshConfig mediante el comando
kubectl get meshconfig
con-o yaml
.kubectl get meshconfig osm-mesh-config -n kube-system -o yaml
apiVersion: config.openservicemesh.io/v1alpha1 kind: MeshConfig metadata: creationTimestamp: "0000-00-00A00:00:00A" generation: 1 name: osm-mesh-config namespace: kube-system resourceVersion: "2494" uid: 6c4d67f3-c241-4aeb-bf4f-b029b08faa31 spec: certificate: serviceCertValidityDuration: 24h featureFlags: enableEgressPolicy: true enableMulticlusterMode: false enableWASMStats: true observability: enableDebugServer: true osmLogLevel: info tracing: address: jaeger.kube-system.svc.cluster.local enable: false endpoint: /api/v2/spans port: 9411 sidecar: configResyncInterval: 0s enablePrivilegedInitContainer: false envoyImage: mcr.microsoft.com/oss/envoyproxy/envoy:v1.18.3 initContainerImage: mcr.microsoft.com/oss/openservicemesh/init:v0.9.1 logLevel: error maxDataPlaneConnections: 0 resources: {} traffic: enableEgress: true enablePermissiveTrafficPolicyMode: true inboundExternalAuthorization: enable: false failureModeAllow: false statPrefix: inboundExtAuthz timeout: 1s useHTTPSIngress: false
osm-mesh-config
valores del recurso
Clave | Tipo | Valor predeterminado | Ejemplos de comandos de revisión de Kubectl |
---|---|---|---|
spec.traffic.enableEgress | bool | true |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"enableEgress":true}}}' --type=merge |
spec.traffic.enablePermissiveTrafficPolicyMode | bool | true |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":true}}}' --type=merge |
spec.traffic.useHTTPSIngress | bool | false |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"useHTTPSIngress":true}}}' --type=merge |
spec.traffic.outboundPortExclusionList | array | [] |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"outboundPortExclusionList":[6379,8080]}}}' --type=merge |
spec.traffic.outboundIPRangeExclusionList | array | [] |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"outboundIPRangeExclusionList":["10.0.0.0/32","1.1.1.1/24"]}}}' --type=merge |
spec.traffic.inboundPortExclusionList | array | [] |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"inboundPortExclusionList":[6379,8080]}}}' --type=merge |
spec.certificate.serviceCertValidityDuration | string | "24h" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"certificate":{"serviceCertValidityDuration":"24h"}}}' --type=merge |
spec.observability.enableDebugServer | bool | true |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"observability":{"enableDebugServer":true}}}' --type=merge |
spec.observability.tracing.enable | bool | false |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"observability":{"tracing":{"enable":true}}}}' --type=merge |
spec.observability.tracing.address | string | "jaeger.kube-system.svc.cluster.local" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"observability":{"tracing":{"address": "jaeger.kube-system.svc.cluster.local"}}}}' --type=merge |
spec.observability.tracing.endpoint | string | "/api/v2/spans" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"observability":{"tracing":{"endpoint":"/api/v2/spans"}}}}' --type=merge' --type=merge |
spec.observability.tracing.port | int | 9411 |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"observability":{"tracing":{"port":9411}}}}' --type=merge |
spec.observability.tracing.osmLogLevel | string | "info" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"observability":{"tracing":{"osmLogLevel": "info"}}}}' --type=merge |
spec.sidecar.enablePrivilegedInitContainer | bool | false |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"sidecar":{"enablePrivilegedInitContainer":true}}}' --type=merge |
spec.sidecar.logLevel | string | "error" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"sidecar":{"logLevel":"error"}}}' --type=merge |
spec.sidecar.maxDataPlaneConnections | int | 0 |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"sidecar":{"maxDataPlaneConnections":"error"}}}' --type=merge |
spec.sidecar.envoyImage | string | "mcr.microsoft.com/oss/envoyproxy/envoy:v1.19.1" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"sidecar":{"envoyImage":"mcr.microsoft.com/oss/envoyproxy/envoy:v1.19.1"}}}' --type=merge |
spec.sidecar.initContainerImage | string | "mcr.microsoft.com/oss/openservicemesh/init:v0.11.1" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"sidecar":{"initContainerImage":"mcr.microsoft.com/oss/openservicemesh/init:v0.11.1"}}}' --type=merge |
spec.sidecar.configResyncInterval | string | "0s" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"sidecar":{"configResyncInterval":"30s"}}}' --type=merge |
spec.featureFlags.enableWASMStats | bool | "true" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableWASMStats":"true"}}}' --type=merge |
spec.featureFlags.enableEgressPolicy | bool | "true" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableEgressPolicy":"true"}}}' --type=merge |
spec.featureFlags.enableMulticlusterMode | bool | "false" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableMulticlusterMode":"false"}}}' --type=merge |
spec.featureFlags.enableSnapshotCacheMode | bool | "false" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableSnapshotCacheMode":"false"}}}' --type=merge |
spec.featureFlags.enableAsyncProxyServiceMapping | bool | "false" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableAsyncProxyServiceMapping":"false"}}}' --type=merge |
spec.featureFlags.enableIngressBackendPolicy | bool | "true" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableIngressBackendPolicy":"true"}}}' --type=merge |
spec.featureFlags.enableEnvoyActiveHealthChecks | bool | "false" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableEnvoyActiveHealthChecks":"false"}}}' --type=merge |
Comprobación de espacios de nombres
Nota
El espacio de nombres kube-system
nunca participa en una malla de servicios y nunca se etiqueta y/o anota con la siguiente clave/valores.
El comando osm namespace add
permite unir espacios de nombres a una malla de servicios determinada. Cuando desee que un espacio de nombres K8s forme parte de la malla, debe tener la siguiente anotación y etiqueta.
Vea las anotaciones mediante el comando
kubectl get namespace
conjq '.metadata.annotations'
.kubectl get namespace bookbuyer -o json | jq '.metadata.annotations'
Debe ver la siguiente anotación en la salida:
{ "openservicemesh.io/sidecar-injection": "enabled" }
Vea las etiquetas utilizando el comando
kubectl get namespaces
conjq '.metadata.labels'
.kubectl get namespace bookbuyer -o json | jq '.metadata.labels'
Debe ver la siguiente etiqueta en la salida:
{ "openservicemesh.io/monitored-by": "osm" }
Si un espacio de nombres no tiene la anotación "openservicemesh.io/sidecar-injection": "enabled"
o la etiqueta "openservicemesh.io/monitored-by": "osm"
, el Inyector OSM no agrega Envoy sidecars.
Nota
Después osm namespace add
se llama, solo las nuevos pods se inyectan con un sidecar Envoy. Los pods existentes deben reiniciarse con kubectl rollout restart deployment ...
Compruebe los CRD de OSM
Compruebe que el clúster dispone de los CRD necesarios mediante el comando
kubectl get crds
.kubectl get crds
Los siguientes CRD deben estar instalados en el cluster:
- egresses.policy.openservicemesh.io
- httproutegroups.specs.smi-spec.io
- ingressbackends.policy.openservicemesh.io
- meshconfigs.config.openservicemesh.io
- multiclusterservices.config.openservicemesh.io
- tcproutes.specs.smi-spec.io
- trafficsplits.split.smi-spec.io
- traffictargets.access.smi-spec.io
Obtenga las versiones de los CRD de SMI instalados utilizando el comando
osm mesh list
.osm mesh list
El resultado debería ser similar al ejemplo siguiente:
MESH NAME MESH NAMESPACE VERSION ADDED NAMESPACES osm kube-system v0.11.1 MESH NAME MESH NAMESPACE SMI SUPPORTED osm kube-system HTTPRouteGroup:v1alpha4,TCPRoute:v1alpha4,TrafficSplit:v1alpha2,TrafficTarget:v1alpha3 To list the OSM controller pods for a mesh, please run the following command passing in the mesh's namespace kubectl get pods -n <osm-mesh-namespace> -l app=osm-controller
El controlador de OSM 0.11.1 requiere las siguientes versiones:
Administración de certificados
Para obtener más información sobre cómo OSM emite y administra certificados para proxies Envoy que se ejecutan en pods de aplicaciones, consulte la guía de certificados OSM.
Actualización de Envoy
Cuando se crea un nuevo pod en un espacio de nombres supervisado por el complemento, OSM insertará un sidecar de proxy Envoy en ese pod. Para obtener más información sobre cómo actualizar la versión de Envoy, consulte la guía de actualización de OSM.
Azure Kubernetes Service