Uurime Custom Toolingut Argo CD-s

Uurime Custom Toolingut Argo CD-s

MĂ”ne aja pĂ€rast pĂ€rast esimese artikli kirjutamist kui ma osavalt jsonneti ja gitlabiga toime tulin, sain aru, et pipeline'id on muidugi head, kuid ĂŒlemÀÀra keerulised ja ebamugavad.Enamasti on vajalik tĂŒĂŒpiline ĂŒlesanne: "generaatori YAML ja paigaldada see Kubernetesesse". Just see on see, millega Argo CD suurepĂ€raselt toime tuleb.

Argo CD vĂ”imaldab ĂŒhendada Git-repo ja sĂŒnkroonida selle olekut Kubernetesesse. Vaikeselt on toetatud mitut tĂŒĂŒpi rakendusi: Kustomize, Helm graafikud, Ksonnet, puhas Jsonnet vĂ”i lihtsalt kataloogid YAML/JSON manifestide jaoks.

Enamikule kasutajatele peaks sellest piisama, kuid mitte kÔigile. KÔikide vajaduste rahuldamiseks pakub Argo CD vÔimalust kasutada kohandatud tööriistu.

Esialgu huvitab mind toimetamise toe lisamise vÔimalus

, mida on kÀsitletud eelmises artiklis. qbec ja git-cryptEnne konfiguratsiooniga alustamist tuleb kÔigepealt mÔista, kuidas tÀpselt Argo CD töötab.

Iga lisatud rakenduse jaoks on kaks etappi:

— algne ettevalmistus enne juurutamist, siin vĂ”ib olla kĂ”ike: sĂ”ltuvuste allalaadimine, saladuste lahtipakkimine ja muud.

  • init generate
  • genereerida — kĂ€su tĂ€itmine manifestide genereerimiseks, vĂ€ljund peab olema kehtiv YAML voog, see on see, mis rakendatakse klastris.

On tÀhelepanuvÀÀrne, et Argo kasutab seda lÀhenemist mistahes rakenduste puhul, sealhulgas Helm jaoks. See tÀhendab, et Argo CD ei tegele versioonide klastrisse paigaldamisega, vaid kasutatakse vaid manifestide genereerimiseks.

Omalt poolt oskab Argo natiivselt kÀsitleda Helm-hukke, mis vÔimaldab mitte rikkuda versioonide rakendamise loogikat.

QBEC

Qbec vÔimaldab mugavalt kirjeldada rakendusi jsonnet'i abil ning sellel on ka vÔimalus renderdada Helm-i graafikuid. Kuna Argo CD oskab korralikult kÀsitleda Helm-hukke, siis selle funktsionaalsuse kasutamine koos Argo CD-ga vÔimaldab saavutada veelgi tÀpsemaid tulemusi.

KĂ€ideldavuse lisamiseks qbec Argo CD-sse on vaja kahte asja:

  • Argo CD konfiguratsioonis peab olema mÀÀratud teie kohandatud plugin ja kĂ€sud manifestide genereerimiseks.
  • vajalikud biinaries peavad olema saadaval pildis argocd-repo-server.

Esimene ĂŒlesanne lahendatakse pĂ€ris lihtsalt:

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

(kÀsku init ei kasutata)

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

Binaaride lisamiseks soovitatakse koguda uus pilt, vÔi kasutada init-konteineri nipp:

# 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)"

Vaadake nĂŒĂŒd, milline nĂ€eb vĂ€lja meie rakenduse manifest:

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

Muutujas ENVIRONMENT me edastame keskkonna nime, mille jaoks tuleb manifeste genereerida.

rakendame ja vaatame, mis meil on:

Uurime Custom Toolingut Argo CD-s

rakendus on edukalt juurutatud, suurepÀrane!

git-crypt

Git-crypt vĂ”imaldab seada ĂŒles lĂ€bipaistva krĂŒpteerimise hoidlat. See on lihtne ja turvaline viis konfidentsiaalsete andmete salvestamiseks otse git-s.

git-crypti rakendamine osutus keerulisemaks.

Teoreetiliselt vÔiksime kÀivitada git-crypt unlock meie custom-plugin'i algstaadiumis, kuid see ei oleks vÀga mugav, kuna see ei lubaks kasutada kohalikke juurutusmeetodeid. NÀiteks Helm ja Jsonnet puhul kaotame paindliku GUI-liidese, mis lihtsustab rakenduse seadistamist (values-failid jms).

SeepÀrast tahtsin repositooriumi printimist teostada juba varasemal etapil, kloonimise kÀigus.

Kuna hetkel ei paku Argo CD vĂ”imalust kirjeldada mingeid repositooriumi sĂŒnkroniseerimise konksusid, tuli selle piirangu ĂŒletamiseks kasutada nutikat shell-skripti, mis asendab git-kĂ€sku:

#!/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 CD kÀivitab git fetch igal korral enne juurutamise operatsiooni. Just sellele kÀsule paneme kÀitamise git-crypt unlock repositooriumi avamiseks.

Testide jaoks saate kasutada minu docker-pilti milles on juba kÔik vajalik:

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

NĂŒĂŒd peame mĂ”tlema, kuidas Argo meie repositooriume dekrĂŒpteerib. TĂ€psemalt peame genereerima selle jaoks gpg-vĂ”tme:

$ 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'

Salvestame vÔtme nime 8CB8B24F50B4797D edasi sammude jaoks. Eksportime ise vÔtme:

$ 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 
sub   rsa3072 2020-09-04 [E]

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

Ja lisame selle eraldi salajana:

# 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

Ainus, mis meil veel alles jÀÀb, on see, et saata see konteinerisse argocd-repo-server, selleks redigeerime deployment'i:

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

Ja asendame olemasoleva gpg-keys volume'iga projected, kus mÀrkime meie salajase:

   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 laadib gpg- vÔtmed automaatselt selle kausta, kui konteiner kÀivitub, seega laadib ta ka meie privaatvÔtme.

kontrollime:

$ 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 vÔtme allkirjastamise vÔti) 

sec   rsa3072 2020-09-03 [SC]
      9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid           [ultimate] TEIE NIMI 
ssb   rsa3072 2020-09-03 [E]

SuurepĂ€rane, vĂ”ti on laaditud! NĂŒĂŒd peame lihtsalt lisama Argo CD meie hoidlasse koostööpartnerina ja see suudab selle automaatselt reaalajas dekrĂŒpteerida.

Impordime vÔtme kohalikku arvutisse:

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

Seadistame usaldusnivoo:

$ gpg --edit-key 8CB8B24F50B4797D
trust
5

Lisame argo koostööpartnerina meie projekti:

$ git-crypt add-gpg-user 8CB8B24F50B4797D

Seotud lingid:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster