Saltar al contenido

Spring Cloud Config Server usando SSH key para Git y ejecutándose en Docker

Tenemos la mejor respuesta que encontramos online. Esperamos que te sea de ayuda y si puedes aportar algún detalle que nos pueda ayudar a crecer hazlo libremente.

La primera pieza es la configuración. Quieres ignorar el estándar privado key y utilice uno proporcionado como variable de entorno. (SSH_KEY). Además, el repositorio de git es un EV (GIT_URL) pero puede codificarlo si lo desea.

spring:
  cloud:
    config:
      server:
        git:
          uri:  $GIT_URL
          ignore-local-ssh-settings: true
          private-key: $SSH_KEY

La segunda parte es complicada. Para Dev, quieres el key en línea, por lo que debe utilizar una tubería para prefix el bloque en YAML. (Tenga en cuenta esto key se tira como en lo acabo de generar y ahora lo he tirado)

private-key: |
                    -----BEGIN RSA PRIVATE KEY-----
                    MIIEpAIBAAKCAQEAszmCR06LVHk/kNYV6LoYgEfHlK4rp75sCsRJ7rdAbWNED+yB
                    bneOm5gue0LGIhT7iTP9D7aN6bKVHv1SBconCA7Pa2NMA9epcMT5ecJc8ndpZOFn
                    iqM77jmMMPvj8EIC06w5oK5zoYwpGotYQFHllf8M+20HtW2fZdPYAYwLcVdmc5tI
                    vLoS+10qw5D3X9zrwk2Cbt37Iqnz1cHOQq+g7sxgVgt18aIKKeg0JslaGqSlWMoT
                    ICUMHj89E4BMHj8ND8otSXHL+VhN+ghd7w1MpckxLWBsNs1+G1FuiJEVAtRq/j+8
                    SOilxgifvI1LqpZ5kO01XFlmkcuN4NMT03qpcwIDAQABAoIBAB5oQGk2sz7mv1kk
                    aV0tzaBeDUd1cWSpUw1UljKRFrY4ZEDLYH5MfH57iE9TWehIZRC3KFU1JMikitZS
                    JktjK9IbKSfQFgKE4XOHh8gXqMteZRw/feCwpydYzic1ZUvK903QZ4qSbn3XGNYv
                    FA79lhUny50Qt4EZkzSkh35js0FMSR9VmyXENxN6IgXUZyoaNAATr44Vkd488BY2
                    7PvdOniemo8/8p4Ij0Aq9Q7rOtm77ZXjyFRX5mDTi2ndSllMEhVcWXHSii+ukbvF
                    117Ns+8M7VWroNfRzI+Ilm/Xz/ePOLlNoYcY0h5+QM9vMPTX9Cpl5WofgOMK1sKd
                    mSdI4ukCgYEA12kcu0aDyIrEPHcyaT9izSFply0Uon2QKS9EQn6cr83vaEGViamh
                    f5q1coYouGnsLfbgKolEMKsYtbmJvInPFDCdc2x0Fmc207Wp1OECsN+HwElEXkrs
                    uPDpGQgs5odjN5Grue9837920oG3UBBdVDAKly2dTOcvoWW+88seFSUCgYEA1P7f
                    p78HDMQ8zTy5+3Rd4+lmJjPsY618XxSQ80j8Elrhi/DyTMA0XGc5c3cKRPmSj+JD
                    GN34WQbw7JO2mKM7YJs+tkSBeTKce8F3cZQy1jy3LNHCtfXylOxmxOFKynV5h2b/
                    jno+pGdmAPK5yvnGASd2eujtzt+AL07XiD2LnLcCgYEAsFRz131WfP/SuShdlLf1
                    WbODKuQVIxojuwLdHo1kF6k805v0G/dGoxzycOgPRz41vj57q3Yn4qr8FC3n6PTq
                    FT3idUyPDpO41r67Ye469KxWBHo1Q/aTJqTWOs5tatvixOcyqoa3MrUZQCI8+4YZ
                    z8Nvt+b3/66zV6vhDtHzMx0CgYAvWW2M0+mUS/ecRHivzqGkrdkYewh87C8uz9qd
                    SsdGqU9kla63oy7Ar+3Unkz5ImYTeGAkIgw4dlOOtBOugPMNOdXKHRaPQ9IHrO2J
                    oUFf4OVzoDnhy4ge1SLPd6nxsgXPNPVwzfopABdr9Ima9sWusgAjuK5NA+ByI9vE
                    HLJxpwKBgQCTM938cdx457ag1hS6EaEKyqljS1/B8ozptB4cy3h0hzw0crNmW84/
                    1Lt9MJmeR4FrWitQkkVLZL3SrYzrP2i+uDd4wVVD5epvnGP/Bk6g05/eB9LgDRx/
                    EeBgS282jUBkXZ6WpzqHCcku3Avs3ajzsC1WaEYx0tCiBxSkiJlaLQ==
                    -----END RSA PRIVATE KEY-----

En el frente de producción, necesita usar una variable bash en el símbolo del sistema para almacenar su key antes de pasarlo al comando de Docker que ejecuta su contenedor. Ejemplo:

$ pem=$( cat path_to_key )
$ docker run -e "SSH_KEY=$pem" configserver

En este punto, debería encargarse de la aplicación. Ahora todo lo que necesita es superar el problema del host ssh no confiable. Para esto, agregue estas líneas en su Dockerfile. Reemplace “bitbucket.org” con el host que desee. Estos comandos crean el directorio de configuración ssh, corrigen los permisos y luego crean y completan el archivo de hosts conocidos.

RUN mkdir -p /root/.ssh
RUN chmod 700 /root/.ssh
RUN ssh-keyscan bitbucket.org > /root/.ssh/known_hosts

Quería agregar un giro más a esto, que con suerte eliminaría la necesidad de perder el tiempo con SSH keys en el archivo YAML (o en variables env), que suele ser una mala idea.

Esto gira en torno al archivo de configuración SSH, por lo que si la aplicación no tiene acceso a él o no se puede modificar, esto no funcionará (pero no puedo pensar en ninguna situación del mundo real en la que esto se aplicaría, incluidas las implementaciones en la nube : las plantillas de AWS Cloudformation o Kubernetes ConfigMaps proporcionarían soluciones útiles).

El problema gira (en su mayor parte) en torno a la limitación (bastante inexplicable) de no poder especificar un key archivo en las propiedades de la aplicación Spring Config.

En tus ~/.ssh/config archivo, puede agregar lo siguiente:

Host git-config
    HostName github.myserver.example.com
    User someone
    IdentityFile /path/to/private_key

(Necesito conectarme a un servidor privado de GitHub Enterprise y el usuario asociado con SSH key no es lo mismo con el que se está ejecutando el servidor de aplicaciones: esto funciona bien; si ese no es el caso, simplemente use github.com Para el HostNamey omitir el User)

Luego, en lugar de usar el URI de GitHub real, algo como:

[email protected]:my-team/config-properties-demo.git

tu reemplazas git-config para el anfitrión:

spring:
  cloud:
    config:
      server:
        git:
          uri: [email protected]:my-team/config-properties-demo.git
          strictHostKeyChecking: false

De hecho, es un poco engorroso, pero relativamente fácil de automatizar. Una opción mucho más preferible sería que Spring Config agregue otra opción que apunte a lo privado key material:

spring:
  cloud:
    config:
      server:
        git:
          uri: [email protected]:my-team/config-properties-demo.git
          user: someone
          private_key_file: /path/to/private_key
          strictHostKeyChecking: false

Supongo que este es uno de la sección “solicitudes de mejora” …

Reseñas y calificaciones del tutorial

Si estás contento con lo expuesto, tienes el poder dejar una noticia acerca de qué le añadirías a esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *