Dela via


Snabbstart: Distribuera ett Azure Red Hat OpenShift-kluster med en Azure Resource Manager-mall eller Bicep-fil

I den här artikeln beskrivs hur du använder antingen Azure Resource Manager-mall (ARM-mall) eller Bicep för att skapa ett Azure Red Hat OpenShift-kluster. Du kan distribuera Azure Red Hat OpenShift-klustret med antingen PowerShell eller Azure-kommandoradsgränssnittet (Azure CLI).

En Azure Resource Manager-mall är en JSON-fil (JavaScript Object Notation) som definierar infrastrukturen och konfigurationen för projektet. Mallen använder deklarativ syntax. Du beskriver den avsedda distributionen utan att skriva sekvensen med programmeringskommandon för att skapa distributionen.

Bicep är ett domänspecifikt språk (DSL) som använder deklarativ syntax för att distribuera Azure-resurser. I en Bicep-fil definierar du den infrastruktur som du vill distribuera till Azure och använder sedan filen under hela utvecklingslivscykeln för att distribuera infrastrukturen upprepade gånger. Dina resurser distribueras på ett konsekvent sätt.

Kommentar

Information om hur du distribuerar Azure Red Hat OpenShift-kluster med Terraform finns i Microsoft.RedHatOpenShift openShiftClusters Terraform.

Förutsättningar

Skapa en ARM-mall eller en Bicep-fil

Välj antingen en Azure Resource Manager-mall (ARM-mall) eller en Azure Bicep-fil. Sedan kan du distribuera mallen med antingen Azure-kommandoraden (azure-cli) eller PowerShell.

Skapa en ARM-mall

I följande exempel visas hur ARM-mallen ska se ut när den konfigureras för ditt Azure RedHat OpenShift-kluster.

Mallen definierar tre Azure-resurser:

Fler Azure Red Hat OpenShift-mallexempel finns på Red Hat OpenShift-webbplatsen.

Spara följande exempel som azuredeploy.json:

{
    "$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": {
              "description": "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')]"
         }
    }
}

Skapa en Bicep-fil

I följande exempel visas hur din Azure Bicep-fil ska se ut när den är konfigurerad för ditt Azure Red Hat OpenShift-kluster.

Bicep-filen definierar tre Azure-resurser:

Fler Azure Red Hat OpenShift-mallar finns på Red Hat OpenShift-webbplatsen.

Skapa följande Bicep-fil som innehåller definitionen för Azure Red Hat OpenShift-klustret. I följande exempel visas hur din Bicep-fil ska se ut när den är konfigurerad.

Spara följande fil som 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
  ]
}

Distribuera mallen azuredeploy.json

Mallen azuredeploy.json används för att distribuera ett Azure Red Hat OpenShift-kluster. Följande parametrar krävs:

Kommentar

För parametern domain anger du det domänprefix som ska användas som en del av det automatiskt genererade DNS-namnet för OpenShift-konsolen och API-servrarna. Det här prefixet används också som en del av namnet på den resursgrupp som skapas som värd för de virtuella klusterdatorerna.

Property beskrivning Giltiga alternativ Standardvärde
domain Domänprefixet för klustret. inget
pullSecret Pull-hemligheten som du fick från Red Hat OpenShift Cluster Manager-webbplatsen.
clusterName Namnet på klustret.
aadClientId Program-ID (ett GUID) för ett Microsoft Entra-klientprogram.
aadObjectId Objekt-ID :t (ett GUID) för tjänstens huvudnamn för Microsoft Entra-klientprogrammet.
aadClientSecret Klienthemligheten för tjänstens huvudnamn för Microsoft Entra-klientprogrammet som en säker sträng.
rpObjectId Objekt-ID (ett GUID) för resursproviderns tjänsthuvudnamn.

Mallparametrarna nedan har standardvärden. De kan anges, men de krävs inte uttryckligen.

Property beskrivning Giltiga alternativ Standardvärde
location Platsen för det nya ARO-klustret. Den här platsen kan vara samma som eller skilja sig från resursgruppsregionen. eastus
clusterVnetName Namnet på det virtuella nätverket för ARO-klustret. aro-vnet
clusterVnetCidr Adressutrymmet för det virtuella ARO-nätverket i CIDR-notation (Classless Inter-Domain Routing ). 10.100.0.0/15
workerSubnetCidr Adressutrymmet för arbetsnodens undernät i CIDR-notation. 10.100.70.0/23
masterSubnetCidr Adressutrymmet för kontrollplanets nodundernät, i CIDR-notation. 10.100.76.0/24
masterVmSize Den virtuella datorns typ/storlek på kontrollplanets nod. Standard_D8s_v3
workerVmSize Arbetsnodens typ/storlek på den virtuella datorn. Standard_D4s_v3
workerVmDiskSize Diskstorleken för arbetsnoden i gigabyte. 128
workerCount Antalet arbetsnoder. 3
podCidr Poddarnas adressutrymme i CIDR-notation. 10.128.0.0/14
serviceCidr Tjänstens adressutrymme i CIDR-notation. 172.30.0.0/16
tags En hash-tabell med resurstaggar. @{env = 'Dev'; dept = 'Ops'}
apiServerVisibility Synligheten för API-servern (Public eller Private). Offentliga
ingressVisibility Ingressens (ingång) synlighet (Public eller Private). Offentliga

