Azure Arc Open Service Mesh (förhandsversion)

Open Service Mesh (OSM) är ett enkelt, utökningsbart molninbyggt tjänstnät som gör det möjligt för användare att på ett enhetligt sätt hantera, skydda och få inbyggda observerbarhetsfunktioner för dynamiska mikrotjänstmiljöer.

OSM kör ett Envoy-baserat kontrollplan på Kubernetes, kan konfigureras med SMI-API:er och fungerar genom att mata in en Envoy-proxy som en sidovagnscontainer bredvid varje instans av ditt program. Läs mer om de service mesh-scenarier som aktiveras av Open Service Mesh.

Supportbegränsningar för Azure Arc-aktiverade Open Service Mesh

  • Endast en instans av Open Service Mesh kan distribueras på ett Azure Arc kubernetes-kluster.
  • Offentlig förhandsversion är tillgänglig för Open Service Mesh version v0.8.4 och senare. Ta reda på den senaste versionen av versionen här. Versioner som stöds läggs till med anteckningar. Ignorera de taggar som är associerade med mellanliggande versioner.
  • Följande Kubernetes-distributioner stöds för närvarande:
    • AKS-motor
    • AKS på HCI
    • Kluster-API Azure
    • Google Kubernetes Engine
    • Kanonisk Kubernetes-distribution
    • Rancher Kubernetes Engine
    • OpenShift Kubernetes-distribution
    • Amazon Elastic Kubernetes Service
  • Azure Monitor integrering med Azure Arc-aktiverad Open Service Mesh är tillgänglig med begränsat stöd.

Viktigt

Azure Arc Enabled Kubernetes Preview-funktioner är tillgängliga på en självbetjänings-och opt-in-basis. För hands versioner tillhandahålls "i befintligt skick" och "som tillgängliga" och de är undantagna från service avtals avtal och begränsad garanti. Azure Arc-aktiverade Kubernetes för hands versionerna omfattas delvis av kund supporten på bästa möjliga villkor.

Förutsättningar

  • Kontrollera att du har uppfyllt alla vanliga krav för klustertillägg som anges här.
  • Använd az k8s-extension CLI version >= v0.4.0

Installera Azure Arc Open Service Mesh (OSM) på ett Azure Arc kubernetes-kluster

Följande steg förutsätter att du redan har ett kluster med Kubernetes-distribution som stöds ansluten till Azure Arc.

Installera en specifik version av OSM

Kontrollera att kubeCONFIG-miljövariabeln pekar på kubeconfig för Kubernetes-klustret där du vill att OSM-tillägget ska installeras.

Ange miljövariablerna:

export VERSION=<osm-arc-version>
export CLUSTER_NAME=<arc-cluster-name>
export RESOURCE_GROUP=<resource-group-name>

När Azure Arc Open Service Mesh är i förhandsversion accepterar az k8s-extension create kommandot endast pilot flaggan --release-train . --auto-upgrade-minor-version är alltid inställt false på och en version måste anges. Om du har ett OpenShift-kluster använder du stegen i avsnittet.

az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --release-train pilot --name osm --version $VERSION

Du bör se utdata som liknar de utdata som visas nedan. Det kan ta 3–5 minuter för det faktiska OSM Helm-diagrammet att distribueras till klustret. Tills den här distributionen sker kommer du att fortsätta att se installState som Väntar.

{
  "autoUpgradeMinorVersion": false,
  "configurationSettings": {},
  "creationTime": "2021-04-29T17:50:11.4116524+00:00",
  "errorInfo": {
    "code": null,
    "message": null
  },
  "extensionType": "microsoft.openservicemesh",
  "id": "/subscriptions/<subscription-id>/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/osm",
  "identity": null,
  "installState": "Pending",
  "lastModifiedTime": "2021-04-29T17:50:11.4116525+00:00",
  "lastStatusTime": null,
  "location": null,
  "name": "osm",
  "releaseTrain": "pilot",
  "resourceGroup": "$RESOURCE_GROUP",
  "scope": {
    "cluster": {
      "releaseNamespace": "arc-osm-system"
    },
    "namespace": null
  },
  "statuses": [],
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "x.x.x"
}

