Déploiement Azure AKS
Cet article explore comment vous pourriez modifier votre déploiement de Bitwarden auto-hébergé Helm Chart en fonction des offres spécifiques d'Azure et AKS.
Un contrôleur d'ingress nginx est défini par défaut dans my-values.yaml
. Si vous utilisez cette option :
Décommentez les valeurs dans la section
general.ingress.annotations:
demy-values.yaml
et personnalisez-les selon vos besoins.
Les clients Azure peuvent toutefois préférer utiliser une passerelle d'application Azure comme contrôleur d'entrée pour leur cluster AKS.
Avant d'installer le graphique
Si vous préférez cette option, avant d'installer le graphique, vous devez :
Activez le contrôleur d'entrée Azure Application Gateway pour votre cluster.
Mettez à jour votre fichier my-values.yaml, spécifiquement
general.ingress.className:
,general.ingress.annotations:
, etgeneral.ingress.paths:
:Bashgeneral: domain: "replaceme.com" ingress: enabled: true className: "azure-application-gateway" # This value might be different depending on how you created your ingress controller. Use "kubectl get ingressclasses -A" to find the name if unsure. ## - Annotations to add to the Ingress resource. annotations: appgw.ingress.kubernetes.io/ssl-redirect: "true" appgw.ingress.kubernetes.io/use-private-ip: "false" # This might be true depending on your setup. appgw.ingress.kubernetes.io/rewrite-rule-set: "bitwarden-ingress" # Make note of whatever you set this value to. It will be used later. appgw.ingress.kubernetes.io/connection-draining: "true" # Update as necessary. appgw.ingress.kubernetes.io/connection-draining-timeout: "30" # Update as necessary. ## - Labels to add to the Ingress resource. labels: {} # Certificate options. tls: # TLS certificate secret name. name: tls-secret # Cluster cert issuer (e.g. Let's Encrypt) name if one exists. clusterIssuer: letsencrypt-staging paths: web: path: /(.*) pathType: ImplementationSpecific attachments: path: /attachments/(.*) pathType: ImplementationSpecific api: path: /api/(.*) pathType: ImplementationSpecific icons: path: /icons/(.*) pathType: ImplementationSpecific notifications: path: /notifications/(.*) pathType: ImplementationSpecific events: path: /events/(.*) pathType: ImplementationSpecific scim: path: /scim/(.*) pathType: ImplementationSpecific sso: path: /(sso/.*) pathType: ImplementationSpecific identity: path: /(identity/.*) pathType: ImplementationSpecific admin: path: /(admin/?.*) pathType: ImplementationSpecific
Si vous allez utiliser l'exemple fourni par Let's Encrypt pour votre certificat TLS, mettez à jour
spec.acme.solvers.ingress.class:
dans le script lié ici à"azure/application-gateway"
.Dans le Portail Azure, créez un ensemble de réécriture vide pour le Gateway d'Application :
Naviguez vers Équilibrage de charge > Passerelle d'application dans le portail Azure et sélectionnez votre passerelle d'application.
Sélectionnez l'onglet Réécritures .
Sélectionnez le bouton
Réécrire le paramètre.Définissez la Nom à la valeur spécifiée pour
appgw.ingress.kubernetes.io/rewrite-rule-set:
dansmy-values.yaml
, dans cet exemplebitwarden-ingress
.Sélectionnez Suivant et Créer.
Après avoir installé le graphique
Après l'installation du graphique, vous devrez également créer des règles pour votre ensemble de réécriture :
Rouvrez l'ensemble de réécriture vide que vous avez créé avant d'installer le graphique.
Sélectionnez tous les chemins de routage qui commencent par
pr-bitwarden-auto-héberg-ingress...
, désélectionnez ceux qui ne commencent pas par ce préfixe, et sélectionnez Suivant.Sélectionnez le bouton
Ajouter une règle de réécriture. Vous pouvez donner à votre règle de réécriture n'importe quel nom et n'importe quelle séquence.Ajoutez la condition suivante :
Type de variable à vérifier: Variable du serveur
Variable du serveur: chemin_uri
Sensible à la casse : Non
Opérateur : égal (=)
Modèle à correspondre:
^(\/(?!admin)(?!identité)(?!sso)[^\/]*)\/(.*)
Ajoutez l'action suivante :
Type de réécriture : URL
Type d'action: Définir
Composants: Chemin d'URL
Valeur du chemin URL:
/{var_uri_path_2}
Réévaluer la carte du chemin: Non vérifié
Sélectionnez Créer.
Le déploiement nécessite une classe de stockage partagé que vous fournissez, qui doit supporter ReadWriteMany. L'exemple suivant est un script que vous pouvez exécuter dans l'Azure Cloud Shell pour créer une classe de stockage de fichiers Azure qui répond à l'exigence :
avertissement
L'exemple suivant est illustratif, assurez-vous d'attribuer les autorisations en fonction de vos propres exigences de sécurité.
Bashcat <<EOF | kubectl apply -n bitwarden -f -
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: azure-file
namespace: bitwarden
provisioner: file.csi.azure.com
allowVolumeExpansion: true
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
- actimeo=30
parameters:
skuName: Standard_LRS
EOF
Vous devez définir la valeur sharedStorageClassName
dans my-values.yaml
à n'importe quel nom que vous donnez à la classe, dans cet exemple :
BashsharedStorageClassName: "azure-file"
Le déploiement nécessite des objets secrets Kubernetes pour définir des valeurs sensibles pour votre déploiement. Bien que la commande kubectl create secret
puisse être utilisée pour définir des secrets, les clients Azure peuvent préférer utiliser Azure Key Vault et le pilote Secrets Store CSI pour AKS :
pointe
Ces instructions supposent que vous avez déjà configuré un coffre de clés Azure. Sinon, créez-en un maintenant.
Ajoutez le support du pilote CSI du magasin de secrets à votre cluster avec la commande suivante :
Bashaz aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
L'extension crée une identité gérée assignée par l'utilisateur que vous pouvez utiliser pour vous authentifier à votre coffre de clés, cependant vous avez d'autres options pour le contrôle d'accès d'Identité. Si vous utilisez l'identité gérée assignée par l'utilisateur créée, vous devrez explicitement lui attribuer Secret > Obtenir l'accès à celle-ci (apprenez comment).
Créez une SecretProviderClass, comme dans l'exemple suivant. Notez que cet exemple contient des espaces réservés
que vous devez remplacer et diffère selon que vous utilisez le pod SQL inclus ou votre propre serveur SQL :
Bashcat <<EOF | kubectl apply -n bitwarden -f - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: bitwarden-azure-keyvault-csi labels: app.kubernetes.io/component: secrets annotations: spec: provider: azure parameters: useVMManagedIdentity: "true" # Set to false for workload identity userAssignedIdentityID: "<REPLACE>" # Set the clientID of the user-assigned managed identity to use # clientID: "<REPLACE>" # Setting this to use workload identity keyvaultName: "<REPLACE>" cloudName: "AzurePublicCloud" objects: | array: - | objectName: installationid objectAlias: installationid objectType: secret objectVersion: "" - | objectName: installationkey objectAlias: installationkey objectType: secret objectVersion: "" - | objectName: smtpusername objectAlias: smtpusername objectType: secret objectVersion: "" - | objectName: smtppassword objectAlias: smtppassword objectType: secret objectVersion: "" - | objectName: yubicoclientid objectAlias: yubicoclientid objectType: secret objectVersion: "" - | objectName: yubicokey objectAlias: yubicokey objectType: secret objectVersion: "" - | objectName: hibpapikey objectAlias: hibpapikay objectType: secret objectVersion: "" - | objectName: sapassword #-OR- dbconnectionstring if external SQL objectAlias: sapassword #-OR- dbconnectionstring if external SQL objectType: secret objectVersion: "" tenantId: "<REPLACE>" secretObjects: - secretName: "bitwarden-secret" type: Opaque data: - objectName: installationid key: globalSettings__installation__id - objectName: installationkey key: globalSettings__installation__key key: globalSettings__mail__smtp__username - objectName: smtppassword key: globalSettings__mail__smtp__password - objectName: yubicoclientid key: globalSettings__yubico__clientId - objectName: yubicokey key: globalSettings__yubico__key - objectName: hibpapikey key: globalSettings__hibpApiKey - objectName: sapassword #-OR- dbconnectionstring if external SQL key: SA_PASSWORD #-OR- globalSettings__sqlServer__connectionString if external SQL EOF
Utilisez les commandes suivantes pour définir les valeurs de secrets requises dans le coffre de clés :
avertissement
Cet exemple enregistrera des commandes dans l'historique de votre shell. D'autres méthodes peuvent être envisagées pour définir un secret de manière sécurisée dans les paramètres.
Bashkvname=<REPLACE> az keyvault secret set --name installationid --vault-name $kvname --value <REPLACE> az keyvault secret set --name installationkey --vault-name $kvname --value <REPLACE> az keyvault secret set --name smtpusername --vault-name $kvname --value <REPLACE> az keyvault secret set --name smtppassword --vault-name $kvname --value <REPLACE> az keyvault secret set --name yubicoclientid --vault-name $kvname --value <REPLACE> az keyvault secret set --name yubicokey --vault-name $kvname --value <REPLACE> az keyvault secret set --name hibpapikey --vault-name $kvname --value <REPLACE> az keyvault secret set --name sapassword --vault-name $kvname --value <REPLACE> # - OR - # az keyvault secret set --name dbconnectionstring --vault-name $kvname --value <REPLACE>
Dans votre fichier
my-values.yaml
, définissez les valeurs suivantes :secrets.secretName
: Définissez cette valeur sur lesecretName
défini dans votre SecretProviderClass.secrets.secretProviderClass
: Définissez cette valeur sur lemetadata.name
défini dans vos paramètres de SecretProviderClass.
Suggérer des modifications à cette page
Comment pouvons-nous améliorer cette page pour vous ?
Pour les questions techniques, de facturation et de produits, veuillez contacter le service d'assistance.