Uurime, kuidas kasutada Custom Tooling'i Argo CD-s

Uurime, kuidas kasutada Custom Tooling'i Argo CD-s

MĂ”ni aeg pĂ€rast esimese artikli kirjutamist kus ma osavasti tegelesin jsonnet'i ja GitLab'iga, mĂ”istsin, et pipeline'id on muidugi head, kuid liialt keerulised ja ebamugavad.Enamasti on nĂ”utav tĂŒĂŒpiline ĂŒlesanne: "genereerida YAML ja paigutada see Kubernetesesse". Selle ĂŒlesandega suudab Argo CD suurepĂ€raselt hakkama saada.

Argo CD vĂ”imaldab ĂŒhendada Git-repo ja sĂŒnkroniseerida selle oleku Kubernetesega. Vaikimisi toetab see mitmeid rakenduste tĂŒĂŒpe: Kustomize, Helm chart'id, Ksonnet, puhas Jsonnet vĂ”i lihtsalt kaustad, kus on YAML/JSON manifestid.

Selle komplekti enamikule kasutajatele piisab, kuid mitte kÔigile. Argo CD-s on vÔimalus kasutada custom tooling'ut, et rahuldada kÔigi vajadusi.

Esiteks huvitab mind vÔimalus lisada toe

qbec git-crypt ja , mida kÀsitleti pÔhjalikult eelnevas artiklis.Enne seadistuse alustamist on kÔigepealt vaja aru saada, kuidas tÀpselt Argo CD töötab.

Iga lisatud rakenduse jaoks on tal kaks faasi:

init

  • — algne ettevalmistus enne juurutamist, siin vĂ”ib olla kĂ”ike: sĂ”ltuvuste allalaadimist, saladuste lahtipakkimist ja muud. generate
  • — kĂ€su genereerimise tĂ€itmine, vĂ€ljund peaks olema valideeritud YAML streaming, see on tĂ€pselt see, mis rakendatakse klastris. TĂ€htis on, et Argo rakendab seda lĂ€henemist igat tĂŒĂŒpi rakenduste jaoks, sealhulgas Helm'i jaoks. Argo CD-s ei tegele Helm versioonide juurutamisega klastrisse, vaid kasutatakse ainult manifestide genereerimiseks.

Omaette on Argo suudab natiivselt töödelda Helm hook'e, mis vÔimaldab mitte rikkuda versioonide rakendamise loogikat.

QBEC

Qbec vÔimaldab mugavalt kirjeldada rakendusi jsonnet'i abil ning tal on ka vÔimalus renderdada Helm chart'e. Kuna Argo CD suudab normaalselt töödelda Helm hook'e, vÔimaldab selle funktsiooni kasutamine Argo CD-s saavutada veelgi tÀpsemaid tulemusi.

Qbec toe lisamiseks argocd-sse on vaja kahte asja:

Argo CD konfiguratsioonis peab olema mÀÀratud teie custom plugin ja kÀsud manifestide genereerimiseks.

  • vajalikud binaarfailid peavad olema kergesti kĂ€ttesaadavad pildis
  • argocd-repo-server Esimene ĂŒlesanne.

lahendatakse suhteliselt lihtsalt: (kÀsku

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

ei kasutata) — algne ettevalmistus enne juurutamist, siin vĂ”ib olla kĂ”ike: sĂ”ltuvuste allalaadimist, saladuste lahtipakkimist ja muud. $ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"

Binaarfailide lisamiseks on soovitatav

Binaarfailide lisamiseks pakutakse looge uus pilt, vÔi kasutada init-konteineri nÀpunÀidet:

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

NĂŒĂŒd vaatame, kuidas 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

Mu variables ENVIRONMENT edastame keskkonna nime, mille jaoks tuleb manifeste genereerida.

rakendame ja vaatame, mis meil vÀlja tuli:

Uurime, kuidas kasutada Custom Tooling'i Argo CD-s

rakendus on edukalt juurde installitud, suurepÀrane!

, mida kÀsitleti pÔhjalikult eelnevas artiklis.

Git-crypt vĂ”imaldab seadistada lĂ€bipaistva krĂŒpteerimise hoidlat. See on lihtne ja turvaline viis hoiduda konfidentsiaalseteandmete otse git-is salvestamisest.

git-crypti rakendamine osutus keerulisemaks.

Teoreetiliselt saaksime kÀivitada git-crypt unlock meie custom-plugin'i init-etapis, kuid see pole eriti mugav, kuna ei vÔimaldaks kasutada kohalikke juurutamismeetodeid. NÀiteks Helm ja Jsonnet puhul kaotame paindliku GUI-liidese, mis lihtsustab rakenduse seadistamist (values-failid ja muud).

Just seetĂ”ttu tahtsin hoidlat dekrĂŒpteerida veel varasemal etapil, kopeerimise ajal.

Kuna Argo CD ei paku hetkel vĂ”imalust kirjeldada mingeid hook'e hoidla sĂŒnkroniseerimiseks, pidime selle piirangu mööda juhtima nutika shell skriptiga, 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 tĂ€idab git fetch igal korral enne juurutamise operatsiooni. Just selle kĂ€su kĂŒlge kinnitame git-crypt unlock hoidla dekrĂŒpteerimise.

katsetamiseks 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 dekrĂŒpteerib meie hoidlaid. EelkĂ”ige peame genereerima gpg- vĂ”tme:

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

$ printf "%sn" 
    "%no-protection" 
    "Key-Type: default" 
    "Subkey-Type: default" 
    "Name-Real: TEIE NIMI" 
    "Name-Email: TEIE 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 jÀrgmiste sammude jaoks. Ekspordime 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 on jÀÀnud, on see konteinerisse suunamine Esimene ĂŒlesanne, selleks redigeerime deployment'i:

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

Ja asendame olemasoleva gpg-keys mahu projected, kuhu 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 kÀivitamisel automaatselt kÔik gpg-vÔtmed sellest kaustast, 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 key signing key) 

sec   rsa3072 2020-09-03 [SC]
      9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid           [ultimate] YOUR NAME 
ssb   rsa3072 2020-09-03 [E]

SuurepĂ€rane, vĂ”tme laadimine Ă”nnestus! NĂŒĂŒd peame lihtsalt lisama Argo CD meie registrisse 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

Seame usaldusastme:

$ gpg --edit-key 8CB8B24F50B4797D
trust
5

Lisame argo koostööpartneriks meie projekti:

$ git-crypt add-gpg-user 8CB8B24F50B4797D

Teemakohased lingid:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster