Implantar o complemento Open Service Mesh usando o Bicep no Serviço de Kubernetes do Azure (AKS)

Este artigo mostra como implantar o complemento Open Service Mesh (OSM) no Serviço de Kubernetes do Azure (AKS) utilizando um modelo Bicep.

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.

Importante

Com base na versão do Kubernetes que seu cluster está executando, o complemento OSM instala uma versão diferente do OSM.

Versão do Kubernetes Versão OSM instalada
1.24.0 ou superior 1.2.5
Entre 1.23.5 e 1.24.0 1.1.3
Abaixo de 1.23.5 1.0.0

As versões mais antigas do OSM podem não estar disponíveis para instalação ou não ter suporte ativo se a versão correspondente do AKS tiver atingido o fim da vida útil. Você pode conferir o calendário de lançamento do Kubernetes do AKS para obter informações sobre as janelas de suporte à versão do AKS.

O Bicep é uma linguagem específica de domínio que usa a sintaxe declarativa para implantar recursos do Azure. Use o Bicep no lugar da criação de modelos do Azure Resource Manager para implantar recursos de infraestrutura como código do Azure.

Antes de começar

Antes de começar, você deve fazer os seguintes pré-requisitos:

Instalar o complemento do OSM em um novo cluster do AKS usando o Bicep

Para a implantação de um novo cluster do AKS, habilite o complemento do OSM na criação do cluster. As instruções a seguir usam um modelo Bicep genérico que implanta um cluster do AKS usando discos efêmeros e o adaptador de rede do contêiner kubenet e habilita o complemento do OSM. Para cenários de implantação mais avançados, consulte O que é o Bicep?

Criar um grupos de recursos

  • Crie um grupo de recursos usando o comando az group create.

    az group create --name <my-osm-bicep-aks-cluster-rg> --location <azure-region>
    

Criar os arquivos principais e de parâmetros do Bicep

  1. Crie um diretório para armazenar os arquivos de implantação do Bicep necessários. O seguinte exemplo cria um diretório chamado bicep-osm-aks-addon e alterna para o diretório:

    mkdir bicep-osm-aks-addon
    cd bicep-osm-aks-addon
    
  2. Criar o arquivo principal e o arquivo de parâmetros.

    touch osm.aks.bicep && touch osm.aks.parameters.json
    
  3. Abra o arquivo osm.aks.bicep e copie o seguinte conteúdo:

    // https://learn.microsoft.com/azure/aks/troubleshooting#what-naming-restrictions-are-enforced-for-aks-resources-and-parameters
    @minLength(3)
    @maxLength(63)
    @description('Provide a name for the AKS cluster. The only allowed characters are letters, numbers, dashes, and underscore. The first and last character must be a letter or a number.')
    param clusterName string
    @minLength(3)
    @maxLength(54)
    @description('Provide a name for the AKS dnsPrefix. Valid characters include alphanumeric values and hyphens (-). The dnsPrefix can\'t include special characters such as a period (.)')
    param clusterDNSPrefix string
    param k8Version string
    param sshPubKey string
    param location string
    param adminUsername string
    
    
    resource aksCluster 'Microsoft.ContainerService/managedClusters@2021-03-01' = {
      name: clusterName
      location: location
      identity: {
        type: 'SystemAssigned'
      }
      properties: {
        kubernetesVersion: k8Version
        dnsPrefix: clusterDNSPrefix
        enableRBAC: true
        agentPoolProfiles: [
          {
            name: 'agentpool'
            count: 3
            vmSize: 'Standard_DS2_v2'
            osDiskSizeGB: 30
            osDiskType: 'Ephemeral'
            osType: 'Linux'
            mode: 'System'
          }
        ]
        linuxProfile: {
          adminUsername: adminUserName
          ssh: {
            publicKeys: [
              {
                keyData: sshPubKey
              }
            ]
          }
        }
        addonProfiles: {
            openServiceMesh: {
                enabled: true
                config: {}
          }
        }
      }
    }
    
  4. Abra o arquivo osm.aks.parameters.json e copie o seguinte conteúdo. Verifique se você substituiu os valores dos parâmetros de implantação por seus próprios valores.

    Observação

    O arquivo osm.aks.parameters.json é um exemplo de arquivo de parâmetros de modelo necessário para a implantação do Bicep. Atualize os parâmetros especificamente para seu ambiente de implantação. Os parâmetros para os quais você precisa adicionar valores incluem: clusterName, clusterDNSPrefix, k8Version, sshPubKey, location e adminUsername. Para localizar uma lista de versões do Kubernetes com suporte na sua região, use o comando az aks get-versions --location <region>.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "clusterName": {
          "value": "<YOUR CLUSTER NAME HERE>"
        },
        "clusterDNSPrefix": {
          "value": "<YOUR CLUSTER DNS PREFIX HERE>"
        },
        "k8Version": {
          "value": "<YOUR SUPPORTED KUBERNETES VERSION HERE>"
        },
        "sshPubKey": {
          "value": "<YOUR SSH KEY HERE>"
        },
        "location": {
          "value": "<YOUR AZURE REGION HERE>"
        },
        "adminUsername": {
          "value": "<YOUR ADMIN USERNAME HERE>"
        }
      }
    }
    

Implantar os arquivos Bicep

  1. Abra um terminal e autentique-se na sua conta do Azure para a CLI do Azure utilizando o comando az login.

  2. Implantar os arquivos do Bicep utilizando o comando az deployment group create.

    az deployment group create \
      --name OSMBicepDeployment \
      --resource-group osm-bicep-test \
      --template-file osm.aks.bicep \
      --parameters @osm.aks.parameters.json
    

Validar a instalação do complemento do OSM

  1. Consultar os perfis de complemento do cluster para verificar o estado habilitado dos complementos instalados. O seguinte comando retornará true:

    az aks list -g <my-osm-aks-cluster-rg> -o json | jq -r '.[].addonProfiles.openServiceMesh.enabled'
    
  2. Obtenha o status do osm-controller utilizando os seguintes comandos kubectl.

    kubectl get deployments -n kube-system --selector app=osm-controller
    kubectl get pods -n kube-system --selector app=osm-controller
    kubectl get services -n kube-system --selector app=osm-controller
    

Acessar a configuração do complemento do OSM

Você pode configurar o controlador OSM usando o recurso OSM MeshConfig e pode exibir as configurações do controlador OSM utilizando a CLI do Azure.

  • Exiba as configurações do controlador OSM utilizando o comando kubectl get.

    kubectl get meshconfig osm-mesh-config -n kube-system -o yaml
    

    Esta é um exemplo de saída de MeshConfig:

    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.osm-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
    

    Observe que enablePermissiveTrafficPolicyMode está configurado como true. No OSM, o modo de política de tráfego permissivo ignora a imposição de política de tráfego SMI. Neste modo, o OSM descobre automaticamente serviços que são uma parte da malha de serviço. Os serviços descobertos terão regras de política de tráfego programadas em cada sidecar de proxy Envoy para permitir as comunicações entre esses serviços.

    Aviso

    Antes de prosseguir, verifique se o modo de política de tráfego permissivo está definido como true. Se não for o caso, altere-o para true utilizando o seguinte comando:

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

Limpar os recursos

Próximas etapas

Este artigo mostrou como instalar o complemento do OSM em um cluster do AKS e verificar se ele está funcionando. Com o complemento do OSM instalado no cluster, você pode implantar um aplicativo de exemplo ou integrar um aplicativo existente para trabalhar com a malha do OSM.