Actualmente uso una especificación de Kubernetes Deployment.yaml
para implementar un servicio. La especificación incluye una referencia literal a una dirección IP específica (marcada como se <static-ip-address>
muestra a continuación):
spec:
type: LoadBalancer
loadBalancerIP: <static-ip-address>
Me preocupa insertar información como contraseñas o direcciones IP en repositorios remotos de Git. ¿Puedo evitar esto, por ejemplo, haciendo uso de variables de entorno, por ejemplo, con una especificación de implementación y una implementación real aproximadamente de la siguiente manera:
spec:
type: LoadBalancer
loadBalancerIP: ${SERVICE_ADDRESS}
y
export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml
Obviamente, esta sintaxis específica aún no funciona. ¿Pero es posible algo así y, si es así, cómo?
Prefiero no confiar en una herramienta de aprovisionamiento separada . Los secretos s ConfigMap
parecen prometedores, pero aparentemente no se pueden consumir de una manera que se adapte a este propósito. Si pudiera hacer referencia directa a una dirección IP estática que se definió con gcloud compute addresses create service-address
eso sería lo mejor.
envsubst
. no sabía sobre esto hasta ahorased
. Según su definición, la solución propuesta consed
tampoco sería más fácil / limpia, ya que no estásed
instalada en las máquinas con Windows de forma predeterminada.No había otra solución gratamente simple: Tengo una dirección de Google Compute
my-address
definido, y al parecer lo puedo usar en la especificación del servicio, así:loadBalancerIP: my-address
.Con esto como fuente "externa" para direcciones IP y secretos para contraseñas, ya no hay necesidad de una herramienta de aprovisionamiento (o plantillas) para mi caso de uso simple (dentro de un entorno GKE).
OBSOLETO AHORA:
sed
Después de todo, he decidido usar una especie de herramienta de aprovisionamiento, a saber, "incorporada" .Mi
Deployment.yaml
ahora contiene una "variable de plantilla", por ejemplo, eny despliegue el servicio con, digamos, 1.2.3.4 como dirección IP externa con
fuente
Puede escribir un preprocesador simple para realizar una sustitución de variables en sus archivos yaml (o puede usar jsonnet para lograr lo mismo en los archivos de configuración json).
Existe cierta discusión sobre agregar plantillas directamente a la configuración de Kubernetes, pero aún no está implementado o disponible.
fuente
Hasta que las plantillas estén disponibles, la forma más fácil de hacerlo es ejecutar un trabajo que use la API de Kubernetes para actualizar el servicio. Un script de shell corto en una imagen basada en alpino, junto con un secreto (que contiene la dirección IP) y un mapa de configuración (que contiene la plantilla), debería ser lo suficientemente simple. La parte difícil es usar correctamente las funciones de autenticación y autorización del apiserver.
/programming/30690186/how-do-i-access-the-kubernetes-api-from-within-a-pod-container da un ejemplo de acceso a la API. Obviamente, querrás PUBLICAR en / api / v1 / namespaces / default / services en lugar de GET en ese ejemplo.
fuente