O Kubernetes atribui um endereço IP para cada contêiner, mas como posso adquirir o endereço IP de um contêiner no pod? Não consegui encontrar o caminho nas documentações.
Editar: vou executar o cluster Aerospike no Kubernetes. e os arquivos de configuração precisam de seu próprio endereço IP. E estou tentando usar confd para definir o nome do host. Eu usaria a variável de ambiente se ela estivesse definida.
fonte
printenv | grep '10.254.24.167'
não retorna nada, exceto a variável definida pelo usuário MY_POD_IP. De qualquer forma, faça meu voto, senhor :)status.hostIP
?Alguns esclarecimentos (não é realmente uma resposta)
No kubernetes, cada pod recebe um endereço IP e cada contêiner no pod recebe o mesmo endereço IP. Assim, como Alex Robinson afirmou em sua resposta , você pode apenas usar
hostname -i
dentro do seu contêiner para obter o endereço IP do pod.Eu testei com um pod executando dois contêineres burros e, de fato,
hostname -i
estava gerando o mesmo endereço IP em ambos os contêineres. Além disso, aquele IP era equivalente ao obtido usandokubectl describe pod
de fora, o que valida a coisa toda IMO.No entanto, a resposta de PiersyP parece mais clara para mim.
Fontes
Dos documentos do kubernetes :
Outra parte da documentação do Kubernetes :
fonte
kubectl describe pods <name of pod>
lhe dará algumas informações, incluindo o IPfonte
kubectl
não está disponível.Este comando irá retornar um IP
fonte
kubectl
.O endereço IP do contêiner deve ser configurado corretamente dentro de seu namespace de rede, para que qualquer uma das ferramentas padrão do Linux possa obtê-lo. Por exemplo, tentativa
ifconfig
,ip addr show
,hostname -I
, etc. a partir de um shell anexado dentro de um dos seus recipientes para testá-lo.fonte
Você poderia usar
que é baseado no que @mibbit sugeriu.
Isso leva os seguintes fatos em consideração:
kubectl
foi colocado manualmente no contêiner (possivelmente quando a imagem foi construída)/var/run/secrets/kubernetes.io/serviceaccount
no contêinerfonte
grep
parased
:kubectl describe pod $POD | sed -nE '/IP/s/IP:[[:space:]]+//p'
(mas awk é melhor do que sed)Ainda mais simples de lembrar do que a
sed
abordagem é usarawk
.Aqui está um exemplo, que você pode executar em sua máquina local:
O próprio IP está na coluna 2 da saída, portanto
$2
.fonte
but how can I acquire the IP address from a container in the Pod?
você está assumindo que a pessoa em questão tem acesso aokubectl
próprio pod.kubectl describe pod $POD | awk '/IP/{print $2}'
Em alguns casos, em vez de depender da API descendente, ler programaticamente o endereço IP local (de interfaces de rede) de dentro do contêiner também funciona.
Por exemplo, em golang: https://stackoverflow.com/a/31551220/6247478
fonte
Fornece uma lista de pods com nome, status, ip, nó ...
fonte