Partager via


Démarrage rapide : Déployer un cluster Azure Red Hat OpenShift avec un modèle Azure Resource Manager ou un fichier Bicep

Cet article explique comment utiliser un modèle Azure Resource Manager (modèle ARM) ou Bicep pour créer un cluster Azure Red Hat OpenShift. Vous pouvez déployer le cluster Azure Red Hat OpenShift à l’aide de PowerShell ou de l’interface de ligne de commande Azure (Azure CLI).

Un modèle Azure Resource Manager est un fichier JavaScript Object Notation (JSON) qui définit l'infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative. Vous décrivez votre déploiement prévu sans écrire la séquence de commandes de programmation pour créer le déploiement.

Bicep est un langage spécifique à un domaine (DSL) qui utilise la syntaxe déclarative pour déployer des ressources Azure. Dans un fichier Bicep, vous définissez l’infrastructure que vous voulez déployer sur Azure, puis utilisez ce fichier tout au long du cycle de vie de développement pour déployer votre infrastructure à plusieurs reprises. Vos ressources sont déployées de manière cohérente.

Prérequis

Créer un modèle ARM ou un fichier Bicep

Choisissez un modèle Azure Resource Manager (modèle ARM) ou un fichier Bicep Azure. Ensuite, vous pouvez déployer le modèle à l’aide de la ligne de commande Azure (azure-cli) ou de PowerShell.

Créer un modèle ARM

L’exemple suivant montre a quoi votre modèle ARM doit ressembler quand il est configuré pour votre cluster Azure RedHat OpenShift.

Le modèle définit trois ressources Azure :

Vous trouverez d’autres exemples de modèles Azure Red Hat OpenShift sur le site web de Red Hat OpenShift.

