Tresneria pertsonalizatua ulertzea Argo CDan

Tresneria pertsonalizatua ulertzea Argo CDan

Idatzi ondoren denbora pixka bat lehen artikulua, non jsonnet eta gitlab trebetasunez kudeatzen nituen, hodiak onak direla konturatu nintzen, baina alferrikako konplikatuak eta deserosoak direla.

Kasu gehienetan, ohiko zeregin bat behar da: "sortu YAML eta jarri Kubernetes-en". Egia esan, hori da Argo CDak ikaragarri ondo egiten duena.

Argo CD-k Git biltegi bat konektatu eta bere egoera Kubernetesera bidaltzeko aukera ematen du. Lehenespenez, hainbat aplikazio motaren laguntza dago: Kustomize, Helm diagramak, Ksonnet, Jsonnet hutsa edo YAML/JSON manifestuak dituzten direktorioetan soilik.

Multzo hau nahikoa izango da erabiltzaile gehienentzat, baina ez denentzat. Guztion beharrak asetzeko, Argo CD-k tresna pertsonalizatuak erabiltzeko gaitasuna du.

Lehenik eta behin, laguntza gehitzeko aukera interesatzen zait qbec и git-crypt, aurreko artikuluan guztiz eztabaidatu zirenak.

Konfigurazioari ekin aurretik, Argo CD-ak nola funtzionatzen duen ulertu behar duzu.

Gehitutako aplikazio bakoitzeko, bi fase ditu:

  • init — hedapenaren aurretik hasierako prestaketa, hemen edozer gerta daiteke: mendekotasunak deskargatzea, sekretuak desegitea eta abar.
  • sortzen — manifestua sortzeko komandoa zuzenean exekutatuz, irteerak baliozko YAML korronte bat izan behar du, hau da, hain zuzen, klusterrean aplikatuko dena.

Azpimarragarria da Argo-k edozein aplikazio motari aplikatzen diola ikuspegi hau, Helm barne. Hau da, Argo CD-en Helm-ek ez ditu bertsioak zabaltzen klusterean, baizik eta manifestuak sortzeko soilik erabiltzen da.

Bere aldetik, Argo-k Helm amuak prozesatu ditzake natiboki, eta horri esker, oharra aplikatzearen logika ez urratzeko aukera ematen du.

QBEC

Qbec-ek jsonnet erabiliz aplikazioak eroso deskribatzeko aukera ematen du, eta, horrez gain, Helm diagramak errendatzeko gaitasuna du, eta Argo CD-k normalean Helm amuak prozesatu ditzakeenez, funtzio hau Argo CD-ekin erabiltzeak emaitza are zuzenagoak lortzeko aukera ematen du.

Argocd-i qbec laguntza gehitzeko bi gauza behar dituzu:

  • Argo CD konfigurazioan, zure plugin pertsonalizatua eta manifestuak sortzeko komandoak definitu behar dira.
  • beharrezko bitarrak irudian eskuragarri egon behar dira argocd-repo-server.

Lehen zeregina erabakitzen ari da nahiko sinplea:

# cm.yaml
data:
  configManagementPlugins: |
    - name: qbec
      generate:
        command: [sh, -xc]
        args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"']

(taldea init ez da erabiltzen)

$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"

Bitarrak gehitzeko iradokitzen da bildu irudi berri bat, edo erabili init edukiontziaren trikimailua:

# deploy.yaml
spec:
  template:
    spec:
      # 1. Define an emptyDir volume which will hold the custom binaries
      volumes:
      - name: custom-tools
        emptyDir: {}
      # 2. Use an init container to download/copy custom binaries into the emptyDir
      initContainers:
      - name: download-tools
        image: alpine:3.12
        command: [sh, -c]
        args:
        - wget -qO- https://github.com/splunk/qbec/releases/download/v0.12.2/qbec-linux-amd64.tar.gz | tar -xvzf - -C /custom-tools/
        volumeMounts:
        - mountPath: /custom-tools
          name: custom-tools
      # 3. Volume mount the custom binary to the bin directory (overriding the existing version)
      containers:
      - name: argocd-repo-server
        volumeMounts:
        - mountPath: /usr/local/bin/qbec
          name: custom-tools
          subPath: qbec
        - mountPath: /usr/local/bin/jsonnet-qbec
          name: custom-tools
          subPath: jsonnet-qbec

$ kubectl -n argocd patch deploy/argocd-repo-server -p "$(cat deploy.yaml)"

Orain ikus dezagun nolakoa izango den gure aplikazioaren manifestua:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: qbec-app
  namespace: argocd
spec:
  destination: 
    namespace: default
    server: https://kubernetes.default.svc
  project: default
  source: 
    path: qbec-app
    plugin: 
      env: 
        - name: ENVIRONMENT
          value: default
      name: qbec
    repoURL: https://github.com/kvaps/argocd-play
  syncPolicy: 
    automated: 
      prune: true

Aldagaian INGURUMENA manifestuak sortu behar ditugun ingurunearen izena pasatzen dugu.

aplikatu dezagun eta ea zer lortzen dugun:

Tresneria pertsonalizatua ulertzea Argo CDan

Aplikazioa zabaldu da, bikaina!

git-crypt

Git-crypt-ek zure biltegirako enkriptazio gardena konfiguratzeko aukera ematen dizu. Datu sentikorrak zuzenean git-en gordetzeko modu sinple eta segurua da.

Git-crypt-en ezarpena zailagoa izan zen.

Teorian egin genezake git-crypt unlock gure plugin pertsonalizatuaren hasierako fasean, baina hau ez da oso erosoa, ez bailuke baimenduko jatorrizko inplementazio-metodoak erabiltzea. Adibidez, Helm eta Jsonnet-en kasuan, aplikazioen konfigurazioa (balioen fitxategiak, etab.) errazteko aukera ematen duen GUI interfaze malgua galtzen dugu.