Installera en specifik version av OSM på OpenShift-kluster

  1. Kopiera och spara följande innehåll i en JSON-fil. Om du redan har skapat en konfigurationsinställningsfil lägger du till följande rad i den befintliga filen för att bevara dina tidigare ändringar.

    {
        "osm.OpenServiceMesh.enablePrivilegedInitContainer": "true"
    }
    

    Ange filsökvägen som en miljövariabel:

    export SETTINGS_FILE=<json-file-path>
    
  2. Kör kommandot az k8s-extension create som används för att skapa OSM-tillägget och skicka in inställningsfilen med hjälp av konfigurationsinställningarna:

    az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --release-train pilot --name osm --version $VERSION --configuration-settings-file $SETTINGS_FILE
    
  3. Lägg till begränsningen för privilegierad säkerhetskontext till varje tjänstkonto för programmen i nätnätet.

    oc adm policy add-scc-to-user privileged -z <service account name> -n <service account namespace>
    

Det kan ta 3–5 minuter för det faktiska OSM Helm-diagrammet att distribueras till klustret. Tills den här distributionen sker kommer du att fortsätta att se installState som Väntar.

För att säkerställa att inställningen privilegierad init-container inte återställs till standardinställningen skickar du "osm. OpenServiceMesh.enablePrivilegedInitContainer" : "true" konfigurationsinställning för alla efterföljande kommandon för az k8s-extension create.

Installera Azure Arc OSM med arm-mall

När du har anslutit klustret till Azure Arc skapar du en json-fil med följande format och uppdaterar värdena <cluster-name> <osm-arc-version> och :

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "ConnectedClusterName": {
            "defaultValue": "<cluster-name>",
            "type": "String",
            "metadata": {
                "description": "The Connected Cluster name."
            }
        },
        "ExtensionInstanceName": {
            "defaultValue": "osm",
            "type": "String",
            "metadata": {
                "description": "The extension instance name."
            }
        },
        "ExtensionVersion": {
            "defaultValue": "<osm-arc-version>",
            "type": "String",
            "metadata": {
                "description": "The extension type version."
            }
        },
        "ExtensionType": {
            "defaultValue": "Microsoft.openservicemesh",
            "type": "String",
            "metadata": {
                "description": "The extension type."
            }
        },
        "ReleaseTrain": {
            "defaultValue": "Pilot",
            "type": "String",
            "metadata": {
                "description": "The release train."
            }
        }
    },
    "functions": [],
    "resources": [
        {
            "type": "Microsoft.KubernetesConfiguration/extensions",
            "apiVersion": "2020-07-01-preview",
            "name": "[parameters('ExtensionInstanceName')]",
            "properties": {
                "extensionType": "[parameters('ExtensionType')]",
                "releaseTrain": "[parameters('ReleaseTrain')]",
                "version": "[parameters('ExtensionVersion')]"
            },
            "scope": "[concat('Microsoft.Kubernetes/connectedClusters/', parameters('ConnectedClusterName'))]"
        }
    ]
}

Ange nu miljövariablerna:

export TEMPLATE_FILE_NAME=<template-file-path>
export DEPLOYMENT_NAME=<desired-deployment-name>

Kör slutligen det här kommandot för att installera OSM-tillägget via az CLI:

az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME

Nu bör du kunna visa OSM-resurserna och använda OSM-tillägget i klustret.

Verifiera Azure Arc Open Service Mesh-installation

Kör följande kommando.

az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name osm

Du bör se JSON-utdata som liknar utdata nedan:

{
  "autoUpgradeMinorVersion": false,
  "configurationSettings": {},
  "creationTime": "2021-04-29T19:22:00.7649729+00:00",
  "errorInfo": {
    "code": null,
    "message": null
  },
  "extensionType": "microsoft.openservicemesh",
  "id": "/subscriptions/<subscription-id>/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/osm",
  "identity": null,
  "installState": "Installed",
  "lastModifiedTime": "2021-04-29T19:22:00.7649731+00:00",
  "lastStatusTime": "2021-04-29T19:23:27.642+00:00",
  "location": null,
  "name": "osm",
  "releaseTrain": "pilot",
  "resourceGroup": "$RESOURCE_GROUP",
  "scope": {
    "cluster": {
      "releaseNamespace": "arc-osm-system"
    },
    "namespace": null
  },
  "statuses": [],
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "x.x.x"
}