Följande avsnitt innehåller instruktioner med Hjälp av PowerShell eller Azure CLI.

PowerShell-steg

Utför följande steg om du använder PowerShell.

Innan du börjar – PowerShell

Innan du kör kommandona i den här artikeln kan du behöva köra Connect-AzAccount. Kontrollera om du har anslutning till Azure innan du fortsätter. Kontrollera om du har en anslutning genom att köra Get-AzContext för att kontrollera om du har åtkomst till en aktiv Azure-prenumeration.

Kommentar

Den här mallen använder den pull-hemliga text som hämtades från Red Hat OpenShift Cluster Manager-webbplatsen. Innan du fortsätter kontrollerar du att pull-hemligheten har sparats lokalt som 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

Definiera följande parametrar som miljövariabler – 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

Registrera nödvändiga resursprovidrar – PowerShell

Registrera följande resursprovidrar i din prenumeration: Microsoft.RedHatOpenShift, Microsoft.Storage Microsoft.Computeoch Microsoft.Authorization.

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

Skapa den nya resursgruppen – PowerShell

New-AzResourceGroup -Name $resourceGroup -Location $location

Skapa ett nytt huvudnamn för tjänsten och tilldela roller – 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'

Hämta lösenordet för tjänstens huvudnamn – PowerShell

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

Hämta tjänstens huvudnamn för OpenShift-resursprovidern – PowerShell

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

Kontrollera parametrarna innan du distribuerar klustret – 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

Distribuera Azure Red Hat OpenShift-klustret med hjälp av ARM-mallen – PowerShell

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

Ansluta till klustret

Om du vill ansluta till det nya klustret läser du stegen i Anslut till ett Azure Red Hat OpenShift 4-kluster.

Rensa resurser – PowerShell

När du är klar kör du följande kommando för att ta bort resursgruppen och alla resurser som du skapade i den här artikeln.

Remove-AzResourceGroup -Name $resourceGroup -Force

Azure CLI-steg

Utför följande steg om du använder Azure CLI.

Innan du börjar – Azure CLI

Du kan behöva köra az login innan du kör kommandona i den här artikeln. Kontrollera om du har anslutning till Azure innan du fortsätter. Kontrollera om du har anslutning genom att köra az account list och kontrollera att du har åtkomst till en aktiv Azure-prenumeration.

Kommentar

Den här mallen använder den pull-hemliga text som hämtades från Red Hat OpenShift Cluster Manager-webbplatsen. Innan du fortsätter kontrollerar du att hemligheten har sparats lokalt som pull-secret.txt.

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

Definiera följande parametrar som miljövariabler – 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

Registrera nödvändiga resursprovidrar – Azure CLI

Registrera följande resursprovidrar i din prenumeration: Microsoft.RedHatOpenShift, Microsoft.Storage Microsoft.Computeoch 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

Skapa den nya resursgruppen – Azure CLI

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

Skapa ett huvudnamn för tjänsten för det nya Microsoft Entra-programmet

  • 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')

Tilldela rollen Deltagare till det nya tjänstens huvudnamn – 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'

Hämta objekt-ID för tjänstens huvudnamn för OpenShift-resursprovidern – Azure CLI

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

Distribuera klustret – Azure CLI

az deployment group create \
    --name aroDeployment \
    --resource-group $RESOURCEGROUP \
    --template-file azuredeploy.json \
    --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
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

Ansluta till klustret – Azure CLI

Om du vill ansluta till det nya klustret läser du stegen i Anslut till ett Azure Red Hat OpenShift 4-kluster.

Rensa resurser – Azure CLI

När du är klar kör du följande kommando för att ta bort resursgruppen och alla resurser som du skapade i den här artikeln.

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

Dricks

Har du problem? Meddela oss på GitHub genom att öppna ett problem i Azure Red Hat Openshift-lagringsplatsen (ARO).

Nästa steg

I den här artikeln har du lärt dig hur du skapar ett Azure Red Hat OpenShift-kluster som kör OpenShift 4 med både ARM-mallar och Bicep.

Gå vidare till nästa artikel för att lära dig hur du konfigurerar klustret för autentisering med hjälp av Microsoft Entra-ID.