Azure Kubernetes Service (AKS) で Bicep を使って Open Service Mesh アドオンをデプロイする

この記事では、Bicep テンプレートを使って Open Service Mesh (OSM) アドオンを Azure Kubernetes Service (AKS) にデプロイする方法について説明します。

Note

Cloud Native Computing Foundation (CNCF) による Open Service Mesh (OSM) の廃止に伴い、OSM 構成を特定して、同等の Istio 構成に移行することをお勧めします。 OSM から Istio への移行の詳細については、「Open Service Mesh (OSM) 構成から Istio への移行ガイダンス」を参照してください。

重要

OSM アドオンによってインストールされる OSM のバージョンは、クラスターで実行されている Kubernetes のバージョンによって異なります。

Kubernetes バージョン インストールされる OSM バージョン
1.24.0 以降 1.2.5
1.23.5 から 1.24.0 1.1.3
1.23.5 未満 1.0.0

対応する AKS バージョンのサポート期間が終了すると、古いバージョンの OSM がインストールできない場合や、アクティブなサポートが提供されない場合があります。 AKS バージョンのサポート ウィンドウについては、AKS Kubernetes リリース カレンダーをご確認ください。

Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語です。 Azure Resource Manager テンプレートを作成する代わりに Bicep を使用して、コードとしてのインフラストラクチャ Azure リソースをデプロイできます。

準備

始める前に、以下の前提条件を満たしていることを確認してください。

Bicep を使用して新しい AKS クラスターに OSM アドオンをインストールする

新しい AKS クラスターをデプロイする場合は、クラスター作成時に OSM アドオンを有効にします。 次の手順では、エフェメラル ディスクと kubenet コンテナー ネットワーク インターフェイスを使用して AKSクラスターをデプロイし、その後 OSM アドオンを有効にする、汎用 Bicep テンプレートを使用します。 より高度なデプロイ シナリオについては、「Bicep とは」を参照してください。

リソース グループを作成する

  • az group create コマンドを使用して、リソース グループを作成します。

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

メインとパラメーターの Bicep ファイルを作成する

  1. 必要な Bicep デプロイ ファイルを格納するディレクトリを作成します。 次の例では、bicep-osm-aks-addon という名前のディレクトリを作成して、そのディレクトリに移動します。

    mkdir bicep-osm-aks-addon
    cd bicep-osm-aks-addon
    
  2. メイン ファイルとパラメーター ファイルを作成します。

    touch osm.aks.bicep && touch osm.aks.parameters.json
    
  3. osm.aks.bicep ファイルを開き、次の内容をコピーします。

    // 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. osm.aks.parameters.json ファイルを開き、次の内容をコピーします。 デプロイ パラメーター値は、必ず実際の値に置き換えてください。

    Note

    osm.aks.parameters.json ファイルは、Bicep のデプロイに必要なテンプレート パラメーター ファイルの例です。 指定されているパラメーターを、デプロイ環境に合わせて更新します。 値を追加する必要があるパラメーターは、clusterNameclusterDNSPrefixk8VersionsshPubKeylocationadminUsername などです。 リージョンでサポートされている Kubernetes のバージョンの一覧を確認するには、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>"
        }
      }
    }
    

Bicep ファイルをデプロイする

  1. ターミナルを開き、az login コマンドを使って Azure CLI の Azure アカウントを認証します。

  2. az deployment group create コマンドを使って Bicep ファイルをデプロイします。

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

OSM アドオンのインストールを検証する

  1. クラスターのアドオン プロファイルに対してクエリを実行し、インストールされているアドオンの有効状態を確認します。 次のコマンドは、true を返します。

    az aks list -g <my-osm-aks-cluster-rg> -o json | jq -r '.[].addonProfiles.openServiceMesh.enabled'
    
  2. 次の kubectl コマンドを使って、osm-controller の状態を取得します。

    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
    

OSM アドオンの構成にアクセスする

OSM MeshConfig リソースを使って OSM コントローラーを構成することや、Azure CLI を使って OSM コントローラーの構成設定を確認することができます。

  • kubectl get コマンドを使って OSM コントローラーの構成設定を確認します。

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

    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
    

    enablePermissiveTrafficPolicyModetrue に構成されていることを確認してください。 OSM の制限のないトラフィック ポリシー モードでは、SMI トラフィック ポリシーの適用がバイパスされます。 このモードでは、OSM によってサービス メッシュの一部であるサービスが自動的に検出されます。 検出されたサービスには、これらのサービス間で通信できるように各 Envoy プロキシ サイドカーでプログラムされたトラフィック ポリシー規則があります。

    警告

    続行する前に、制制限のないトラフィック ポリシー モードが true に設定されていることを確認します。 そうでない場合、次のコマンドを使って、これを true に変更します。

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

リソースをクリーンアップする

次のステップ

この記事では、OSM アドオンを AKS クラスターにインストールし、インストールされたことと実行されていることを確認する方法について説明しました。 OSM アドオンをクラスターにインストールすることで、サンプル アプリケーションをデプロイするか、既存のアプリケーションをオンボードして OSM メッシュを使用できます。