Konfiguration av OSM-styrenhet

OSM distribuerar en MeshConfig-resurs osm-mesh-config som en del av dess kontrollplan i namnrymden arc-osm-system. Syftet med denna MeshConfig är att ge nätägaren/-operatorn möjlighet att uppdatera några av nätkonfigurationerna baserat på deras behov. Om du vill visa standardvärdena använder du följande kommando.

kubectl describe meshconfig osm-mesh-config -n arc-osm-system

Utdata skulle visa standardvärdena:

Certificate:
    Service Cert Validity Duration:  24h
  Feature Flags:
    Enable Egress Policy:      true
    Enable Multicluster Mode:  false
    Enable WASM Stats:         true
  Observability:
    Enable Debug Server:  false
    Osm Log Level:        info
    Tracing:
      Address:   jaeger.osm-system.svc.cluster.local
      Enable:    false
      Endpoint:  /api/v2/spans
      Port:      9411
  Sidecar:
    Config Resync Interval:            0s
    Enable Privileged Init Container:  false
    Envoy Image:                       mcr.microsoft.com/oss/envoyproxy/envoy:v1.18.3
    Init Container Image:              mcr.microsoft.com/oss/openservicemesh/init:v0.9.1
    Log Level:                         error
    Max Data Plane Connections:        0
    Resources:
  Traffic:
    Enable Egress:                          false
    Enable Permissive Traffic Policy Mode:  true
    Inbound External Authorization:
      Enable:              false
      Failure Mode Allow:  false
      Stat Prefix:         inboundExtAuthz
      Timeout:             1s
    Use HTTPS Ingress:     false

Mer information finns i config API-referensen. Observera att spec.traffic.enablePermissiveTrafficPolicyMode är inställt på true. Tillåtet trafikprincipläge i OSM är ett läge där tvingande SMI-trafikprincip kringgås. I det här läget identifierar OSM automatiskt tjänster som är en del av trafikprincipreglerna för tjänstnät och program på varje Envoy-proxysidavagn för att kunna kommunicera med dessa tjänster.

Göra ändringar i OSM-kontrollantens konfiguration

Anteckning

Värdena i MeshConfig osm-mesh-config bevaras mellan uppgraderingar.

Ändringar i osm-mesh-config kan göras med hjälp av kommandot kubectl patch. I följande exempel ändras läget för tillåtande trafikprincip till falskt.

kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":false}}}' --type=merge

Om ett felaktigt värde används förhindrar valideringar på MeshConfig CRD ändringen med ett felmeddelande som förklarar varför värdet är ogiltigt. Kommandot nedan visar till exempel vad som händer om vi korrigerar enableEgress till ett icke-booleskt värde.

kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"traffic":{"enableEgress":"no"}}}'  --type=merge

# Validations on the CRD will deny this change
The MeshConfig "osm-mesh-config" is invalid: spec.traffic.enableEgress: Invalid value: "string": spec.traffic.enableEgress in body must be of type boolean: "string"

Konfiguration av OSM-styrenhet (version v0.8.4)

För närvarande kan du komma åt och konfigurera OSM-styrenhetskonfigurationen via ConfigMap. Om du vill visa konfigurationsinställningarna för OSM-styrenheten frågar osm-config du ConfigMap via kubectl för att visa dess konfigurationsinställningar.

kubectl get configmap osm-config -n arc-osm-system -o json

Utdata:

{
  "egress": "false",
  "enable_debug_server": "false",
  "enable_privileged_init_container": "false",
  "envoy_log_level": "error",
  "permissive_traffic_policy_mode": "true",
  "prometheus_scraping": "true",
  "service_cert_validity_duration": "24h",
  "tracing_enable": "false",
  "use_https_ingress": "false"
}

Läs dokumentationen om OSM ConfigMap för att förstå var och en av de tillgängliga konfigurationerna.

