Hoe weet ik het eigen IP-adres van een Pod vanuit een container in de Pod?

Kubernetes wijst een IP-adres toe aan elke container, maar hoe kan ik het IP-adres verkrijgen van een container in de Pod? Ik kon de weg niet vinden in de documentatie.

Bewerken: ik ga het Aerospike-cluster in Kubernetes gebruiken. en de configuratiebestanden hebben een eigen IP-adres nodig. En ik probeer confd te gebruiken om de hostnaam in te stellen. Ik zou de omgevingsvariabele gebruiken als deze was ingesteld.


Antwoord 1, autoriteit 100%

Het eenvoudigste antwoord is ervoor te zorgen dat uw pod- of replicatiecontroller yaml/json-bestanden het pod-IP toevoegen als een omgevingsvariabele door het hieronder gedefinieerde configuratieblok toe te voegen. (het onderstaande blok maakt bovendien de naam en naamruimte beschikbaar voor de pod)

env:
- name: MY_POD_NAME
  valueFrom:
    fieldRef:
      fieldPath: metadata.name
- name: MY_POD_NAMESPACE
  valueFrom:
    fieldRef:
      fieldPath: metadata.namespace
- name: MY_POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP

Maak de pod/rc opnieuw en probeer het dan

echo $MY_POD_IP

voer ook envuit om te zien wat kubernetes je nog meer biedt.

Proost


Antwoord 2, autoriteit 16%

Enkele verduidelijkingen(niet echt een antwoord)

In kubernetes krijgt elke pod een IP-adres toegewezen en krijgt elke container in de pod hetzelfde IP-adres. Dus, zoals Alex Robinson zei in zijn antwoord, kun je gewoon hostname -Iin je container om het IP-adres van de pod te krijgen.

Ik heb getest met een pod met twee domme containers, en inderdaad gaf hostname -Ihetzelfde IP-adres uit in beide containers. Bovendien was dat IP-adres gelijk aan dat verkregen met behulp van kubectl describe podvan buitenaf, wat het hele ding IMO valideert.

Echter, PiersyP’s antwoordlijkt me zuiverder.

Bronnen

Van kubernetes-documenten:

De applicaties in een pod gebruiken allemaal dezelfde netwerknaamruimte (dezelfde IP- en poortruimte), en kunnen elkaar dus “vinden” en communiceren via localhost. Daarom moeten applicaties in een pod hun gebruik van poorten coördineren. Elke pod heeft een IP-adres in een platte gedeelde netwerkruimte die volledige communicatie heeft met andere fysieke computers en pods in het netwerk.

Nog een stuk uit kubernetes docs:

Tot nu toe heeft dit document gesproken over containers. In werkelijkheid past Kubernetes IP-adressen toe op de Pod-scope – containers binnen een Pod delen hun netwerknaamruimten – inclusief hun IP-adres. Dit betekent dat containers binnen een Pod allemaal elkaars poorten op localhost kunnen bereiken.


Antwoord 3, autoriteit 12%

kubectl describe pods <name of pod>geeft je wat informatie, inclusief het IP-adres


Antwoord 4, autoriteit 8%

POD_HOST=$(kubectl get pod $POD_NAME --template={{.status.podIP}})

Dit commando geeft je een IP terug


Antwoord 5, autoriteit 7%

Het IP-adres van de container moet correct zijn geconfigureerd binnen de netwerknaamruimte, zodat elk van de standaard linux-tools het kan krijgen. Probeer bijvoorbeeld ifconfig, ip addr show, hostname -I, enz. vanuit een bijgevoegde shell in een van uw containers om het uit te testen .


Antwoord 6, autoriteit 6%

Je zou kunnen gebruiken

kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'

die is gebaseerd op wat @mibbit suggereerde.

Hierbij wordt rekening gehouden met de volgende feiten:


Antwoord 7, autoriteit 5%

kubectl get pods -o wide

Geef je een lijst met pods met naam, status, ip, node…


Antwoord 8, autoriteit 2%

Nog eenvoudiger te onthouden dan de sed-aanpak is om awkte gebruiken.

Hier is een voorbeeld dat u op uw lokale computer kunt uitvoeren:

kubectl describe pod `<podName>` | grep IP | awk '{print $2}'

Het IP-adres zelf staat in kolom 2 van de uitvoer, vandaar $2.


Antwoord 9

In sommige gevallen, in plaats van te vertrouwen op neerwaartse API, werkt het programmatisch lezen van het lokale IP-adres (van netwerkinterfaces) vanuit de container ook.

Bijvoorbeeld in golang:
https://stackoverflow.com/a/31551220/6247478


Antwoord 10

Containers hebben hetzelfde IP-adres als de pod waarin ze zich bevinden.

Dus vanuit de container kun je gewoon ip adoen en het IP-adres dat je krijgt is het IP-adres dat de pod ook heeft.

Other episodes