Kubernetes asigna una dirección IP para cada contenedor, pero ¿cómo puedo adquirir la dirección IP de un contenedor en el Pod? No pude encontrar el camino en la documentación.
Editar: voy a ejecutar el clúster Aerospike en Kubernetes. y los archivos de configuración necesitan su propia dirección IP. Y estoy intentando usar confd para establecer el nombre de host. Usaría la variable de entorno si estuviera configurada.
fuente
printenv | grep '10.254.24.167'
no devuelve nada excepto la variable definida por el usuario MY_POD_IP. De todos modos, tome mi voto, señor :)status.hostIP
?Algunas aclaraciones (no es realmente una respuesta)
En kubernetes, a cada pod se le asigna una dirección IP y a cada contenedor en el pod se le asigna la misma dirección IP. Por lo tanto, como dijo Alex Robinson en su respuesta , puede usarlo
hostname -i
dentro de su contenedor para obtener la dirección IP del pod.Probé con un pod que ejecutaba dos contenedores tontos y, de hecho,
hostname -i
estaba generando la misma dirección IP dentro de ambos contenedores. Además, esa IP era equivalente a la obtenida usandokubectl describe pod
desde afuera, lo que valida todo en mi opinión.Sin embargo, la respuesta de PiersyP me parece más limpia.
Fuentes
De los documentos de Kubernetes :
Otra pieza de los documentos de Kubernetes :
fuente
kubectl describe pods <name of pod>
te dará alguna información incluida la IPfuente
kubectl
no está disponible.POD_HOST=$(kubectl get pod $POD_NAME --template={{.status.podIP}})
Este comando le devolverá una IP
fuente
kubectl
.La dirección IP del contenedor debe configurarse correctamente dentro de su espacio de nombres de red, para que cualquiera de las herramientas estándar de Linux pueda obtenerla. Por ejemplo, try
ifconfig
,ip addr show
,hostname -I
, etc. de una cáscara de adjunto dentro de uno de sus contenedores para probarlo.fuente
Podrías usar
kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'
que se basa en lo que sugirió @mibbit.
Esto tiene en cuenta los siguientes hechos:
kubectl
se colocó manualmente en el contenedor (posiblemente cuando se creó la imagen)/var/run/secrets/kubernetes.io/serviceaccount
en el contenedorfuente
grep
ased
:kubectl describe pod $POD | sed -nE '/IP/s/IP:[[:space:]]+//p'
(pero awk es mejor para esto que sed)Incluso más simple de recordar que el
sed
enfoque que es utilizarawk
.Aquí hay un ejemplo, que puede ejecutar en su máquina local:
kubectl describe pod `<podName>` | grep IP | awk '{print $2}'
La IP en sí está en la columna 2 de la salida, por lo tanto
$2
.fuente
but how can I acquire the IP address from a container in the Pod?
: está asumiendo que la persona en cuestión tiene acceso alkubectl
módulo.kubectl describe pod $POD | awk '/IP/{print $2}'
En algunos casos, en lugar de depender de la API descendente, también funciona la lectura programática de la dirección IP local (de las interfaces de red) desde el interior del contenedor.
Por ejemplo, en golang: https://stackoverflow.com/a/31551220/6247478
fuente
kubectl get pods -o wide
Darle una lista de pods con nombre, estado, ip, nodo ...
fuente