Ir al contenido
  1. Posts/

Usando GHCR desde ArgoCD

4 mins·
Github Oci Helm Chart Argocd
Tabla de contenido

En nuestra primera parte Usando Github Container Registry para almacenar Helm Charts, terminamos centralizando nuestros Helm Charts en Github, pero ahora ¿que sigue?.

Lo que sigue, es poder usarlos desde ArgoCD para seguir nuestros tan queridos principios de GitOps.

Prerrequisitos
#

  • Haber seguido el tutorial mencionado más arriba o haber logrado “lo mismo” de alguna forma,
  • External Secrets Operator (aun que puede ser reemplazado con cualquier otro equivalente como SOPS o Sealed Secrets).
  • Una instancia de ArgoCD corriendo.

Generando un token en Github
#

Lo primero que necesitamos es ir a Github a la sección de Personal Access Tokens y generar un Personal Access Token (Classic). Una vez ahí damos click en el botón de Generate new token.

Nota! Estamos usando PAT en lugar de Fine-Grained Tokens dado que estos últimos no soportan acceso a Github Packages, ese detalle se encuentra aquí

GHPersonal Access Token
Sección de Personal Access Tokens

Le damos un nombre acorde al token que en mi caso es Helm - ArgoCD y ajustamos el tiempo de expiración a 90 días, así tenemos que rotarlo cada 3 meses por seguridad.

GH Personal Access Token Creation - 1
Nuevo Personal Access Token - Parte 1

En cuanto a los scopes, marcamos el de read:packages, que es el que necesitamos para poder leer los paquetes y seleccionamos el botón de Generate token.

GH Personal Access Token Creation - 2
Nuevo Personal Access Token - Parte 2

Una vez generado, procedemos a copiarlo para usarlo más adelante.

GH Personal Access Token Creation - 2
Nuevo Personal Access Token - Parte 3

Almacenándolo de manera segura en Parameter Store
#

Personalmente me gusta mucho la combinación de External Secrets Operator (ESO) con AWS SSM (Parameter Store), lo cual permite manejar información sensible con los principios de GitOps.

Para esto vamos a nuestra cuenta de AWS, y vamos a crear un nuevo secreto en Parameter Store. En nombre decidí usar uno fácil de encontrar, /argocd/ghcr/token, en Description ingresamos algo acorde, y en Type, seleccionamos Secure String.

AWS SSM Parameter - 1
Agregando parametro a SSM - Parte 1

Ingresamos el token que generamos previamente en Github y lo pegamos en Value, finalmente damos click en Create Parameter.

AWS SSM Parameter - 2
Agregando parametro a SSM - Parte 2

Generando el secreto para ArgoCD
#

Una vez tengamos seguro nuestro token en SSM, nos toca generar un secreto que pueda ser usado por ArgoCD, para ello vamos a hacer uso de la manera declarativa.

Como apreciamos en los ejemplos por acá, el secreto necesita algunas particularidades como son labels y crearse sobre el namespace de argocd, en este caso, usando ESO. El siguiente ejemplo resume como se usaría:

# private-repo.yaml
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: eso-argocd-private-gcr
  namespace: argocd
spec:
  secretStoreRef:
    name: external-secrets-operator-cluster-store
    kind: ClusterSecretStore
  target:
    name: argocd-private-gcr
    template:
      engineVersion: v2
      metadata:
          labels:
            argocd.argoproj.io/secret-type: repository
            app.kubernetes.io/name: argocd-private-gcr
            app.kubernetes.io/part-of: argocd
          annotations:
            managed-by: argocd.argoproj.io

      data:
        url: ghcr.io/elposhox
        name: GCR
        type: helm
        enableOCI: 'true'
        username: 'ElPoshoX'
        password: '{{ .ghcr_token }}'

  data:
  - secretKey: ghcr_token
    remoteRef:
      key: /argocd/ghcr/token

Una de las partes más importantes, es la sección de data, donde le asignamos el nombre de ghcr_token (obteniendo el valor desde /argocd/ghcr/token) y lo usamos en la sección más arriba, en password: '{{ .ghcr_token }}', de igual manera usamos argocd.argoproj.io/secret-type: repository para disponibilizar ese source de tipo repositorio y finalmente, la url donde estarán los helm charts que hemos alojado previamente (nuestra url de Github Packages).

Aplicando el manifiesto
#

Paso simple, una vez creado el archivo anterior, procedemos a ejecutar el comando kubectl apply -f private-repo.yaml y el secreto deberá estar creado en nuestro cluster.

ESO secret
Secreto ESO sincronizado

K8S secret
Secreto K8S creado

Sincronizando y verificando
#

Una vez hecho esto y que ArgoCD esté sincronizado, podemos ir a Settings > Repositories y veremos ahí nuestro repositorio apuntando a Github Container Registry con Helm activado.

Repo Synced
Repositorio Helm Chart enlazado

Usando nuestro Helm Chart en ArgoCD
#

Para finalizar, desplegamos una aplicación usando nuestro Helm Chart y algún source, como se aprecia más abajo:

Helm Chart Used
Despliegue de aplicación usando el Helm Chart

Y esto sería todo! Veremos que nuestra aplicación despliega sin problema.

Espero les haya servido!

Relacionados

Usando Github Container Registry para almacenar Helm Charts
3 mins
Github Oci Helm Chart
Generando multiples contextos de EKS con AWS SSO
2 mins
K8s Aws Eks Sso Kubeconfig
Usando AWS S3 como Persistent Volume en EKS
8 mins
K8s Aws S3 Csi Storage
MetalLB + UDM SE + VLAN: Preparando el HomeLab
6 mins
K8s K3s Vlan Bgp Udm
K3S: Kubernetes ligero
7 mins
K8s K3s Tools