Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas wdrażania dodatku Open Service Mesh (OSM) dla usługi Azure Kubernetes Service (AKS) mogą wystąpić problemy związane z konfiguracją usługi Service Mesh. W tym artykule opisano typowe błędy rozwiązywania problemów i sposoby ich rozwiązywania.
Uwaga
Po wycofaniu usługi Open Service Mesh (OSM) przez Cloud Native Computing Foundation (CNCF) zalecamy zidentyfikowanie konfiguracji OSM i migrację ich do równoważnej konfiguracji istio. Aby uzyskać informacje na temat migracji z OSM do Istio, zobacz Wskazówki dotyczące migracji konfiguracji Open Service Mesh (OSM) do Istio.
Weryfikowanie i rozwiązywanie problemów ze składnikami OSM
Sprawdź wdrożenie, pod i usługę OSM Controller
Sprawdź wdrożenie kontrolera OSM, pod i kondycję zdrowia usługi przy użyciu polecenia
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-controller
Kontroler OSM w dobrej kondycji daje dane wyjściowe podobne do następujących przykładowych danych wyjściowych:
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
Uwaga
osm-controller
W przypadku usług adres CLUSTER-IP jest inny. Nazwa usługi i porty muszą być takie same jak w przykładowych danych wyjściowych.
Sprawdź wdrożenie, zasobnik i usługę injektora OSM
Sprawdź wdrożenie OSM, pod i kondycję usługi przy użyciu polecenia
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-injector
Iniektor OSM w dobrej kondycji daje dane wyjściowe podobne do następujących przykładowych danych wyjściowych:
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
Sprawdź wdrożenie, pod i usługę OSM Bootstrap
Sprawdź wdrożenie OSM, zasobnik i kondycję usługi za pomocą polecenia
kubectl get deployment,pod,service
.kubectl get deployment,pod,service -n kube-system --selector app=osm-bootstrap
OSM Bootstrap w dobrej kondycji daje dane wyjściowe podobne do następującego przykładowego wyniku:
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
Sprawdzanie walidacji imutowania elementów webhook
Sprawdź webhook walidujący OSM używając polecenia
kubectl get ValidatingWebhookConfiguration
.kubectl get ValidatingWebhookConfiguration --selector app=osm-controller
Prawidłowy webhook walidacyjny OSM daje wynik podobny do następującego przykładowego wyniku:
NAME WEBHOOKS AGE aks-osm-validator-mesh-osm 1 81m
Sprawdź OSM Mutating Webhook przy użyciu polecenia
kubectl get MutatingWebhookConfiguration
.kubectl get MutatingWebhookConfiguration --selector app=osm-injector
Zdrowy webhook mutujący OSM generuje dane wyjściowe podobne do następującego przykładowego wyniku.
NAME WEBHOOKS AGE aks-osm-webhook-osm 1 102m
Sprawdź usługę i pakiet CA dla webhooka weryfikującego.
Sprawdź pakiet certyfikatów CAs dla webhooka walidacji OSM przy użyciu polecenia
kubectl get ValidatingWebhookConfiguration
,aks-osm-validator-mesh-osm
ijq '.webhooks[0].clientConfig.service'
.kubectl get ValidatingWebhookConfiguration aks-osm-validator-mesh-osm -o json | jq '.webhooks[0].clientConfig.service'
Dobrze skonfigurowana konfiguracja walidującego webhooka wygląda jak poniższy przykładowy wynik JSON.
{ "name": "osm-config-validator", "namespace": "kube-system", "path": "/validate-webhook", "port": 9093 }
Sprawdź zestaw usługi i certyfikat CA webhooka modyfikującego.
Sprawdź pakiet usługi i pakiet certyfikatów CA mutującego webhooka OSM, używając polecenia
kubectl get ValidatingWebhookConfiguration
zaks-osm-validator-mesh-osm
ijq '.webhooks[0].clientConfig.service'
.kubectl get MutatingWebhookConfiguration aks-osm-webhook-osm -o json | jq '.webhooks[0].clientConfig.service'
Dobrze skonfigurowana konfiguracja mutowania elementu webhook wygląda podobnie do następujących przykładowych danych wyjściowych JSON:
{ "name": "osm-injector", "namespace": "kube-system", "path": "/mutate-pod-creation", "port": 9090 }
Sprawdź zasób osm-mesh-config
Sprawdź, czy zasób OSM MeshConfig istnieje przy użyciu
kubectl get meshconfig
polecenia .kubectl get meshconfig osm-mesh-config -n kube-system
Sprawdź zawartość zasobu OSM MeshConfig przy użyciu polecenia
kubectl get meshconfig
-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
wartości zasobów
Klucz | Typ | Wartość domyślna | Przykłady poleceń narzędzia Kubectl Patch |
---|---|---|---|
specyfikacja.ruch.włączWyjście | bool | true |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"enableEgress":true}}}' --type=merge |
spec.traffic.włączeniePermisywnegoTrybuPolitykiRuchu | 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 | tablica | [] |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"outboundPortExclusionList":[6379,8080]}}}' --type=merge |
spec.traffic.outboundIPRangeExclusionList | tablica | [] |
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.listaWykluczeńPortówPrzychodzących | tablica | [] |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"traffic":{"inboundPortExclusionList":[6379,8080]}}}' --type=merge |
specyfikacja.certyfikat.okresWażnościCertyfikatuUsługi | 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 (włączenie śledzenia) | 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 |
specyfikacja.obserwowalność.śledzenie.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.włączPolitykęEgress | 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 (flagi funkcji spec pozwalające na aktywne sprawdzanie zdrowia Envoy) | bool | "false" |
kubectl patch meshconfig osm-mesh-config -n kube-system -p '{"spec":{"featureFlags":{"enableEnvoyActiveHealthChecks":"false"}}}' --type=merge |
Sprawdź przestrzenie nazw
Uwaga
kube-system
Przestrzeń nazw nigdy nie uczestniczy w mesh'u usługowym i nigdy nie jest oznaczana ani etykietowana/adnotowana przy użyciu następujących kluczy/wartości.
Polecenie osm namespace add
umożliwia łączenie przestrzeni nazw z daną siatką usług. Jeśli chcesz, aby przestrzeń nazw K8s była częścią siatki, musi mieć następującą adnotację i etykietę.
Wyświetl adnotacje przy użyciu polecenia
kubectl get namespace
zjq '.metadata.annotations'
.kubectl get namespace bookbuyer -o json | jq '.metadata.annotations'
W danych wyjściowych musisz zobaczyć następującą adnotację:
{ "openservicemesh.io/sidecar-injection": "enabled" }
Wyświetl etykiety przy użyciu polecenia
kubectl get namespaces
zjq '.metadata.labels'
.kubectl get namespace bookbuyer -o json | jq '.metadata.labels'
W danych wyjściowych musi zostać wyświetlona następująca etykieta:
{ "openservicemesh.io/monitored-by": "osm" }
Jeśli przestrzeń nazw nie ma adnotacji "openservicemesh.io/sidecar-injection": "enabled"
ani etykiety "openservicemesh.io/monitored-by": "osm"
, OSM Injector nie dodaje kontenerów pomocniczych Envoy.
Uwaga
Po osm namespace add
wywołaniu, tylko nowe zasobniki są wstrzykiwane z przyczepki Envoy. Istniejące zasobniki należy ponownie uruchomić za pomocą polecenia kubectl rollout restart deployment ...
Weryfikacja CRD OSM
Sprawdź, czy klaster ma wymagane definicje CRD przy użyciu polecenia
kubectl get crds
.kubectl get crds
W klastrze muszą być zainstalowane następujące dyski CRD:
- 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
Uzyskaj wersje zainstalowanych CRD SMI za pomocą polecenia
osm mesh list
.osm mesh list
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
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
Kontroler OSM v0.11.1 wymaga następujących wersji:
- traffictargets.access.smi-spec.io — v1alpha3
- httproutegroups.specs.smi-spec.io — wersja 1alpha4
- tcproutes.specs.smi-spec.io — v1alpha4
- udproutes.specs.smi-spec.io — nieobsługiwane
- trafficsplits.split.smi-spec.io — v1alpha2
- *.metrics.smi-spec.io — v1alpha1
Zarządzanie certyfikatami
Aby uzyskać więcej informacji na temat tego, jak OSM wystawia i zarządza certyfikatami dla serwerów proxy Envoy uruchomionych na zasobnikach aplikacji, zobacz przewodnik po certyfikatach OSM.
Uaktualnianie Envoy
Po utworzeniu nowego poda w przestrzeni nazw monitorowanej przez dodatek, OSM wstrzykuje sidecar proxy Envoy do tego poda. Aby uzyskać więcej informacji na temat aktualizowania wersji programu Envoy, zobacz przewodnik uaktualniania OSM.
Azure Kubernetes Service