Om du vill göra ändringar i OSM ConfigMap för version v0.8.4 använder du följande riktlinjer:

  1. Kopiera och spara de ändringar du vill göra i en JSON-fil. I det här exemplet ska vi ändra permissive_traffic_policy_mode från true till false. Varje gång du gör en ändring i måste du ange en fullständig lista över ändringar (jämfört med standardinställningen osm-config osm-config ) i en JSON-fil.

    {
        "osm.OpenServiceMesh.enablePermissiveTrafficPolicy" : "false"
    }
    

    Ange filsökvägen som en miljövariabel:

    export SETTINGS_FILE=<json-file-path>
    
  2. Kör samma kommando az k8s-extension create som användes för att skapa tillägget, men skicka nu konfigurationsinställningsfilen:

    az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --release-train pilot --name osm --version $VERSION --configuration-settings-file $SETTINGS_FILE
    

    Anteckning

    För att säkerställa att ConfigMap-ändringarna inte återställs till standardinställningarna skickar du samma konfigurationsinställningar till alla efterföljande az k8s-extension create-kommandon.

Använda Azure Arc Open Service Mesh

Om du vill börja använda OSM-funktioner måste du först publicera programnamnrymderna i tjänstnätet. Ladda ned OSM CLI från OSM GitHub versionssidan. När namnrymderna har lagts till i nätnätet kan du konfigurera SMI-principerna för att uppnå önskad OSM-funktion.

Publicera namnrymder i tjänstnätet

Lägg till namnområden i nätnätet genom att köra följande kommando:

osm namespace add <namespace_name>

Mer information om onboarding-tjänster finns här.

Konfigurera OSM med SMI-principer (Service Mesh Interface)

Du kan börja med ett demoprogram eller använda testmiljön för att testa SMI-principer.

Anteckning

Kontrollera att versionen av bokhandelsprogrammet som du kör matchar versionen av OSM-tillägget som är installerat i klustret. Exempel: Om du använder v0.8.4 av OSM-tillägget använder du bookstore-demonstrationen från release-v0.8-grenen av den överordnade OSM-lagringsplatsen.

Konfigurera dina egna Jaeger-, Prometheus- och Grafana-instanser

OSM-tillägget installerar inte tillägg som Jaeger, Prometheus och Grafana så att användarna kan integrera OSM med sina egna instanser av dessa verktyg som körs i stället. Om du vill integrera med dina egna instanser kan du läsa följande dokumentation:

Anteckning

Använd kommandona i OSM-GitHub dokumentationen med försiktighet. Se till att du använder rätt namnområdesnamn "arc-osm-system" när du gör ändringar i osm-mesh-config .

Övervaka program med Azure Monitor och Insights

Både Azure Monitor och Azure Application Insights hjälper dig att maximera tillgängligheten och prestandan för dina program och tjänster genom att leverera en heltäckande lösning för att samla in, analysera och agera utifrån telemetri från dina molnmiljöer och lokala miljöer.

Azure Arc Open Service Mesh har djupgående integreringar med båda dessa Azure-tjänster och ger en till synes olös Azure-upplevelse för att visa och svara på kritiska KPI:er som tillhandahålls av OSM-mått. Följ stegen nedan för att Azure Monitor att ta bort Prometheus-slutpunkter för att samla in programmått.

  1. Se till att de programnamnrymder som du vill ska övervakas är inbyggda i näten. Följ riktlinjerna som finns här.

  2. Exponera Prometheus-slutpunkterna för programnamnrymder.

    osm metrics enable --namespace <namespace1>
    osm metrics enable --namespace <namespace2>
    

    För v0.8.4 ser du till att prometheus_scraping är true inställt på i osm-config ConfigMap.

  3. Installera Azure Monitor med hjälp av vägledningen som finns här.

  4. Lägg till de namnområden som du vill övervaka i container-azm-ms-osmconfig ConfigMap. Ladda ned ConfigMap härifrån.

    monitor_namespaces = ["namespace1", "namespace2"]
    
  5. Kör följande kubectl-kommando

    kubectl apply -f container-azm-ms-osmconfig.yaml
    

Det kan ta upp till 15 minuter innan måtten visas i Log Analytics. Du kan prova att köra frågor mot tabellen InsightsMetrics.

InsightsMetrics
| where Name contains "envoy"
| extend t=parse_json(Tags)
| where t.app == "namespace1"