Enregistrez l’exemple suivant sous azuredeploy.bicep :

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "location" : {
        "type": "string",
        "defaultValue": "eastus",
        "metadata": {
          "description": "Location"
        }
      },
      "domain": {
          "type": "string",
          "defaultValue": "",
          "metadata": {
              "description": "Domain Prefix"
          }
      },
      "pullSecret": {
          "type": "string",
          "metadata": {
              "description": "Pull secret from cloud.redhat.com. The json should be input as a string"
          }
      },
      "clusterVnetName": {
          "type": "string",
          "defaultValue": "aro-vnet",
          "metadata": {
              "description": "Name of ARO vNet"
          }
      },
      "clusterVnetCidr": {
          "type": "string",
          "defaultValue": "10.100.0.0/15",
          "metadata": {
              "description": "ARO vNet Address Space"
          }
      },
      "workerSubnetCidr": {
          "type": "string",
          "defaultValue": "10.100.70.0/23",
          "metadata": {
              "description": "Worker node subnet address space"
          }
      },
      "masterSubnetCidr": {
          "type": "string",
          "defaultValue": "10.100.76.0/24",
          "metadata": {
              "description": "Master node subnet address space"
          }
      },
      "masterVmSize" : {
          "type": "string",
          "defaultValue": "Standard_D8s_v3",
          "metadata": {
              "description": "Master Node VM Type"
          }
      },
      "workerVmSize": {
          "type": "string",
          "defaultValue": "Standard_D4s_v3",
          "metadata": {
              "description": "Worker Node VM Type"
          }
      },
      "workerVmDiskSize": {
          "type" : "int",
          "defaultValue": 128,
          "minValue": 128,
          "metadata": {
              "description": "Worker Node Disk Size in GB"
          }
      },
      "workerCount": {
          "type": "int",
          "defaultValue": 3,
          "minValue": 3,
          "metadata": {
              "description": "Number of Worker Nodes"
          }
      },
      "podCidr": {
          "type": "string",
          "defaultValue": "10.128.0.0/14",
          "metadata": {
              "description": "Cidr for Pods"
          }
      },
      "serviceCidr": {
          "type": "string",
          "defaultValue": "172.30.0.0/16",
          "metadata": {
              "decription": "Cidr of service"
          }
      },
      "clusterName" : {
        "type": "string",
        "metadata": {
          "description": "Unique name for the cluster"
        }
      },
      "tags": {
          "type": "object",
          "defaultValue" : {
              "env": "Dev",
              "dept": "Ops"
          },
          "metadata": {
              "description": "Tags for resources"
          }
      },
      "apiServerVisibility": {
          "type": "string",
          "allowedValues": [
              "Private",
              "Public"
          ],
          "defaultValue": "Public",
          "metadata": {
              "description": "Api Server Visibility"
          }
      },
      "ingressVisibility": {
          "type": "string",
          "allowedValues": [
              "Private",
              "Public"
          ],
          "defaultValue": "Public",
          "metadata": {
              "description": "Ingress Visibility"
          }
      },
      "aadClientId" : {
        "type": "string",
        "metadata": {
          "description": "The Application ID of an Azure Active Directory client application"
        }
      },
      "aadObjectId": {
          "type": "string",
          "metadata": {
              "description": "The Object ID of an Azure Active Directory client application"
          }
      },
      "aadClientSecret" : {
        "type":"securestring",
        "metadata": {
          "description": "The secret of an Azure Active Directory client application"
        }
      },
      "rpObjectId": {
          "type": "String",
          "metadata": {
              "description": "The ObjectID of the Resource Provider Service Principal"
          }
      }
    },
    "variables": {
        "contribRole": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]"
    },
    "resources": [
        {
            "type": "Microsoft.Network/virtualNetworks",
            "apiVersion": "2020-05-01",
            "name": "[parameters('clusterVnetName')]",
            "location": "[parameters('location')]",
            "tags": "[parameters('tags')]",
            "properties": {
                "addressSpace": {
                "addressPrefixes": [
                    "[parameters('clusterVnetCidr')]"
                    ]
                },
                "subnets": [
                {
                    "name": "master",
                    "properties": {
                        "addressPrefix": "[parameters('masterSubnetCidr')]",
                        "serviceEndpoints": [
                            {
                                "service": "Microsoft.ContainerRegistry"
                            }
                        ],
                        "privateLinkServiceNetworkPolicies": "Disabled"
                    }
                },
                {
                    "name": "worker",
                    "properties": {
                        "addressPrefix": "[parameters('workerSubnetCidr')]",
                        "serviceEndpoints": [
                            {
                                "service": "Microsoft.ContainerRegistry"
                            }
                        ]
                    }
                }]
            }
        },
        {
            "type": "Microsoft.Network/virtualNetworks/providers/roleAssignments",
            "apiVersion": "2018-09-01-preview",
            "name": "[concat(parameters('clusterVnetName'), '/Microsoft.Authorization/', guid(resourceGroup().id, deployment().name, parameters('aadObjectId')))]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('clusterVnetName'))]"
            ],
            "properties": {
                "roleDefinitionId": "[variables('contribRole')]",
                "principalId":"[parameters('aadObjectId')]"
            }
        },
        {
            "type": "Microsoft.Network/virtualNetworks/providers/roleAssignments",
            "apiVersion": "2018-09-01-preview",
            "name": "[concat(parameters('clusterVnetName'), '/Microsoft.Authorization/', guid(resourceGroup().id, deployment().name, parameters('rpObjectId')))]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('clusterVnetName'))]"
            ],
            "properties": {
                "roleDefinitionId": "[variables('contribRole')]",
                "principalId":"[parameters('rpObjectId')]"
            }
        },
        {
            "type": "Microsoft.RedHatOpenShift/OpenShiftClusters",
            "apiVersion": "2020-04-30",
            "name": "[parameters('clusterName')]",
            "location": "[parameters('location')]",
            "tags": "[parameters('tags')]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('clusterVnetName'))]"
            ],
            "properties": {
                "clusterProfile": {
                    "domain": "[parameters('domain')]",
                    "resourceGroupId": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/aro-', parameters('domain'))]",
                    "pullSecret": "[parameters('pullSecret')]"
                },
                "networkProfile": {
                    "podCidr": "[parameters('podCidr')]",
                    "serviceCidr": "[parameters('serviceCidr')]"
                },
                "servicePrincipalProfile": {
                    "clientId": "[parameters('aadClientId')]",
                    "clientSecret": "[parameters('aadClientSecret')]"
                },
                "masterProfile": {
                    "vmSize": "[parameters('masterVmSize')]",
                    "subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('clusterVnetName'), 'master')]"
                },
                "workerProfiles": [
                    {
                        "name": "worker",
                        "vmSize": "[parameters('workerVmSize')]",
                        "diskSizeGB": "[parameters('workerVmDiskSize')]",
                        "subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('clusterVnetName'), 'worker')]",
                        "count": "[parameters('workerCount')]"
                    }
                ],
                "apiserverProfile": {
                    "visibility": "[parameters('apiServerVisibility')]"
                },
                "ingressProfiles": [
                    {
                        "name": "default",
                        "visibility": "[parameters('ingressVisibility')]"
                    }
                ]
            }
        }
    ],
    "outputs": {
         "clusterCredentials": {
             "type": "object",
             "value": "[listCredentials(resourceId('Microsoft.RedHatOpenShift/OpenShiftClusters', parameters('clusterName')), '2020-04-30')]"
         },
         "oauthCallbackURL": {
             "type": "string",
             "value": "[concat('https://oauth-openshift.apps.', parameters('domain'), '.', parameters('location'), '.aroapp.io/oauth2callback/AAD')]"
         }
    }
}

