Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Momenteel wordt deze Azure Red Hat OpenShift-functie alleen aangeboden in preview. Preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd in de staat waarin ze zijn en voor zover beschikbaar, en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. Azure Red Hat OpenShift-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Zodoende zijn deze functies niet bedoeld voor productiegebruik.
In dit artikel wordt beschreven hoe u een Azure Red Hat OpenShift-cluster implementeert met behulp van beheerde identiteiten. Een bestaand cluster dat gebruikmaakt van een service-principal , kan niet worden gemigreerd om een beheerde identiteit te gebruiken. U moet een nieuw cluster maken dat gebruikmaakt van een beheerde identiteit in een Azure Red Hat OpenShift-cluster.
Azure Red Hat OpenShift is een beheerde OpenShift-service die beheerde identiteiten en workloadidentiteiten ondersteunt. Beheerde identiteiten en workloadidentiteiten helpen bij het minimaliseren van risico's bij het beveiligen van workloads en toepassingen door kortdurende tokens te bieden in plaats van referenties met een lange levensduur, zoals een service-principal met clientgeheimreferenties.
Voor meer informatie, zie:
- Informatie over beheerde identiteiten in Azure Red Hat OpenShift
- Wat zijn workload identiteiten?
- Wat zijn beheerde identiteiten voor Azure-resources?
Vereiste voorwaarden
Zorg ervoor dat u Azure CLI versie 2.67.0 of hoger gebruikt. Gebruik az--version deze functie om de versie van Azure CLI te vinden die u hebt geïnstalleerd. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
Azure Red Hat OpenShift vereist minimaal 44 kernen om een OpenShift-cluster te maken. Het standaardquotum voor Azure-resources voor een nieuw Azure-abonnement voldoet niet aan deze vereiste. Zie VCPU-quota verhogen als u een verhoging van uw resourcelimiet wilt aanvragen.
De 44 kernen worden als volgt gebruikt:
- Bootstrap machine: 8 kernen
- Besturingsvlak (hoofdmachines): 24 kernen
- Rekenkracht (werkmachines): 12 kernen
Wanneer de installatie is voltooid, wordt de bootstrap-machine verwijderd en gebruikt uw cluster in totaal 36 kernen. Zie Installeren in Azure voor meer informatie.
Als u bijvoorbeeld het huidige abonnementsquotum van de kleinste ondersteunde SKU van de virtuele-machinefamilie 'Standard DSv5' wilt controleren:
LOCATION=eastus
az vm list-usage -l $LOCATION \
--query "[?contains(name.value, 'standardDSv5Family')]" -o table
Azure Red Hat OpenShift-extensiewielbestand downloaden (alleen preview)
Als u de opdrachten in dit artikel wilt uitvoeren, downloadt u eerst het azure Red Hat OpenShift-extensiewielbestand van https://aka.ms/az-aroext-latest. Voer vervolgens de volgende opdracht uit om de extensie te installeren:
az extension add -s <path to downloaded whl file>
Uw machtigingen controleren
In dit artikel maakt u een resourcegroep die het virtuele netwerk en beheerde identiteiten voor het cluster bevat. Als u een resourcegroep wilt maken, hebt u inzender- en gebruikerstoegangsbeheerdersmachtigingen of eigenaarsmachtigingen voor de resourcegroep of het bijbehorende abonnement nodig.
U hebt eveneens voldoende Microsoft Entra-machtigingen nodig (een lidgebruiker van de tenant of een gast die is toegewezen met de rol Applicatiebeheerder) om een set beheerde identiteiten te maken en rollen toe te wijzen voor het cluster dat door het cluster kan worden gebruikt. Zie De rollen Lid en Gasten enBeheerders- en niet-beheerdersrollen toewijzen aan gebruikers met Microsoft Entra-id voor meer informatie.
De resourceproviders registreren
Sommige Azure-resourceproviders, waaronder de Azure Red Hat OpenShift-resourceprovider, vereisen registratie om te kunnen functioneren. Als u een resourceprovider registreert, maakt u een service-principal in uw abonnement waarmee de resourceprovider bepaalde acties kan uitvoeren, zoals het maken van resources. Zie Resourceprovider registreren voor meer informatie over de registratie van de resourceprovider.
Als u meerdere Azure-abonnementen hebt, geeft u de relevante abonnements-id op:
az account set --subscription <SUBSCRIPTION ID>Registreer de bronaanbieder
Microsoft.RedHatOpenShift:az provider register -n Microsoft.RedHatOpenShift --waitRegistreer de bronaanbieder
Microsoft.Compute:az provider register -n Microsoft.Compute --waitRegistreer de bronaanbieder
Microsoft.Storage:az provider register -n Microsoft.Storage --waitRegistreer de bronaanbieder
Microsoft.Authorization:az provider register -n Microsoft.Authorization --wait
Een pull-geheim voor Red Hat ophalen (optioneel)
Opmerking
Het pull secret van Azure Red Hat OpenShift verandert de kosten van de Red Hat OpenShift-licentie niet.
Met een Red Hat-pull-geheim kan uw cluster toegang krijgen tot Red Hat-containerregisters, samen met andere inhoud, zoals operators van OperatorHub. Deze stap is optioneel, maar wordt aanbevolen. Als u besluit het pull-geheim later toe te voegen, volgt u deze richtlijnen. Het veld cloud.openshift.com wordt verwijderd uit uw geheim, zelfs als uw pull-geheim dat veld bevat. Dit veld maakt een extra bewakingsfunctie mogelijk, die gegevens naar RedHat verzendt en dus standaard is uitgeschakeld. Zie Externe statusrapportage inschakelen om deze functie in te schakelen.
Navigeer naar uw Red Hat OpenShift-clusterbeheerportal en meld u aan.
U moet zich aanmelden bij uw Red Hat-account of een nieuw Red Hat-account maken met uw zakelijke e-mailadres en de voorwaarden accepteren.
Selecteer Download pull secret en download vervolgens een pull secret voor gebruik met uw Azure Red Hat OpenShift-cluster.
Bewaar het opgeslagen bestand
pull-secret.txtop een veilige plek. Het bestand wordt gebruikt bij het maken van elk cluster als u een cluster moet maken met voorbeelden of operators voor Red Hat of gecertificeerde partners.Wanneer u de opdracht
az aro createuitvoert, kunt u verwijzen naar uw pull-geheim met behulp van de parameter--pull-secret @pull-secret.txt. Voeraz aro createuit vanuit de map waarin u hetpull-secret.txt-bestand hebt opgeslagen. Vervang anders@pull-secret.txtdoor@/path/to/my/pull-secret.txt.Als u uw pull-geheim kopieert of ernaar verwijst in andere scripts, moet uw pull-geheim worden opgemaakt als een geldige JSON-tekenreeks.
Een aangepast domein voorbereiden voor uw cluster (optioneel)
Wanneer u de opdracht az aro create uitvoert, kunt u een aangepast domein opgeven voor uw cluster, met behulp van de parameter --domain foo.example.com.
Opmerking
Het toevoegen van een domeinnaam is optioneel bij het maken van een cluster via Azure CLI. Een domeinnaam (of een voorvoegsel dat wordt gebruikt als onderdeel van de automatisch gegenereerde DNS-naam voor OpenShift-console en API-servers) is nodig bij het toevoegen van een cluster via de portal. Zie quickstart: Een Azure Red Hat OpenShift-cluster implementeren met behulp van Azure Portal voor meer informatie.
Als u een aangepast domein voor uw cluster opgeeft, moet u rekening houden met de volgende punten:
- Nadat u het cluster hebt gemaakt, moet u twee DNS A-records aanmaken op uw DNS-server voor de
--domaindie is opgegeven.- API : wijst naar het IP-adres van de API-server
- *.apps - wijzend naar het IP-adres voor inkomend verkeer
- Haal deze waarden op door na het maken van het cluster de volgende opdracht uit te voeren:
az aro show -n -g --query '{api:apiserverProfile.ip, ingress:ingressProfiles[0].ip}'.
- De OpenShift-console is beschikbaar op een URL, zoals
https://console-openshift-console.apps.example.com, in plaats van het ingebouwde domeinhttps://console-openshift-console.apps.<random>.<location>.aroapp.io. - OpenShift maakt standaard gebruik van zelfondertekende certificaten voor alle routes die op
*.apps.example.comvoor aangepaste domeinen worden gemaakt. Als u ervoor kiest om aangepaste DNS te gebruiken nadat u verbinding hebt gemaakt met het cluster, moet u de OpenShift-documentatie volgen om een aangepaste CA te configureren voor uw ingangscontroller en een aangepaste CA voor uw API-server.
Installatie
U kunt Azure CLI of Bicep gebruiken om een Azure Red Hat OpenShift-cluster te implementeren met beheerde identiteiten.
Installeren met behulp van Azure CLI
In deze sectie wordt beschreven hoe u Azure CLI gebruikt om een Azure Red Hat OpenShift-cluster te maken met beheerde identiteiten.
Een virtueel netwerk met twee lege subnetten maken
Maak een virtueel netwerk met twee lege subnetten. Als u een bestaand virtueel netwerk hebt dat aan uw behoeften voldoet, kunt u deze stap overslaan.
Zie Netwerken voor Azure Red Hat OpenShift voor informatie over netwerken en vereisten.
Stel de volgende variabelen in de shell-omgeving in waarin u de
azopdrachten uitvoert.LOCATION=eastus # the location of your cluster RESOURCEGROUP=aro-rg # the name of the resource group where you want to create your cluster CLUSTER=cluster # the name of your clusterMaak een resourcegroep.
Een Azure-resourcegroep is een logische groep waarin Azure-resources worden geïmplementeerd en beheerd. Wanneer u een resourcegroep maakt, wordt u gevraagd een locatie op te geven. Op deze locatie worden metagegevens van de resourcegroep opgeslagen en waar uw resources worden uitgevoerd in Azure als u geen andere regio opgeeft tijdens het maken van resources. Maak een resourcegroep met de opdracht az group create.
Opmerking
Azure Red Hat OpenShift is niet beschikbaar in alle regio's waar een Azure-resourcegroep kan worden gemaakt. Zie Beschikbare regio's voor informatie over waar Azure Red Hat OpenShift wordt ondersteund.
az group create \ --location $LOCATION \ --name $RESOURCEGROUPMaak een virtueel netwerk, master- en workersubnetten in dezelfde resourcegroep die u eerder hebt gemaakt.
Azure Red Hat OpenShift-clusters vereisen een virtueel netwerk met twee lege subnetten voor de hoofd- en werkknooppunten. U kunt een nieuw virtueel netwerk maken of een bestaand virtueel netwerk gebruiken.
az network vnet create \ --resource-group $RESOURCEGROUP \ --name aro-vnet \ --address-prefixes 10.0.0.0/22az network vnet subnet create \ --resource-group $RESOURCEGROUP \ --vnet-name aro-vnet \ --name master \ --address-prefixes 10.0.0.0/23az network vnet subnet create \ --resource-group $RESOURCEGROUP \ --vnet-name aro-vnet \ --name worker \ --address-prefixes 10.0.2.0/23
De vereiste door de gebruiker toegewezen beheerde identiteiten maken
Maak de volgende vereiste identiteiten. Azure Red Hat OpenShift vereist negen beheerde identiteiten, elk moet een toegewezen, ingebouwde rol hebben:
- Zeven beheerde identiteiten met betrekking tot openshift-kernoperators.
- Eén beheerde identiteit voor de Azure Red Hat OpenShift-serviceoperator.
- Een andere identiteit voor het cluster om het gebruik van deze identiteiten mogelijk te maken.
De onderdelen van de beheerde identiteit zijn:
- OpenShift Image Afbeeldingsregister Operator (image-registry)
- OpenShift-netwerkoperator (cloudnetwerkconfiguratie)
- OpenShift Schijfopslagbeheerder (disk-csi-driver)
- OpenShift Bestandsopslagoperator (file-csi-driver)
- OpenShift-clusteringressoperator (inkomend verkeer)
- OpenShift Cloud Controller Manager (cloudcontroller-manager)
- OpenShift Machine API Operator (automatiseringsfunctie voor machines)
- Azure Red Hat OpenShift-serviceoperator (aro-operator)
Er zijn acht verschillende beheerde identiteiten en bijbehorende ingebouwde rollen die de machtigingen vertegenwoordigen die nodig zijn voor elk onderdeel van Azure Red Hat OpenShift om zijn taken uit te voeren. Daarnaast vereist het platform één andere identiteit, de clusteridentiteit, om federatieve referenties te maken voor de eerder vermelde beheerde identiteitsonderdelen (aro-cluster).
Zie de naslaginformatie over Clusteroperators voor Red Hat OpenShift voor meer informatie over Red Hat OpenShift-clusteroperators.
Maak de vereiste identiteiten:
az identity create \ --resource-group $RESOURCEGROUP \ --name aro-clusteraz identity create \ --resource-group $RESOURCEGROUP \ --name cloud-controller-manageraz identity create \ --resource-group $RESOURCEGROUP \ --name ingressaz identity create \ --resource-group $RESOURCEGROUP \ --name machine-apiaz identity create \ --resource-group $RESOURCEGROUP \ --name disk-csi-driveraz identity create \ --resource-group $RESOURCEGROUP \ --name cloud-network-configaz identity create \ --resource-group $RESOURCEGROUP \ --name image-registryaz identity create \ --resource-group $RESOURCEGROUP \ --name file-csi-driveraz identity create \ --resource-group $RESOURCEGROUP \ --name aro-operatorMaak de vereiste roltoewijzingen voor elke operatoridentiteit, clusteridentiteit en de service-principal van de eerste partij.
Opmerking
In dit artikel wordt ervan uitgegaan dat alleen hoofd- en werksubnetten aanwezig zijn. Als u tijdens de installatie meer clustersubnetten hebt geconfigureerd, moet u het bereik van roltoewijzing toewijzen aan die subnetten, voor operators waarvoor dit is vereist.
Bij de volgende roltoewijzingen voor hoofd- en werksubnetten wordt ervan uitgegaan dat er geen netwerkbeveiligingsgroep (NSG), routetabel of NAT-gateway (Network Address Translation) is gekoppeld. Als u een van deze netwerkresources naar de installatie brengt, moet u meer roltoewijzingen maken die operatoridentiteitsmachtigingen verlenen voor deze extra netwerkresources. Voor elke operator waarvoor een roltoewijzing is vereist voor de volgende subnetten of het virtuele netwerk, is er ook een roltoewijzing vereist voor de extra netwerkresource.
SUBSCRIPTION_ID=$(az account show --query 'id' -o tsv) # assign cluster identity permissions over identities previously created az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aro-operator" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cloud-controller-manager" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ingress" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/machine-api" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/disk-csi-driver" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cloud-network-config" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/image-registry" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-cluster --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/ef318e2a-8334-4a05-9e4a-295a196c6a6e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/file-csi-driver" # assign vnet-level permissions for operators that require it, and subnets-level permission for operators that require it az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name cloud-controller-manager --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/a1f96423-95ce-4224-ab27-4e3dc72facd4" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/master" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name cloud-controller-manager --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/a1f96423-95ce-4224-ab27-4e3dc72facd4" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name ingress --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/0336e1d3-7a87-462b-b6db-342b63f7802c" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/master" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name ingress --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/0336e1d3-7a87-462b-b6db-342b63f7802c" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name machine-api --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/0358943c-7e01-48ba-8889-02cc51d78637" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/master" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name machine-api --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/0358943c-7e01-48ba-8889-02cc51d78637" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name cloud-network-config --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/be7a6435-15ae-4171-8f30-4a343eff9e8f" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name file-csi-driver --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/0d7aedc0-15fd-4a67-a412-efad370c947e" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name image-registry --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/8b32b316-c2f5-4ddf-b05b-83dacd2d08b5" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-operator --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/4436bae4-7702-4c84-919b-c4069ff25ee2" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/master" az role assignment create \ --assignee-object-id "$(az identity show --resource-group $RESOURCEGROUP --name aro-operator --query principalId -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/4436bae4-7702-4c84-919b-c4069ff25ee2" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker" az role assignment create \ --assignee-object-id "$(az ad sp list --display-name "Azure Red Hat OpenShift RP" --query '[0].id' -o tsv)" \ --assignee-principal-type ServicePrincipal \ --role "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCEGROUP/providers/Microsoft.Network/virtualNetworks/aro-vnet"
Het cluster maken
Als u een cluster wilt maken, voert u de volgende opdracht uit onder de opties. Als u een van de volgende opties wilt gebruiken, wijzigt u de opdracht dienovereenkomstig:
- Optie 1: U kunt uw Red Hat-pull-geheim doorgeven, zodat uw cluster samen met andere inhoud toegang heeft tot Red Hat-containerregisters. Voeg het argument
--pull-secret @pull-secret.txttoe aan de opdracht. - Optie 2: U kunt een aangepast domein gebruiken. Voeg het argument
--domain foo.example.comtoe aan de opdracht, en vervangfoo.example.comdoor uw eigen aangepaste domein.
Maak het cluster met de vereiste omgevingsvariabelen. Voor elke --assign-platform-workload-identity vlag vertegenwoordigt het eerste argument de sleutel, waarmee de Azure Red Hat OpenShift-resourceprovider aangeeft welke OpenShift-operator moet worden gebruikt voor een bepaalde identiteit. Het tweede argument vertegenwoordigt de verwijzing naar de identiteit zelf.
az aro create \
--resource-group $RESOURCEGROUP \
--name $CLUSTER \
--vnet aro-vnet \
--master-subnet master \
--worker-subnet worker \
--version <VERSION> \
--enable-managed-identity \
--assign-cluster-identity aro-cluster \
--assign-platform-workload-identity file-csi-driver file-csi-driver \
--assign-platform-workload-identity cloud-controller-manager cloud-controller-manager \
--assign-platform-workload-identity ingress ingress \
--assign-platform-workload-identity image-registry image-registry \
--assign-platform-workload-identity machine-api machine-api \
--assign-platform-workload-identity cloud-network-config cloud-network-config \
--assign-platform-workload-identity aro-operator aro-operator \
--assign-platform-workload-identity disk-csi-driver disk-csi-driver
Als er identiteitsresources in een andere regio of resourcegroep bestaan, kunt u volledige resource-id's doorgeven om te maken. Zie het volgende voorbeeld:
az aro create \
--resource-group $RESOURCEGROUP \
--name $CLUSTER \
--vnet aro-vnet \
--master-subnet master \
--worker-subnet worker \
--version <VERSION> \
--enable-managed-identity \
--assign-cluster-identity /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aro-cluster \
--assign-platform-workload-identity file-csi-driver /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/file-csi-driver \
--assign-platform-workload-identity cloud-controller-manager /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cloud-controller-manager \
--assign-platform-workload-identity ingress /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ingress \
--assign-platform-workload-identity image-registry /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/image-registry \
--assign-platform-workload-identity machine-api /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/machine-api \
--assign-platform-workload-identity cloud-network-config /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cloud-network-config \
--assign-platform-workload-identity aro-operator /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aro-operator \
--assign-platform-workload-identity disk-csi-driver /subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCEGROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/disk-csi-driver
Een andere Versie van Azure Red Hat OpenShift selecteren
U kunt ervoor kiezen om een specifieke versie van Azure Red Hat OpenShift te gebruiken bij het maken van uw cluster. Gebruik eerst de CLI om query's uit te voeren op beschikbare Versies van Azure Red Hat OpenShift:
az aro get-versions --location <REGION>
Zodra de versie is gekozen, geeft u deze op met behulp van de --version parameter in de az aro create opdracht.
Installeren met Bicep
In deze sectie wordt beschreven hoe u Bicep gebruikt om een Azure Red Hat OpenShift-cluster te maken met beheerde identiteiten.
Sla de Bicep-voorbeeldsjabloon (na stap 5) op in een bestand.
Stel de volgende variabelen in de shell-omgeving in die u van plan bent om de
azopdrachten uit te voeren.LOCATION=eastus # the location of your cluster RESOURCEGROUP=aro-rg # the name of the resource group where you want to create your cluster CLUSTER=cluster # the name of your cluster VERSION=4.15.35 # the version of the cluster PULL_SECRET=$(cat pull-secret.txt) # the Red Hat pull secret JSON, provided as file or stringMaak een resourcegroep aan om de clusterresource, het virtuele clusternetwerk en clusteridentiteiten te beheren.
az group create --name $RESOURCEGROUP --location $LOCATIONControleer voor de resourceprovider de id van het service-principal-object van de eerste partij voor uw abonnement.
ARO_RP_SP_OBJECT_ID=$(az ad sp list --display-name "Azure Red Hat OpenShift RP" --query '[0].id' -o tsv)Pas de Bicep-sjabloon toe:
az deployment group create \ --name aroDeployment \ --resource-group $RESOURCEGROUP \ --template-file azuredeploy.bicep \ --parameters location=$LOCATION \ --parameters version=$VERSION \ --parameters clusterName=$CLUSTER \ --parameters rpObjectId=$ARO_RP_SP_OBJECT_ID (--parameters domain=$DOMAIN) \ #optional (--parameters pullSecret=$PULL_SECRET) # optional
Voorbeeld van Bicep-sjabloon
Opmerking
In dit artikel wordt ervan uitgegaan dat alleen hoofd- en werksubnetten aanwezig zijn. Als u tijdens de installatie meer clustersubnetten hebt geconfigureerd, moet u het bereik van roltoewijzing toewijzen aan die subnetten, voor operators waarvoor dit is vereist.
Bij de volgende roltoewijzingen voor hoofd- en werksubnetten wordt ervan uitgegaan dat er geen netwerkbeveiligingsgroep (NSG), routetabel of NAT-gateway (Network Address Translation) is gekoppeld. Als u een van deze netwerkresources naar de installatie brengt, moet u meer roltoewijzingen maken die operatoridentiteitsmachtigingen verlenen voor deze extra netwerkresources. Voor elke operator waarvoor een roltoewijzing is vereist voor de volgende subnetten of het virtuele netwerk, is er ook een roltoewijzing vereist voor de extra netwerkresource.
@description('Location')
param location string = resourceGroup().location
@description('Domain Prefix')
param domain string
@description('Version of the OpenShift cluster')
param version string
@description('Pull secret from cloud.redhat.com. The json should be input as a string')
@secure()
param pullSecret string = ''
@description('Name of vNet')
param clusterVnetName string = 'aro-vnet'
@description('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('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('Api Server Visibility')
@allowed([
'Private'
'Public'
])
param apiServerVisibility string = 'Public'
@description('Ingress Visibility')
@allowed([
'Private'
'Public'
])
param ingressVisibility string = 'Public'
@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 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 vnet 'Microsoft.Network/virtualNetworks@2023-06-01' = {
name: clusterVnetName
location: location
properties: {
addressSpace: { addressPrefixes: [ clusterVnetCidr ] }
subnets: [
{
name: 'master'
properties: {
addressPrefixes: [ masterSubnetCidr ]
serviceEndpoints: [ { service: 'Microsoft.ContainerRegistry' } ]
}
}
{
name: 'worker'
properties: {
addressPrefixes: [ workerSubnetCidr ]
serviceEndpoints: [ { service: 'Microsoft.ContainerRegistry' } ]
}
}
]
}
}
resource workerSubnet 'Microsoft.Network/virtualNetworks/subnets@2020-08-01' existing = {
parent: vnet
name: 'worker'
}
resource masterSubnet 'Microsoft.Network/virtualNetworks/subnets@2020-08-01' existing = {
parent: vnet
name: 'master'
}
// create required identities
resource cloudControllerManager 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'cloud-controller-manager'
location: location
}
resource ingress 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'ingress'
location: location
}
resource machineApi 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'machine-api'
location: location
}
resource diskCsiDriver 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'disk-csi-driver'
location: location
}
resource cloudNetworkConfig 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'cloud-network-config'
location: location
}
resource imageRegistry 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'image-registry'
location: location
}
resource fileCsiDriver 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'file-csi-driver'
location: location
}
resource aroOperator 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'aro-operator'
location: location
}
resource clusterMsi 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'cluster'
location: location
}
// create required role assignments on vnet / subnets
resource cloudControllerManagerMasterSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(masterSubnet.id, 'cloud-controller-manager')
scope: masterSubnet
properties: {
principalId: cloudControllerManager.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a1f96423-95ce-4224-ab27-4e3dc72facd4')
principalType: 'ServicePrincipal'
}
}
resource cloudControllerManagerWorkerSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(workerSubnet.id, 'cloud-controller-manager')
scope: workerSubnet
properties: {
principalId: cloudControllerManager.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a1f96423-95ce-4224-ab27-4e3dc72facd4')
principalType: 'ServicePrincipal'
}
}
resource ingressMasterSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(masterSubnet.id, 'ingress')
scope: masterSubnet
properties: {
principalId: ingress.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0336e1d3-7a87-462b-b6db-342b63f7802c')
principalType: 'ServicePrincipal'
}
}
resource ingressWorkerSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(workerSubnet.id, 'ingress')
scope: workerSubnet
properties: {
principalId: ingress.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0336e1d3-7a87-462b-b6db-342b63f7802c')
principalType: 'ServicePrincipal'
}
}
resource machineApiMasterSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(masterSubnet.id, 'machine-api')
scope: masterSubnet
properties: {
principalId: machineApi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0358943c-7e01-48ba-8889-02cc51d78637')
principalType: 'ServicePrincipal'
}
}
resource machineApiWorkerSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(workerSubnet.id, 'machine-api')
scope: workerSubnet
properties: {
principalId: machineApi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0358943c-7e01-48ba-8889-02cc51d78637')
principalType: 'ServicePrincipal'
}
}
resource cloudNetworkConfigVnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(vnet.id, 'cloud-network-config')
scope: vnet
properties: {
principalId: cloudNetworkConfig.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'be7a6435-15ae-4171-8f30-4a343eff9e8f')
principalType: 'ServicePrincipal'
}
}
resource fileCsiDriverVnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(vnet.id, 'file-csi-driver')
scope: vnet
properties: {
principalId: fileCsiDriver.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0d7aedc0-15fd-4a67-a412-efad370c947e')
principalType: 'ServicePrincipal'
}
}
resource imageRegistryVnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(vnet.id, 'image-registry')
scope: vnet
properties: {
principalId: imageRegistry.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8b32b316-c2f5-4ddf-b05b-83dacd2d08b5')
principalType: 'ServicePrincipal'
}
}
resource aroOperatorMasterSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(masterSubnet.id, 'aro-operator')
scope: masterSubnet
properties: {
principalId: aroOperator.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4436bae4-7702-4c84-919b-c4069ff25ee2')
principalType: 'ServicePrincipal'
}
}
resource aroOperatorWorkerSubnetRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(workerSubnet.id, 'aro-operator')
scope: workerSubnet
properties: {
principalId: aroOperator.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4436bae4-7702-4c84-919b-c4069ff25ee2')
principalType: 'ServicePrincipal'
}
}
// create required role assignments on cluster MSI
resource clusterMsiRoleAssignmentCloudControllerManager 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(cloudControllerManager.id, 'cluster')
scope: cloudControllerManager
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
resource clusterMsiRoleAssignmentIngress 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(ingress.id, 'cluster')
scope: ingress
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
resource clusterMsiRoleAssignmentMachineApi 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(machineApi.id, 'cluster')
scope: machineApi
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
resource clusterMsiRoleAssignmentDiskCsiDriver 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(diskCsiDriver.id, 'cluster')
scope: diskCsiDriver
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
resource clusterMsiRoleAssignmentCloudNetworkConfig 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(cloudNetworkConfig.id, 'cluster')
scope: cloudNetworkConfig
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
resource clusterMsiRoleAssignmentCloudImageRegistry 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(imageRegistry.id, 'cluster')
scope: imageRegistry
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
resource clusterMsiRoleAssignmentCloudFileCsiDriver 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(fileCsiDriver.id, 'cluster')
scope: fileCsiDriver
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
resource clusterMsiRoleAssignmentCloudAroOperator 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(aroOperator.id, 'cluster')
scope: aroOperator
properties: {
principalId: clusterMsi.properties.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ef318e2a-8334-4a05-9e4a-295a196c6a6e')
principalType: 'ServicePrincipal'
}
}
// create first party role assignment over the vnet
resource fpspRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(vnet.id, rpObjectId)
scope: vnet
properties: {
principalId: rpObjectId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
principalType: 'ServicePrincipal'
}
}
// create cluster
resource cluster 'Microsoft.RedHatOpenShift/openShiftClusters@2024-08-12-preview' = {
name: clusterName
location: location
properties: {
clusterProfile: {
domain: domain
#disable-next-line use-resource-id-functions
resourceGroupId: resourceGroupId
version: version
fipsValidatedModules: fips
pullSecret: pullSecret
}
networkProfile: {podCidr: podCidr, serviceCidr: serviceCidr}
masterProfile: {
vmSize: masterVmSize
subnetId: masterSubnetId
encryptionAtHost: masterEncryptionAtHost
}
workerProfiles: [{
name: 'worker'
count: 3
diskSizeGB: workerVmDiskSize
vmSize: workerVmSize
subnetId: workerSubnetId
encryptionAtHost: workerEncryptionAtHost
}]
apiserverProfile: {visibility: apiServerVisibility}
ingressProfiles: [{name: 'default', visibility: ingressVisibility}]
platformWorkloadIdentityProfile: {
platformWorkloadIdentities: {
'cloud-controller-manager': {resourceId: cloudControllerManager.id}
ingress: {resourceId: ingress.id}
'machine-api': {resourceId: machineApi.id}
'disk-csi-driver': {resourceId: diskCsiDriver.id}
'cloud-network-config': {resourceId: cloudNetworkConfig.id}
'image-registry': {resourceId: imageRegistry.id}
'file-csi-driver': {resourceId: fileCsiDriver.id}
'aro-operator': {resourceId: aroOperator.id}
}
}
}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${clusterMsi.id}': {}
}
}
}
Schoonmaken
Voer de volgende opdracht uit om een beheerd identiteitscluster te verwijderen:
az aro delete -n $CLUSTER -g $RESOURCEGROUP
Met deze verwijderopdracht worden de door het cluster toegewezen beheerde identiteiten die zijn gemaakt als onderdeel van de installatie niet opgeschoond. U moet de identiteiten en roltoewijzingen handmatig verwijderen.