Pagsabot sa Custom Tooling sa Argo CD

Pagsabot sa Custom Tooling sa Argo CD

Pipila ka panahon human sa pagsulat unang artikulo, diin ako deftly midumala sa jsonnet ug gitlab, akong naamgohan nga ang mga pipeline sa pagkatinuod maayo, apan dili kinahanglan nga komplikado ug dili kombenyente.

Sa kadaghanan nga mga kaso, gikinahanglan ang usa ka tipikal nga buluhaton: "pagmugna og YAML ug ibutang kini sa Kubernetes." Sa tinuud, kini ang gibuhat sa Argo CD nga maayo kaayo.

Gitugotan ka sa Argo CD nga makonektar ang usa ka Git repository ug ipadala ang estado niini sa Kubernetes. Sa kasagaran, adunay suporta alang sa pipila ka mga matang sa aplikasyon: Kustomize, Helm chart, Ksonnet, hubo nga Jsonnet, o mga direktoryo lang nga adunay YAML/JSON nga mga pagpakita.

Kini nga set igo na alang sa kadaghanan sa mga tiggamit, apan dili alang sa tanan. Aron matubag ang mga panginahanglan sa tanan, ang Argo CD adunay katakus sa paggamit sa custom tooling.

Una sa tanan, interesado ako sa posibilidad sa pagdugang sa suporta qbec и git-crypt, nga bug-os nga gihisgotan sa miaging artikulo.

Sa dili ka pa magsugod sa pag-configure, kinahanglan nimo nga masabtan kung giunsa ang pagtrabaho sa Argo CD.

Alang sa matag dugang nga aplikasyon, kini adunay duha ka hugna:

  • init — pasiunang pagpangandam sa dili pa i-deploy, bisan unsa ang mahitabo dinhi: pag-download sa mga dependency, pag-unpack sa mga sekreto, ug uban pa.
  • pagmugna - direkta nga nagpatuman sa manifest generation command, ang output kinahanglan usa ka balido nga YAML stream, mao gyud kini ang ipadapat sa cluster.

Ang katingad-an mao nga gigamit ni Argo kini nga pamaagi sa bisan unsang klase sa aplikasyon, lakip ang Helm. Kana mao, sa Argo CD Helm wala mag-deploy sa mga pagpagawas sa cluster, apan gigamit lamang aron makamugna og mga manifest.

Sa bahin niini, ang Argo makahimo sa pagproseso sa mga kaw-it sa Helm nga lumad, nga nagtugot niini nga dili makalapas sa lohika sa pagpadapat sa mga pagpagawas.

QBEC

Gitugotan ka sa Qbec nga dali nga ihulagway ang mga aplikasyon gamit ang jsonnet, ug dugang pa adunay katakus sa paghubad sa mga tsart sa Helm, ug tungod kay ang Argo CD kasagarang makaproseso sa mga kaw-it sa Helm, gamit kini nga bahin sa Argo CD nagtugot kanimo nga makab-ot ang labi pa nga husto nga mga sangputanan.

Aron madugangan ang suporta sa qbec sa argocd kinahanglan nimo ang duha ka butang:

  • Sa Argo CD config, ang imong custom nga plugin ug mga sugo alang sa pagmugna og mga manifests kinahanglang ipasabot.
  • ang gikinahanglan nga mga binary kinahanglang anaa sa hulagway argocd-repo-server.

Una nga buluhaton gihukman na medyo simple:

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

(team init wala gigamit)

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

Gisugyot nga idugang ang mga binary pagkolekta og bag-ong imahe, o paggamit init nga container trick:

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

Karon tan-awon nato kung unsa ang hitsura sa atong aplikasyon nga 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

Sa usa ka variable KALIBOTAN gipasa namo ang ngalan sa palibot diin kinahanglan namo nga makamugna og mga manifest.

atong iaplikar ug tan-awon kon unsay atong makuha:

Pagsabot sa Custom Tooling sa Argo CD

Ang aplikasyon na-deploy, maayo!

git-crypt

Gitugotan ka sa Git-crypt nga i-set up ang transparent encryption alang sa imong repository. Kini usa ka yano ug luwas nga paagi sa pagtipig sa sensitibo nga datos direkta sa git.

Ang pagpatuman sa git-crypt nahimong mas lisud.

Sa teoriya nga atong mahimo git-crypt unlock sa init nga yugto sa among custom nga plugin, apan kini dili kaayo sayon, tungod kay dili kini motugot sa paggamit sa lumad nga mga pamaagi sa pagdeploy. Pananglitan, sa kaso sa Helm ug Jsonnet, nawad-an kami usa ka flexible GUI interface nga nagtugot kanamo nga pasimplehon ang pagsumpo sa aplikasyon (mga file sa kantidad, ug uban pa).

Mao kini ang hinungdan nga gusto nako nga i-print ang repository sa sayo nga yugto, sa panahon sa pag-clone.

Tungod kay sa pagkakaron ang Argo CD wala maghatag og abilidad sa paghulagway sa bisan unsang mga kaw-it alang sa pag-synchronize sa repository, kinahanglan namong likayan kini nga limitasyon gamit ang usa ka tricky shell script nga mopuli sa git command:

#!/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

Nagpasundayag ang Argo CD git fetch matag higayon sa wala pa ang deployment operation. Kini nga sugo nga atong i-assign sa pagpatay git-crypt unlock aron maablihan ang repository.

para sa mga pagsulay nga imong magamit akong docker nga imahe nga aduna na sa tanan nga imong gikinahanglan:

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

Karon kinahanglan namong hunahunaon kung giunsa pag-decrypt ni Argo ang among mga repositoryo. Nga mao, paghimo og gpg key alang niini:

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

Atong tipigan ang yawe nga ngalan 8CB8B24F50B4797D alang sa dugang nga mga lakang. I-export ang yawe mismo:

$ 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

Ug idugang kini isip usa ka bulag nga sekreto:

# 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

Ang nahibilin na lang namo mao ang paglabay niini sa sudlanan argocd-repo-server, aron mahimo kini, usba ang deployment:

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

Ug atong pulihan ang kasamtangan gpg-mga yawe volume sa projected, diin among gipakita ang among sekreto:

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

Ang Argo CD awtomatik nga nagkarga sa mga gpg nga yawe gikan niini nga direktoryo sa diha nga ang sudlanan magsugod, mao nga kini usab magkarga sa atong pribadong yawe.

atong susihon:

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

Maayo, ang yawe gikarga! Karon kinahanglan na lang namon nga idugang ang Argo CD sa among repository isip usa ka kolaborator ug kini mahimo nga awtomatiko nga ma-decrypt kini sa langaw.

Import ang yawe sa lokal nga kompyuter:

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

Atong ibutang ang lebel sa pagsalig:

$ gpg --edit-key 8CB8B24F50B4797D
trust
5

Atong idugang ang argo isip usa ka kolaborator sa atong proyekto:

$ git-crypt add-gpg-user 8CB8B24F50B4797D

Mga sumpay nga adunay kalabotan:

Source: www.habr.com

Pagpalit kasaligan nga pag-host alang sa mga site nga adunay proteksyon sa DDoS, mga server sa VPS VDS 🔥 Pagpalit og kasaligang website hosting nga adunay proteksyon sa DDoS, VPS VDS servers | ProHoster