Créer un fichier Bicep

L’exemple suivant montre à quoi votre fichier Bicep Azure doit ressembler quand il est configuré pour votre cluster Azure Red Hat OpenShift.

Le fichier Bicep définit trois ressources Azure :

Vous trouverez d’autres modèles Azure Red Hat OpenShift sur le site web de Red Hat OpenShift.

Créez le fichier Bicep suivant contenant la définition du cluster Azure Red Hat OpenShift. L’exemple suivant montre à quoi votre fichier Bicep Azure doit ressembler une fois configuré.

Enregistrez le fichier suivant sous le nom azuredeploy.bicep :

@description('Location')
param location string = 'eastus'

@description('Domain Prefix')
param domain string = ''

@description('Pull secret from cloud.redhat.com. The json should be input as a string')
param pullSecret string

@description('Name of ARO vNet')
param clusterVnetName string = 'aro-vnet'

@description('ARO vNet Address Space')
param clusterVnetCidr string = '10.100.0.0/15'

@description('Worker node subnet address space')
param workerSubnetCidr string = '10.100.70.0/23'

@description('Master node subnet address space')
param masterSubnetCidr string = '10.100.76.0/24'

@description('Master Node VM Type')
param masterVmSize string = 'Standard_D8s_v3'

@description('Worker Node VM Type')
param workerVmSize string = 'Standard_D4s_v3'

@description('Worker Node Disk Size in GB')
@minValue(128)
param workerVmDiskSize int = 128

@description('Number of Worker Nodes')
@minValue(3)
param workerCount int = 3

@description('Cidr for Pods')
param podCidr string = '10.128.0.0/14'

@metadata({
  description: 'Cidr of service'
})
param serviceCidr string = '172.30.0.0/16'

@description('Unique name for the cluster')
param clusterName string

@description('Tags for resources')
param tags object = {
  env: 'Dev'
  dept: 'Ops'
}

@description('Api Server Visibility')
@allowed([
  'Private'
  'Public'
])
param apiServerVisibility string = 'Public'

@description('Ingress Visibility')
@allowed([
  'Private'
  'Public'
])
param ingressVisibility string = 'Public'

@description('The Application ID of an Azure Active Directory client application')
param aadClientId string

