Créer une ressource GitRepo
Créer une instance GitRepo
Les dépôts Git sont enregistrés en créant une ressource GitRepo dans Kubernetes. Référez-vous au tutoriel de création d’un déploiement pour des exemples.
Le contenu du dépôt Git contient des détails sur le contenu du dépôt Git.
Les champs disponibles de la ressource personnalisée GitRepo sont documentés dans la référence de la ressource GitRepo. Ajouter un dépôt Git privé.
|
La SUSE® Rancher Prime Continuous Delivery ne prend pas en charge l’authentification par serveur proxy SSH lors du clonage de l’ajout d’un dépôt Git privé ou l’utilisation de dépôts Helm privés . Utilisez l’authentification HTTPS avec un nom d’utilisateur et un mot de passe ou un token d’accès personnel. |
Espace de noms approprié
Les dépôts Git sont ajoutés au gestionnaire SUSE® Rancher Prime Continuous Delivery en utilisant le type de ressource personnalisée GitRepo. Le type GitRepo est dans un espace de noms. Par défaut, Rancher créera deux espaces de travail SUSE® Rancher Prime Continuous Delivery :
-
Le
fleet-defaultcontient tous les clusters en aval qui sont déjà enregistrés via Rancher. -
Le
fleet-localcontiendra la grappe locale par défaut.
Si vous utilisez SUSE® Rancher Prime Continuous Delivery dans un style cluster unique, l’espace de noms sera toujours fleet-local. Vérifiez l’enregistrement du cluster pour plus d’informations sur l’espace de noms fleet-local.
Pour un style multi-cluster, veuillez vous assurer d’utiliser le bon dépôt qui sera mappé aux bons clusters cibles.
Remplacer l’espace de noms de la charge de travail
Le champ targetNamespace remplacera tout espace de noms dans le bundle. Si le déploiement contient des ressources à portée de cluster, il échouera.
Il prend le pas sur toutes les autres définitions d’espace de noms :
gitRepo.targetNamespace > fleet.yaml namespace > namespace in workload’s manifest > fleet.yaml defaultNamespace
Les définitions d’espace de noms de la charge de travail peuvent être restreintes avec allowedTargetNamespaces dans la ressource GitRepoRestriction.
Ajouter un dépôt Git privé
SUSE® Rancher Prime Continuous Delivery prend en charge les mécanismes d’authentification suivants pour les dépôts privés :
* Authentification HTTP basique
* Clés d’authentification SSH
* Applications Github
Pour utiliser l’un d’eux, vous devez créer un secret dans l’espace de noms de GitRepo.
Par exemple, pour générer une clé SSH privée :
ssh-keygen -t rsa -b 4096 -m pem -C "user@email.com"
|
Le format de la clé privée doit être en |
Mettez votre clé privée dans le secret, utilisez l’espace de noms dans lequel se trouve le GitRepo :
kubectl create secret generic ssh-key -n namespace-of-your-gitrepo --from-file=ssh-privatekey=/file/to/private/key --type=kubernetes.io/ssh-auth
Maintenant, le clientSecretName doit être spécifié dans la définition du dépôt :
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: sample-ssh
# This namespace is special and auto-wired to deploy to the local cluster
namespace: fleet-local
spec:
# Everything from this repo will be run in this cluster. You trust me right?
repo: "git@github.com:rancher/fleet-examples"
# or
# repo: "ssh://git@github.com/rancher/fleet-examples"
clientSecretName: ssh-key
paths:
- simple
|
La clé privée avec phrase de passe n’est pas prise en charge. |
|
La clé doit être au format PEM. |
Hôtes connus
SUSE® Rancher Prime Continuous Delivery prend en charge l’ajout de known_hosts dans le secret ssh. Voici un exemple de la façon de l’ajouter :
Récupérez le hachage de la clé publique (prenez Github comme exemple)
ssh-keyscan -H github.com
Et ajoutez-le dans le secret :
apiVersion: v1
kind: Secret
metadata:
name: ssh-key
type: kubernetes.io/ssh-auth
stringData:
ssh-privatekey: <private-key>
known_hosts: |-
|1|YJr1VZoi6dM0oE+zkM0do3Z04TQ=|7MclCn1fLROZG+BgR4m1r8TLwWc= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
Vérifications strictes des clés d’hôtes
La valeur du graphique insecureSkipHostKeyChecks définit comment Fleet se comporte par rapport à known_hosts lors de l’établissement de connexions SSH.
Lorsque cette valeur est définie sur false, Fleet appliquera des vérifications strictes des clés d’hôtes, ce qui signifie qu’il échouera à établir des connexions SSH vers des hôtes pour lesquels aucune entrée known_hosts correspondante ne peut être trouvée.
Ceci est le comportement par défaut à partir de Fleet v0.13.
Les entrées known_hosts sont prioritairement issues des secrets référencés dans les ressources GitRepo, par exemple helmSecretName pour accéder aux charts Helm ou clientSecretName pour cloner des dépôts git.
Notez que cela est compatible avec Fleet cherchant un secret gitcredential si aucun secret n’est référencé dans le GitRepo.
Si aucun secret de ce type n’existe, ou si aucune entrée known_hosts n’est disponible dans ce secret, alors Fleet utilise sa propre carte de configuration known-hosts, nouvellement créée au moment de l’installation avec des entrées statiques pour les fournisseurs git les plus utilisés.
Plus de détails ici sur l’origine des entrées par défaut et comment en peupler d’autres au moment de l’installation.
L’absence de la carte de configuration, si aucun secret n’est disponible, est considérée comme un symptôme d’un déploiement Fleet incomplet, et signalée comme tel.
Fleet n’utilise qu’une seule source d’entrées known_hosts à la fois. Cela signifie que, même si un secret contient des entrées invalides (ou insuffisantes), alors Fleet ne cherchera pas d’entrées valides dans la carte de configuration. Cela s’applique à un secret référencé dans un GitRepo ainsi qu’à un éventuel secret gitcredential, si aucun secret n’est référencé dans le GitRepo.
Utilisation de l’authentification HTTP
Créez un secret contenant un nom d’utilisateur et un mot de passe. Vous pouvez remplacer le mot de passe par un token d’accès personnel si nécessaire. Voir aussi les secrets HTTP dans Github.
kubectl create secret generic basic-auth-secret -n namespace-of-your-gitrepo --type=kubernetes.io/basic-auth --from-literal=username=$user --from-literal=password=$pat
Tout comme avec SSH, référencez le secret dans votre ressource GitRepo via clientSecretName.
spec:
repo: https://github.com/fleetrepoci/gitjob-private.git
branch: main
clientSecretName: basic-auth-secret
|
Lors de l’utilisation de BitBucket et de tokens d’accès, le nom d’utilisateur doit être |
Utilisation d’une appli GitHub.
Les champs suivants sont nécessaires pour permettre à SUSE® Rancher Prime Continuous Delivery de s’authentifier auprès de GitHub en utilisant une appli GitHub :
| Nom | Nom du champ secret | Où le trouver |
|---|---|---|
ID de l’appli. |
|
Sur la page des paramètres de votre appli, sous |
ID d’installation de l’appli. |
|
Dans l’URL de la page d’installation de l’appli. Par exemple, si vous avez installé l’appli sur un dépôt |
Clé privée |
|
Généré lors de la création de l’appli GitHub, ou depuis la page des paramètres de l’appli, où un bouton |
Voir la documentation GitHub pour plus de détails sur la création d’une appli GitHub.
Avec les données nécessaires à portée de main, créez un secret contenant ces champs :
kubectl -n namespace-of-your-gitrepo create secret generic github-app-secret \
--from-literal=github_app_id=<app-id> \
--from-literal=github_app_installation_id=<installation-id> \
--from-literal=github_app_private_key="<private-key>"
Utiliser un littéral au lieu d’un fichier pour la clé privée peut aider à prévenir les erreurs de décodage PEM au moment de l’exécution. Avant de créer le secret, la clé privée peut être obtenue à partir d’un fichier exportant une variable d’environnement, pour éviter que la clé elle-même n’apparaisse dans l’historique du shell.
Entourer la valeur, ou le nom de la variable d’environnement (par exemple --from-literal=github_app_private_key="$MY_VAR") de guillemets doubles garantit que son contenu complet est pris en compte, y compris les éventuels sauts de ligne.
Assurez-vous de référencer ce secret dans votre ressource GitRepo via clientSecretName.
Utilisation de dépôts Helm privés
|
Les identifiants seront utilisés sans condition pour tous les dépôts Helm référencés par la ressource GitRepo.
Assurez-vous de ne pas divulguer d’identifiants en mélangeant des dépôts publics et privés. Utilisez des identifiants helm différents pour chaque chemin, ou divisez-les en différents GitRepo, ou utilisez |
Pour un dépôt Helm privé, les utilisateurs peuvent référencer un secret avec les clés suivantes :
-
usernameetpasswordpour l’authentification http de base si le dépôt HTTP Helm est protégé par une authentification de base. -
cacertspour un bundle CA personnalisé si le dépôt Helm utilise un CA personnalisé.
-
ssh-privatekeypour la clé privée ssh si le dépôt utilise le protocole ssh. La clé privée avec phrase de passe n’est pas prise en charge actuellement.
Par exemple, pour ajouter un secret dans kubectl, exécutez
kubectl create secret -n $namespace generic helm --from-literal=username=foo --from-literal=password=bar --from-file=cacerts=/path/to/cacerts --from-file=ssh-privatekey=/path/to/privatekey.pem
Après la création du secret, spécifiez le secret à gitRepo.spec.helmSecretName. Assurez-vous que le secret est créé sous le même espace de noms que le gitrepo.
Utilisez des identifiants helm différents pour chaque chemin.
SUSE® Rancher Prime Continuous Delivery vous permet de définir des identifiants uniques pour chaque chemin de chart Helm dans un dépôt Git en utilisant le champ helmSecretNameForPaths.
|
|
Créez un fichier nommé secrets-path.yaml qui spécifie les identifiants pour chaque chemin dans votre GitRepo. Chaque clé peut être soit :
-
un chemin exact, qui doit correspondre au chemin complet vers un répertoire de bundle (un dossier contenant un fichier
fleet.yaml). Le chemin peut avoir plus de segments que l’entrée souspaths:. -
un glob correspondant à un ou plusieurs chemins, utile lorsque les identifiants doivent être réutilisés sur plusieurs chemins/bundles.
Référez-vous à la documentation de Go filepath.Match pour des exemples de syntaxe prise en charge.
|
Si plus d’un glob correspond à un chemin donné dans un dépôt Git, SUSE® Rancher Prime Continuous Delivery ordonnera les globs lexicalement et utilisera les identifiants du premier match. Exemple : Pour le chemin du dépôt
|
Si un chemin répertorié dans le GitRepo n’est pas inclus dans ce fichier, que ce soit par des chemins exacts ou par correspondance glob, SUSE® Rancher Prime Continuous Delivery n’utilise pas d’identifiants pour celui-ci.
|
Le fichier doit être nommé |
GitRepokind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: gitrepo
namespace: fleet-local
spec:
helmSecretNameForPaths: test-multipasswd
repo: https://github.com/0xavi0/fleet-examples
branch: helm-multi-passwd
paths:
- single-cluster/test-multipasswd
secrets-path.yamlsingle-cluster/test-multipasswd/passwd:
username: fleet-ci
password: foo
insecureSkipVerify: true
path-one: # path path-one must exist in the repository
username: user
password: pass
path-two: # path path-two must exist in the repository
username: user2
password: pass2
caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgICBNSUlEblRDQ0FvV2dBd0lCQWdJVUNwMHB2...
sshPrivateKey: ICAgIC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQogICAgTUlJRFF6Q0NBaXNDRkgxTm5Y...
Champs pris en charge par chemin :
| Champ | Description |
|---|---|
|
Nom d’utilisateur du registre ou du dépôt |
|
Mot de passe du registre ou du dépôt |
|
Bundle de certificat CA encodé en Base64 |
|
Clé privée SSH encodée en Base64 |
|
Valeur booléenne pour ignorer la vérification TLS |
kubectl create secret generic test-multipasswd -n fleet-local --from-file=secrets-path.yaml
|
Le secret doit être créé dans le même espace de noms que la ressource |
kubectl label secret path-auth-secret -n fleet-local resources.cattle.io/backup=true
|
Assurez-vous que la sauvegarde est chiffrée pour protéger les informations d’identification sensibles. |
Stockage des informations d’identification dans Git
Il est recommandé de ne pas stocker les informations d’identification dans Git. Même si le dépôt est correctement protégé, les secrets sont à risque lors du clonage, etc. En tant que solution de contournement, des outils comme SOPS peuvent chiffrer les informations d’identification.
Au lieu de cela, référencez les secrets dans le cluster en aval. Pour les bundles de style manifeste et de style kustomize, faites-le dans les manifestes, par exemple, en montant les secrets ou en les référencant comme des variables d’environnement. Les bundles de style Helm peuvent utiliser valuesFrom pour lire des valeurs à partir d’un secret dans le cluster en aval.
Lors de l’utilisation de Kubernetes chiffrement au repos et du stockage des identifiants dans Git, configurez le cluster en amont pour inclure plusieurs SUSE® Rancher Prime Continuous Delivery CRDs dans la liste des ressources de chiffrement :
- secrets
- bundles.fleet.cattle.io
- bundledeployments.fleet.cattle.io
- contents.fleet.cattle.io
Sauvegarde et restauration
Lors de la sauvegarde et de la restauration de SUSE® Rancher Prime Continuous Delivery avec des charges de travail existantes, qu’il s’agisse de GitRepos ou de HelmOps, considérez :
Disponibilité du serveur API Kubernetes
Un agent SUSE® Rancher Prime Continuous Delivery dans un cluster en aval surveille un espace de noms spécifique au cluster sur le cluster en amont. Lors d’une opération de restauration, les modifications apportées dans le cluster en amont peuvent affecter les déploiements dans les clusters en aval, qui pourraient être mis à jour ou supprimés en fonction d’un état incomplet provenant de l’amont.
Pour éviter cela, rendez le serveur API Kubernetes inaccessible aux clusters en aval pendant qu’une restauration est en cours. Les agents ne doivent pas accéder au cluster en amont tant que toutes les ressources ne sont pas recréées.
En suspens
Un GitRepo mis en pause mettra en pause les bundles et les déploiements de bundles. Cela signifie :
-
La suppression d’un déploiement de bundle d’un GitRepo mis en pause : SUSE® Rancher Prime Continuous Delivery ne recréera pas le déploiement de bundle tant que le GitRepo n’est pas réactivé.
-
La suppression d’un bundle d’un GitRepo mis en pause : SUSE® Rancher Prime Continuous Delivery supprimera les déploiements de bundle provenant de ce bundle, et ne recréera pas le bundle (ni les déploiements de bundle) tant que le GitRepo n’est pas réactivé.
Mettre un GitRepo en pause empêche uniquement la création ou la mise à jour des bundles et des déploiements de bundles. Cela n’affecte que les opérations contrôleur, pas les opérations SUSE® Rancher Prime Continuous Delivery agent. Pour éviter que les ressources utilisateur dans un bundle ne soient supprimées lors de la suppression d’un déploiement de bundle, utilisez keepResources.
Dépannage
Voir la section SUSE® Rancher Prime Continuous Delivery Dépannage docs de dépannage.