Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao implantar o complemento Open Service Mesh (OSM) para o Serviço de Kubernetes do Azure (AKS), você poderá enfrentar problemas associados à configuração da malha de serviço. O artigo explora erros comuns de solução de problemas e como resolvê-los.
Observação
Com a desativação do Open Service Mesh (OSM) pela Cloud Native Computing Foundation (CNCF), recomendamos identificar suas configurações de OSM e migrá-las para uma configuração equivalente do Istio. Para obter informações sobre como migrar do OSM para o Istio, consulte Diretrizes de migração para configurações do OSM (Open Service Mesh) para o Istio.
Verificando e solucionando problemas de componentes OSM
Confira o serviço, o pod e a implantação do controlador de OSM
Verifique a implantação, o pod e a integridade do serviço do controlador OSM usando o comando
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-controller
Um controlador OSM íntegro fornece uma saída semelhante à seguinte saída de exemplo:
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
Observação
Para os serviços
osm-controller
, o CLUSTER-IP é diferente. O NOME e as PORTA(S) do serviço devem ser iguais aos da saída de exemplo.
Confira o serviço, o pod e a implantação do injetor de OSM
Verifique a implantação, o pod e a integridade do serviço do injetor OSM usando o comando
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-injector
Um injetor OSM íntegro fornece uma saída semelhante à seguinte saída de exemplo:
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
Confira o serviço, o pod e a implantação da inicialização de OSM
Verifique a implantação, o pod e a integridade do serviço do bootstrap OSM usando o comando
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-bootstrap
Um Bootstrap OSM íntegro fornece uma saída semelhante à seguinte saída de exemplo:
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
Verificar a validação e mutação de webhooks
Verifique o webhook de validação OSM usando o comando
kubectl get ValidatingWebhookConfiguration
.kubectl get ValidatingWebhookConfiguration --selector app=osm-controller
Um webhook de validação de OSM íntegro fornece uma saída semelhante à seguinte saída de exemplo:
NAME WEBHOOKS AGE aks-osm-validator-mesh-osm 1 81m
Verifique o webhook de mutação de OSM usando o comando
kubectl get MutatingWebhookConfiguration
.kubectl get MutatingWebhookConfiguration --selector app=osm-injector
Um webhook de mutação de OSM íntegro fornece uma saída semelhante à seguinte saída de exemplo:
NAME WEBHOOKS AGE aks-osm-webhook-osm 1 102m
Verifique o serviço e o pacote de AC do webhook de validação
Verifique o serviço e o pacote de AC do webhook de validação OSM usando o comando
kubectl get ValidatingWebhookConfiguration
comaks-osm-validator-mesh-osm
ejq '.webhooks[0].clientConfig.service'
.kubectl get ValidatingWebhookConfiguration aks-osm-validator-mesh-osm -o json | jq '.webhooks[0].clientConfig.service'
Uma configuração de webhook de validação bem configurada é semelhante à seguinte saída JSON de exemplo:
{ "name": "osm-config-validator", "namespace": "kube-system", "path": "/validate-webhook", "port": 9093 }
Verifique o serviço e o pacote de AC do webhook de mutação
Verifique o serviço e o pacote de AC do webhook de mutação OSM usando o comando
kubectl get ValidatingWebhookConfiguration
comaks-osm-validator-mesh-osm
ejq '.webhooks[0].clientConfig.service'
.kubectl get MutatingWebhookConfiguration aks-osm-webhook-osm -o json | jq '.webhooks[0].clientConfig.service'
Uma configuração de webhook de mutação bem configurada é semelhante à seguinte saída JSON de exemplo:
{ "name": "osm-injector", "namespace": "kube-system", "path": "/mutate-pod-creation", "port": 9090 }
Verifique o recurso osm-mesh-config
Verifique se o recurso MeshConfig do OSM existe usando o comando
kubectl get meshconfig
.kubectl get meshconfig osm-mesh-config -n kube-system
Verifique o conteúdo do recurso MeshConfig do OSM usando o comando
kubectl get meshconfig
com-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 de recurso
Chave | Type | Valor padrão | Exemplos de comando do Patch 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 | cadeia de caracteres | "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 |
Verificar namespaces
Observação
O namespace kube-system
nunca participa em uma malha de serviço e nunca é rotulado e/ou anotado com a chave/valores a seguir.
O comando osm namespace add
permite ingressar namespaces em uma malha de serviço específica. Quando você deseja que um namespace K8s faça parte da malha, ele deve ter a anotação e o rótulo a seguir.
Exiba as anotações usando o comando
kubectl get namespace
comjq '.metadata.annotations'
.kubectl get namespace bookbuyer -o json | jq '.metadata.annotations'
Você deve ver a seguinte anotação na saída:
{ "openservicemesh.io/sidecar-injection": "enabled" }
Exiba os rótulos usando o comando
kubectl get namespaces
comjq '.metadata.labels'
.kubectl get namespace bookbuyer -o json | jq '.metadata.labels'
Você deve ver o seguinte rótulo na saída:
{ "openservicemesh.io/monitored-by": "osm" }
Se um namespace não tiver a anotação "openservicemesh.io/sidecar-injection": "enabled"
ou o rótulo "openservicemesh.io/monitored-by": "osm"
, o Injetor OSM não adicionará sidecars do Envoy.
Observação
Depois que osm namespace add
é chamado, apenas pods novos são injetados com um sidecar do Envoy. Os pods existentes devem ser reiniciados com kubectl rollout restart deployment ...
Verifique os CRDs de OSM
Verifique se o cluster tem os CRDs necessários usando o comando
kubectl get crds
.kubectl get crds
Os seguintes CRDs devem ser instalados no 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
Obtenha as versões dos SMI CRDs instalados usando o comando
osm mesh list
.osm mesh list
Seu resultado deve ser semelhante ao seguinte exemplo de saída:
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
O Controlador de OSM v0.11.1 requer as seguintes versões:
Gerenciamento de certificados
Para obter mais informações sobre como o OSM emite e gerencia certificados para o proxies do Envoy em execução nos pods de aplicativo, confira o guia de certificados do OSM.
Atualizando o Envoy
Quando você cria um novo pod em um namespace monitorado pelo complemento, o OSM injeta um proxy de sidecar do Envoy nesse pod. Para obter mais informações sobre como atualizar a versão do Envoy, confira o guia de atualização do OSM.
Azure Kubernetes Service