@description('The Object ID of an Azure Active Directory client application')
param aadObjectId string

@description('The secret of an Azure Active Directory client application')
@secure()
param aadClientSecret string

@description('The ObjectID of the Resource Provider Service Principal')
param rpObjectId string

@description('Specify if FIPS validated crypto modules are used')
@allowed([
  'Enabled'
  'Disabled'
])
param fips string = 'Disabled'

@description('Specify if master VMs are encrypted at host')
@allowed([
  'Enabled'
  'Disabled'
])
param masterEncryptionAtHost string = 'Disabled'

@description('Specify if worker VMs are encrypted at host')
@allowed([
  'Enabled'
  'Disabled'
])
param workerEncryptionAtHost string = 'Disabled'

var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
var resourceGroupId = '/subscriptions/${subscription().subscriptionId}/resourceGroups/aro-${domain}-${location}'
var masterSubnetId=resourceId('Microsoft.Network/virtualNetworks/subnets', clusterVnetName, 'master')
var workerSubnetId=resourceId('Microsoft.Network/virtualNetworks/subnets', clusterVnetName, 'worker')

resource clusterVnetName_resource 'Microsoft.Network/virtualNetworks@2020-05-01' = {
  name: clusterVnetName
  location: location
  tags: tags
  properties: {
    addressSpace: {
      addressPrefixes: [
        clusterVnetCidr
      ]
    }
    subnets: [
      {
        name: 'master'
        properties: {
          addressPrefix: masterSubnetCidr
          serviceEndpoints: [
            {
              service: 'Microsoft.ContainerRegistry'
            }
          ]
          privateLinkServiceNetworkPolicies: 'Disabled'
        }
      }
      {
        name: 'worker'
        properties: {
          addressPrefix: workerSubnetCidr
          serviceEndpoints: [
            {
              service: 'Microsoft.ContainerRegistry'
            }
          ]
        }
      }
    ]
  }
}

resource clusterVnetName_Microsoft_Authorization_id_name_aadObjectId 'Microsoft.Authorization/roleAssignments@2020-10-01-preview' = {
  name: guid(aadObjectId, clusterVnetName_resource.id, contributorRoleDefinitionId)
  scope: clusterVnetName_resource
  properties: {
    roleDefinitionId: contributorRoleDefinitionId
    principalId: aadObjectId
    principalType: 'ServicePrincipal'
  }
}

resource clusterVnetName_Microsoft_Authorization_id_name_rpObjectId 'Microsoft.Authorization/roleAssignments@2020-10-01-preview' = {
  name: guid(rpObjectId, clusterVnetName_resource.id, contributorRoleDefinitionId)
  scope: clusterVnetName_resource
  properties: {
    roleDefinitionId: contributorRoleDefinitionId
    principalId: rpObjectId
    principalType: 'ServicePrincipal'
  }
}

resource clusterName_resource 'Microsoft.RedHatOpenShift/OpenShiftClusters@2023-04-01' = {
  name: clusterName
  location: location
  tags: tags
  properties: {
    clusterProfile: {
      domain: domain
      resourceGroupId: resourceGroupId
      pullSecret: pullSecret
      fipsValidatedModules: fips
    }
    networkProfile: {
      podCidr: podCidr
      serviceCidr: serviceCidr
    }
    servicePrincipalProfile: {
      clientId: aadClientId
      clientSecret: aadClientSecret
    }
    masterProfile: {
      vmSize: masterVmSize
      subnetId: masterSubnetId
      encryptionAtHost: masterEncryptionAtHost
    }
    workerProfiles: [
      {
        name: 'worker'
        vmSize: workerVmSize
        diskSizeGB: workerVmDiskSize
        subnetId: workerSubnetId
        count: workerCount
        encryptionAtHost: workerEncryptionAtHost
      }
    ]
    apiserverProfile: {
      visibility: apiServerVisibility
    }
    ingressProfiles: [
      {
        name: 'default'
        visibility: ingressVisibility
      }
    ]
  }
  dependsOn: [
    clusterVnetName_resource
  ]
}

