Solución:
Para agregar un nombre de host al archivo de hosts de una manera “semi” dinámica, se puede usar el postStart gancho:
spec:
containers:
- name: somecontainer
image: someimage
lifecycle:
postStart:
exec:
command:
- "cat"
- "someip"
- "somedomain"
- ">"
- "/etc/hosts"
Sin embargo, una mejor manera sería utilizar un nombre abstracto que represente el servicio en múltiples etapas. Por ejemplo, en lugar de usar database01.production.company.com usar database01 y configurar el entorno de modo que esto se resuelva en producción en el entorno de producción y puesta en escena en el entorno de puesta en escena.
Por último, también es posible editar la configuración de kubedns de modo que el DNS de kubernetes se pueda utilizar para recuperar nombres DNS externos. Entonces simplemente usaría el nombre que necesite en el código, y simplemente funcionará “automágicamente”. Vea, por ejemplo, https://github.com/kubernetes/kubernetes/issues/23474 sobre cómo configurar esto (varía un poco de una versión a otra de skydns: algunos más antiguos realmente no funcionan con esto, así que actualice a al menos kube 1.3 para que esto funcione correctamente)
Cree un archivo en el sistema host (o un secreto) con todos los hosts adicionales que necesita (por ejemplo, / tmp / extra-hosts)
Luego, en el manifiesto K8S:
spec:
containers:
- name: haproxy
image: haproxy
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "cat /hosts >> /etc/hosts"]
volumeMounts:
- name: haproxy-hosts
mountPath: /hosts
volumes:
- name: haproxy-hosts
hostPath:
path: /tmp/extra-hosts
De kubernetes.io/docs: “Además del texto estándar predeterminado, podemos agregar entradas adicionales al archivo de hosts para resolver foo.local, bar.local en 127.0.0.1 y foo.remote, bar.remote en 10.1.2.3, podemos agregando HostAliases al Pod en .spec.hostAliases: “
También puede “Configurar el dominio stub y los servidores DNS ascendentes”.