Home ArgoCD Operator + TFS2018
Post
Cancel

ArgoCD Operator + TFS2018

Tratando de conectar ArgoCD con TFS2018 vía SSH me encontré con un problema.

1
Unable to negotiate with <<ip> port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

TFS 2018 tiene unos algoritmos de cifrado un poco desactualizados y no están soportador por defecto por ArgoCD ver.

Para empeorar un poco todo en mi caso puntual ArgoCD esta implementado con un Operator . Lo que significa que la customización es mas dificil por que no se puede editar el Deployment directamente. Afortunadamente ArgoCD tiene dos opciones para esto

  1. Crear una imagen a medida de ArgoCD

  2. El componente repoadmite volumes y volumesMount : Custom Tooling - Argo CD Operator

En mi caso la opción 2 es mejor por que no tengo que mantener actualizada una imagen custom de argo.

Crear un ConfigMap nuevo con la configuración de SSH.

1
2
3
4
5
6
7
8
9
kind: ConfigMap
apiVersion: v1
metadata:
  name: argocd-ssh-legacy-cm
data:
  ssh_legacy.conf: |
    KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
    PubkeyAcceptedAlgorithms +ssh-rsa
    HostkeyAlgorithms +ssh-rsa

Modificar la propiedad repo del ArgoCD para que cree un volume apuntando al ConfigMap anterior con su correspondiente volumeMount a la carpeta /etc/ssh/ssh_config.d

Este ArgoCD esta corriendo en un cluster OpenShift y tiene la version 2.6.11 de ArgoCD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: argocd
spec:
  server:
    insecure: true
    route:
      enabled: true
      tls:
        insecureEdgeTerminationPolicy: Redirect
        termination: edge
  sso:
    dex:
      openShiftOAuth: true
    provider: dex
  rbac:
    defaultPolicy: "role:none"
    policy: |
      p, role:none, applications, *, */*, deny
      p, role:none, clusters, *, *, deny
      p, role:none, repositories, *, *, deny
      p, role:none, logs, *, *, deny
      p, role:none, exec, *, */*, deny
      g, argocd_admins, role:admin
    scopes: "[groups]"
  repo:
    # ssh legacy config
    volumeMounts:
      - mountPath: /etc/ssh/ssh_config.d
        name: ssh-legacy
    volumes:
      - configMap:
          defaultMode: 420
          name: argocd-ssh-legacy-cm
        name: ssh-legacy
  # 2.6.11 version
  version: "sha256:440998682e5396a4d74bd5abcccf645011c824c1025e3559fa3f5d18f326847b"
This post is licensed under CC BY 4.0 by the author.