Déployer le modèle azuredeploy.json

Le modèle azuredeploy.json est utilisé pour déployer un cluster Azure Red Hat OpenShift. Les paramètres requis sont les suivants :

Remarque

Pour le domain paramètre, spécifiez le préfixe de domaine qui sera utilisé dans le cadre du nom DNS généré automatiquement pour la console OpenShift et les serveurs d’API. Ce préfixe est également utilisé dans le nom du groupe de ressources créé pour héberger les machines virtuelles du cluster.

Propriété Description Options valides Valeur par défaut
domain Préfixe de domaine pour le cluster. aucun
pullSecret Secret d’extraction que vous avez obtenu à partir du site web du gestionnaire de cluster Red Hat OpenShift.
clusterName Nom du cluster.
aadClientId ID d’application (GUID) d’une application cliente Microsoft Entra.
aadObjectId ID d’objet (GUID) du principal de service pour l’application cliente Microsoft Entra.
aadClientSecret Clé secrète client du principal de service pour l’application cliente Microsoft Entra, en tant que chaîne sécurisée.
rpObjectId ID d’objet (GUID) du principal du service du fournisseur de ressources.

Les paramètres de modèle ci-dessous ont des valeurs par défaut. Ils peuvent être spécifiés mais ne sont pas explicitement requis.

Propriété Description Options valides Valeur par défaut
location Emplacement du nouveau cluster ARO. Cet emplacement peut coïncider ou non avec la région du groupe de ressources. eastus
clusterVnetName Nom du réseau virtuel pour le cluster ARO. aro-vnet
clusterVnetCidr Espace d’adressage du réseau virtuel ARO, en notation CIDR Classless Inter-Domain Routing. 10.100.0.0/15
workerSubnetCidr Espace d’adressage du sous-réseau du nœud Worker, en notation CIDR. 10.100.70.0/23
masterSubnetCidr Espace d’adressage du sous-réseau du nœud de plan de contrôle, en notation CIDR. 10.100.76.0/24
masterVmSize Type/taille de machine virtuelle du nœud de plan de contrôle. Standard_D8s_v3
workerVmSize Type/taille de machine virtuelle du nœud Worker. Standard_D4s_v3
workerVmDiskSize Taille de disque du nœud Worker, en gigaoctets. 128
workerCount Nombre de nœuds Worker. 3
podCidr Espace d’adressage des pods, en notation CIDR. 10.128.0.0/14
serviceCidr Espace d’adressage du service, en notation CIDR. 172.30.0.0/16
tags Table de hachage des étiquettes de ressource. @{env = 'Dev'; dept = 'Ops'}
apiServerVisibility Visibilité du serveur d’API (Public ou Private). Blockchain publique
ingressVisibility Visibilité d’entrée (Public ou Private). Blockchain publique

Les sections suivantes fournissent des instructions utilisant PowerShell ou Azure CLI.

étapes PowerShell

Si vous utilisez PowerShell, procédez comme suit.

Avant de commencer - PowerShell

Avant d’exécuter les commandes de cet article, il se peut que vous deviez exécuter Connect-AzAccount. Avant de poursuivre, vérifiez si vous disposez d’une connectivité à Azure. Pour déterminer si vous disposez d’une connectivité, exécutez Get-AzContext afin de vérifier si vous avez accès à un abonnement Azure actif.

Notes

Ce modèle utilise le texte du secret d’extraction obtenu à partir du site web du gestionnaire de cluster Red Hat OpenShift. Avant de poursuivre, vérifiez que le secret d’extraction est enregistré localement sous pull-secret.txt.

$rhosPullSecret= Get-Content .\pull-secret.txt -Raw # the pull secret text that was obtained from the Red Hat OpenShift Cluster Manager website

Définir les paramètres suivants en tant que variables d’environnement - PowerShell

$resourceGroup="aro-rg"	     # the new resource group for the cluster
$location="eastus"    		 # the location of the new ARO cluster
$domain="mydomain"           # the domain prefix for the cluster  
$aroClusterName="cluster"    # the name of the cluster

Inscrire les fournisseurs de ressources requis - PowerShell

Inscrivez les fournisseurs de ressources suivants dans votre abonnement : Microsoft.RedHatOpenShift, Microsoft.Compute, Microsoft.Storage et Microsoft.Authorization.

Register-AzResourceProvider -ProviderNamespace Microsoft.RedHatOpenShift
Register-AzResourceProvider -ProviderNamespace Microsoft.Compute
Register-AzResourceProvider -ProviderNamespace Microsoft.Storage
Register-AzResourceProvider -ProviderNamespace Microsoft.Authorization

Créer le groupe de ressources - PowerShell

New-AzResourceGroup -Name $resourceGroup -Location $location

Créer un principal de service et attribuer des rôles - PowerShell

$suffix=Get-Random # random suffix for the Service Principal
$spDisplayName="sp-$resourceGroup-$suffix"
$azureADAppSp = New-AzADServicePrincipal -DisplayName $spDisplayName -Role Contributor

New-AzRoleAssignment -ObjectId $azureADAppSp.Id -RoleDefinitionName 'User Access Administrator' -ResourceGroupName $resourceGroup -ObjectType 'ServicePrincipal'
New-AzRoleAssignment -ObJectId $azureADAppSp.Id -RoleDefinitionName 'Contributor' -ResourceGroupName $resourceGroup -ObjectType 'ServicePrincipal'

Obtenir le mot de passe du principal du service - PowerShell

$aadClientSecretDigest = ConvertTo-SecureString -String $azureADAppSp.PasswordCredentials.SecretText -AsPlainText -Force

Obtenir le principal du service pour le fournisseur de ressources OpenShift - PowerShell

$rpOpenShift =  Get-AzADServicePrincipal -DisplayName 'Azure Red Hat OpenShift RP' | Select-Object -ExpandProperty Id -Property Id -First 1

Vérifier les paramètres avant de déployer le cluster - PowerShell

# setup the parameters for the deployment
$templateParams = @{  
    domain = $domain
    clusterName = $aroClusterName
    location = $location
    aadClientId = $azureADAppSp.AppId
    aadObjectId = $azureADAppSp.Id
    aadClientSecret = $aadClientSecretDigest 
    rpObjectId = $rpOpenShift.Id
    pullSecret = $rhosPullSecret
}

Write-Verbose (ConvertTo-Json $templateParams) -Verbose

Déployer le cluster Azure Red Hat OpenShift à l’aide du modèle ARM - PowerShell

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroup @templateParams `
    -TemplateFile azuredeploy.json

Se connecter au cluster

Pour vous connecter à votre nouveau cluster, suivez les étapes décrites dans Se connecter à un cluster Azure Red Hat OpenShift 4.

Nettoyer les ressources - PowerShell

Lorsque vous avez terminé, exécutez la commande suivante pour supprimer votre groupe de ressources et toutes les ressources créées dans cet article.

Remove-AzResourceGroup -Name $resourceGroup -Force

Étapes dans Azure CLI

Si vous utilisez Azure CLI, procédez comme suit.

Avant de commencer - Azure CLI

Il se peut que vous deviez exécuter az login avant d’exécuter les commandes de ce démarrage rapide,. Avant de poursuivre, vérifiez si vous disposez d’une connectivité à Azure. Pour déterminer si vous disposez d’une connectivité, exécutez az account list afin de vérifier si vous avez accès à un abonnement Azure actif.

Notes

Ce modèle utilise le texte du secret d’extraction obtenu à partir du site web du gestionnaire de cluster Red Hat OpenShift. Avant de poursuivre, vérifiez que ce secret est enregistré localement sous pull-secret.txt.

PULL_SECRET=$(cat pull-secret.txt)    # the pull secret text 

Définir les paramètres suivants en tant que variables d’environnement - Azure CLI

RESOURCEGROUP=aro-rg            # the new resource group for the cluster
LOCATION=eastus                 # the location of the new cluster
DOMAIN=mydomain                 # the domain prefix for the cluster
ARO_CLUSTER_NAME=aro-cluster    # the name of the cluster

Inscrire les fournisseurs de ressources requis - Azure CLI

Inscrivez les fournisseurs de ressources suivants dans votre abonnement : Microsoft.RedHatOpenShift, Microsoft.Compute, Microsoft.Storage et Microsoft.Authorization.

az provider register --namespace 'Microsoft.RedHatOpenShift' --wait
az provider register --namespace 'Microsoft.Compute' --wait
az provider register --namespace 'Microsoft.Storage' --wait
az provider register --namespace 'Microsoft.Authorization' --wait

Créer le groupe de ressources - Azure CLI

az group create --name $RESOURCEGROUP --location $LOCATION

Créer un principal de service pour la nouvelle application Microsoft Entra

  • Azure CLI
az ad sp create-for-rbac --name "sp-$RG_NAME-${RANDOM}" > app-service-principal.json
SP_CLIENT_ID=$(jq -r '.appId' app-service-principal.json)
SP_CLIENT_SECRET=$(jq -r '.password' app-service-principal.json)
SP_OBJECT_ID=$(az ad sp show --id $SP_CLIENT_ID | jq -r '.id')

Attribuer le rôle Contributeur au nouveau principal du service - Azure CLI

az role assignment create \
    --role 'User Access Administrator' \
    --assignee-object-id $SP_OBJECT_ID \
    --scope $SCOPE \
    --assignee-principal-type 'ServicePrincipal'

az role assignment create \
    --role 'Contributor' \
    --assignee-object-id $SP_OBJECT_ID \
    --scope $SCOPE \
    --assignee-principal-type 'ServicePrincipal'

Obtenir l’ID d’objet du principal du service pour le fournisseur de ressources OpenShift - Azure CLI

ARO_RP_SP_OBJECT_ID=$(az ad sp list --display-name "Azure Red Hat OpenShift RP" --query [0].id -o tsv)

Déployer le cluster - Azure CLI

az deployment group create \
    --name aroDeployment \
    --resource-group $RESOURCEGROUP \
    --template-file azuredeploy.bicep \
    --parameters location=$LOCATION \
    --parameters domain=$DOMAIN \
    --parameters pullSecret=$PULL_SECRET \
    --parameters clusterName=$ARO_CLUSTER_NAME \
    --parameters aadClientId=$SP_CLIENT_ID \
    --parameters aadObjectId=$SP_OBJECT_ID \
    --parameters aadClientSecret=$SP_CLIENT_SECRET \
    --parameters rpObjectId=$ARO_RP_SP_OBJECT_ID

Vous connecter à votre cluster - Azure CLI

Pour vous connecter à votre nouveau cluster, suivez les étapes décrites dans Se connecter à un cluster Azure Red Hat OpenShift 4.

Nettoyer les ressources - Azure CLI

Lorsque vous avez terminé, exécutez la commande suivante pour supprimer votre groupe de ressources et toutes les ressources créées dans cet article.

az aro delete --resource-group $RESOURCEGROUP --name $CLUSTER

Conseil

Vous rencontrez des problèmes ? Faites-le nous savoir sur GitHub en ouvrant un problème dans le dépôt Azure Red Hat Openshift (ARO).

Étapes suivantes

Dans cet article, vous avez appris à créer un cluster Azure Red Hat OpenShift exécutant OpenShift 4 à l’aide de modèles ARM et de Bicep.

Passez à l’article suivant afin d’apprendre à configurer le cluster pour l’authentification avec Microsoft Entra ID.