Läs mer om integrering med Azure Monitor här.

  1. Öppna ditt Azure Arc Kubernetes-kluster med den här länken.
  2. Gå till Azure Monitor gå till fliken Rapporter för att komma åt OSM-arbetsboken.
  3. Välj det tidsintervall som & för att begränsa dina tjänster.

OSM-arbetsbok

Fliken Begäranden

  • Den här fliken innehåller en sammanfattning av alla HTTP-begäranden som skickas via tjänst till tjänst i OSM.
  • Du kan visa alla tjänster och alla tjänster som den kommunicerar med genom att välja tjänsten i rutnätet.
  • Du kan visa totalt antal begäranden, förfrågningsfelfrekvens & P90-svarstid.
  • Du kan öka detaljnivå till målet och visa trender för HTTP-fel/lyckad kod, lyckade resultat, resursanvändning för poddar och svarstider i olika percentiler.

Fliken Anslutningar

  • Den här fliken innehåller en sammanfattning av alla anslutningar mellan dina tjänster i Open Service Mesh.
  • Utgående anslutningar: Totalt antal anslutningar mellan käll- och måltjänster.
  • Utgående aktiva anslutningar: Senaste antal aktiva anslutningar mellan källa och mål i det valda tidsperioden.
  • Utgående misslyckade anslutningar: Totalt antal misslyckade anslutningar mellan käll- och måltjänsten

Uppgradera OSM-tilläggsinstansen till en specifik version

Det kan uppstå avbrott i kontrollplanet under uppgraderingar. Dataplanet påverkas endast under CRD-uppgraderingar.

Uppgraderingar som stöds

OSM-tillägget kan uppgraderas upp till nästa delversion. Nedgradering och större versionsuppgraderingar stöds inte för närvarande.

CRD-uppgraderingar

OSM-tillägget kan inte uppgraderas till en ny version om den versionen innehåller CRD-versionsuppdateringar utan att ta bort de befintliga CRD:erna först. Du kan kontrollera om en OSM-uppgradering även innehåller CRD-versionsuppdateringar genom att kontrollera avsnittet CRD-uppdateringar i OSM-viktig information.

Se till att backa upp dina anpassade resurser innan du tar bort CRD:erna så att de enkelt kan återskapas efter uppgraderingen. Följ sedan uppgraderingsanvisningarna nedan.

Anteckning

Om du uppgraderar CRD:erna påverkas dataplanet eftersom SMI-principerna inte finns mellan den tidpunkt då de tas bort och den tidpunkt då de skapas igen.

Uppgraderingsanvisningar

  1. Ta bort de gamla CRD:erna och de anpassade resurserna (kör från roten på OSM-lagringsplatsen). Kontrollera att taggen för OSM CRD:erna motsvarar den nya versionen av diagrammet.

    kubectl delete --ignore-not-found --recursive -f ./charts/osm/crds/
    
    
  2. Install the updated CRDs.

    kubectl apply -f charts/osm/crds/
    
  3. Ange den nya diagramversionen som en miljövariabel:

    export VERSION=<chart version>
    
  4. Kör az k8s-extension create med den nya diagramversionen

    az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --release-train pilot --name osm --version $VERSION --configuration-settings-file $SETTINGS_FILE
    
  5. Återskapa anpassade resurser med nya CRD:er

Avinstallera Azure Arc Open Service Mesh

Ange följande kommando:

az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name osm -y

Kontrollera att tilläggsinstansen har tagits bort:

az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Dessa utdata bör inte innehålla OSM. Om du inte har några andra tillägg installerade i klustret är det bara en tom matris.

När du använder kommandot az k8s-extension för att ta bort OSM-tillägget tas inte namnområdet arc-osm-system bort och de faktiska resurserna i namnområdet (t.ex. att ändra webhookkonfiguration och osm-controller-pod) tar cirka 10 minuter att ta bort.

Anteckning

Använd cli-tillägget az k8s för att avinstallera OSM-komponenter som hanteras av Arc. Användning av OSM CLI för att avinstallera stöds inte av Arc och kan resultera i oönskade beteenden.

Felsökning

Se felsökningsguiden som finns här.

Nästa steg

Vill du bara prova något?
Kom igång snabbt med ett Azure Arc jumpstart-scenario med hjälp av kluster-API.