Horregatik, biltegia lehenago inprimatu nahi nuen, klonazioan.

Momentuz Argo CD-ak ez duelako biltegia sinkronizatzeko kakorik deskribatzeko gaitasunik ematen, muga hau git komandoa ordezkatzen duen shell script delikatua gainditu behar izan dugu:

#!/bin/sh
$(dirname $0)/git.bin "$@"
ec=$?
[ "$1" = fetch ] && [ -d .git-crypt ] || exit $ec
GNUPGHOME=/app/config/gpg/keys git-crypt unlock 2>/dev/null
exit $ec

Argo CDa egiten du git fetch hedapen-eragiketa baino lehen. Komando horri exekuzioa esleituko diogu git-crypt unlock biltegia desblokeatzeko.

erabil ditzakezun probetarako nire docker irudia behar duzun guztia dauka dagoeneko:

$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3

Orain pentsatu behar dugu Argok nola deszifratuko dituen gure biltegiak. Alegia, sortu gpg gako bat horretarako:

$ kubectl exec -ti deploy/argocd-repo-server -- bash

$ printf "%sn" 
    "%no-protection" 
    "Key-Type: default" 
    "Subkey-Type: default" 
    "Name-Real: YOUR NAME" 
    "Name-Email: YOUR EMAIL@example.com" 
    "Expire-Date: 0" 
    > genkey-batch 

$ gpg --batch --gen-key genkey-batch
gpg: WARNING: unsafe ownership on homedir '/home/argocd/.gnupg'
gpg: keybox '/home/argocd/.gnupg/pubring.kbx' created
gpg: /home/argocd/.gnupg/trustdb.gpg: trustdb created
gpg: key 8CB8B24F50B4797D marked as ultimately trusted
gpg: directory '/home/argocd/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/argocd/.gnupg/openpgp-revocs.d/9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D.rev'

Gorde dezagun gakoaren izena 8CB8B24F50B4797D urrats gehiagorako. Esportatu gakoa bera:

$ gpg --list-keys
gpg: WARNING: unsafe ownership on homedir '/home/argocd/.gnupg'
/home/argocd/.gnupg/pubring.kbx
-------------------------------
pub   rsa3072 2020-09-04 [SC]
      9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid           [ultimate] YOUR NAME <YOUR EMAIL@example.com>
sub   rsa3072 2020-09-04 [E]

$ gpg --armor --export-secret-keys 8CB8B24F50B4797D

Eta gehitu aparteko sekretu gisa:

# argocd-gpg-keys-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: argocd-gpg-keys-secret
  namespace: argocd
stringData:
  8CB8B24F50B4797D: |-
    -----BEGIN PGP PRIVATE KEY BLOCK-----

    lQVYBF9Q8KUBDACuS4p0ctXoakPLqE99YLmdixfF/QIvXVIG5uBXClWhWMuo+D0c
    ZfeyC5GvH7XPUKz1cLMqL6o/u9oHJVUmrvN/g2Mnm365nTGw1M56AfATS9IBp0HH
    O/fbfiH6aMWmPrW8XIA0icoOAdP+bPcBqM4HRo4ssbRS9y/i
    =yj11
    -----END PGP PRIVATE KEY BLOCK-----

$ kubectl apply -f argocd-gpg-keys-secret.yaml

Guri geratzen zaigun gauza bakarra edukiontzira botatzea da argocd-repo-server, horretarako, editatu hedapena:

$ kubectl -n argocd edit deploy/argocd-repo-server

Eta lehendik dagoena ordezkatuko dugu gpg-teklak bolumena piztuta projected, non gure sekretua adierazten dugun:

   spec:
     template:
       spec:
         volumes:
         - name: gpg-keys
           projected:
             defaultMode: 420
             sources:
             - secret:
                 name: argocd-gpg-keys-secret
             - configMap:
                 name: argocd-gpg-keys-cm

Argo CD-ak automatikoki kargatzen ditu direktorio honetatik gpg gakoak edukiontzia hasten denean, beraz, gure gako pribatua ere kargatuko du.

egiaztatu dezagun:

$ kubectl -n argocd exec -ti deploy/argocd-repo-server -- bash
$ GNUPGHOME=/app/config/gpg/keys gpg --list-secret-keys
gpg: WARNING: unsafe ownership on homedir '/app/config/gpg/keys'
/app/config/gpg/keys/pubring.kbx
--------------------------------
sec   rsa2048 2020-09-05 [SC] [expires: 2021-03-04]
      ED6285A3B1A50B6F1D9C955E5E8B1B16D47FFC28
uid           [ultimate] Anon Ymous (ArgoCD key signing key) <noreply@argoproj.io>

sec   rsa3072 2020-09-03 [SC]
      9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid           [ultimate] YOUR NAME <YOUR EMAIL@example.com>
ssb   rsa3072 2020-09-03 [E]

Bikaina, giltza kargatuta dago! Orain Argo CD-a gure biltegian kolaboratzaile gisa gehitzea besterik ez dugu eta automatikoki deszifratu ahal izango du hegan.

Inportatu gakoa tokiko ordenagailura:

$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pem

Ezar dezagun konfiantza maila:

$ gpg --edit-key 8CB8B24F50B4797D
trust
5

Gehi dezagun argo gure proiektuari kolaboratzaile gisa:

$ git-crypt add-gpg-user 8CB8B24F50B4797D

Lotutako estekak:

Iturria: www.habr.com

Erosi hosting fidagarria DDoS babesa duten guneetarako, VPS VDS zerbitzariak 🔥 Erosi webguneentzako ostatu fidagarria DDoS babesarekin, VPS VDS zerbitzariak | ProHoster