Estoy tratando de hacer que mi aplicación se conecte a mi instancia de PostgreSQL a través de una conexión cifrada y segura.
Configuré el certificado de mi servidor y generé el certificado del cliente y los archivos clave.
El siguiente comando se conecta sin problemas:
psql "sslmode=verify-ca sslrootcert=server-ca.pem \ sslcert=client-cert.pem sslkey=client-key.pem \ hostaddr=<instance_ip> \ port=5432 \ user=db dbname=dbname"Desafortunadamente, no pude encontrar una manera de pasar la clave del cliente como valor, solo puedo pasar la ruta del archivo. Incluso usando las variables de entorno predeterminadas de psql, esto no es posible: https://www.postgresql.org/docs/current/libpq-envars.html
Golang sigue las mismas especificaciones que lib-pq y no hay forma de pasar el certificado y los valores clave: https://pkg.go.dev/github.com/lib/pq?tab=doc#hdr-Connection_String_Parameters .
Quiero almacenar el certificado del cliente y la clave en las variables de entorno por razones de seguridad, no quiero almacenar archivos confidenciales en github/gitlab.
Simplemente establezca los valores en su entorno y puede obtenerlos en una función de inicio.
func init() { var := os.Getenv("SOME_KEY") }Cuando desee configurarlos con K8, simplemente haga esto en un archivo yaml.
apiVersion: v1 kind: Secret metadata: name: my-secret data: SOME_KEY: the-value-of-the-keyLuego de inyectar en el medio ambiente hacer.
envFrom: - secretRef: name: my-secretAhora, cuando su función de inicio se ejecute, podremos ver ALGUNA_CLAVE.
Si desea pasar un secreto como un archivo, haga algo como esto.
kubectl create secret generic my-secret-files --from-file=my-secret-file-1.stuff --from-file=my-secret-file-2.stuffLuego en su despliegue.
volumes: - name: my-secret-files secret: secretName: my-secret-filesTambién en su implementación debajo de su contenedor.
volumeMounts: - name: my-secret-files mountPath: /config/Ahora su init podría ver.
/config/my-secret-file-1.stuff /config/my-secret-file-2.stuff