2016-11-21 4 views
1

Ich habe eine OpenShift Origin-Installation (v. 1.2.1, aber reproduziert dieses Problem auch auf 1.3.0), und ich versuche, Pods IPs von DNS nach Dienstname zu bekommen . Nehmen wir an, mein Knoten hat IP 192.168.58.6, und ich suche nach Pods mit Headless-Service 'hz' im Projekt 'hz-test'. Wenn ich versuche, DNS-Anfrage an dnsmasq zu senden (die auf Knoten installiert ist und leitet Anfragen an Kubernetes' SkyDNS) über UDP, geht alles gut:DNS funktioniert nicht über TCP von Pod

# dig +notcp +noall +answer hz.hz-test.svc.cluster.local @192.168.58.6 
hz.hz-test.svc.cluster.local. 14 IN A 10.1.2.5 
<and so on...> 

Allerdings, wenn ich Transportprotokoll TCP wechseln, erhalte ich die folgende Fehlermeldung:

# dig +tcp +noall +answer hz.hz-test.svc.cluster.local @192.168.58.6 
;; communications error to 192.168.58.6#53: end of file 

nach einem Blick auf tcpdump Ausgang habe ich entdeckt, dass nach einer TCP-Verbindung hergestellt wird (SYN - SYN/ACK - ACK) dnsmasq sofort sendet FIN/ACK, und wenn das DNS-Client versucht Um seine Anfrage über diese Verbindung zu senden, sendet dnsmasq anstelle der DNS-Antwort ein RST-Paket zurück. Ich habe versucht, die gleiche DNS-Abfrage über TCP vom Knoten selbst durchzuführen, und dnsmasq gab mir die übliche Antwort, d. H. Es funktionierte normal über TCP, und das Problem trat nur auf, als ich versuchte, eine Anfrage vom Pod auszuführen. Außerdem habe ich versucht, dieselbe Abfrage über TCP direkt vom Pod zum Kubernetes DNS zu senden (dnsmasq zu vermeiden), und diese Abfrage war auch OK.

Also, warum dnsmasq auf Knoten ignoriert TCP-Anfragen von Pods, und warum jede andere Kommunikation in Ordnung ist? Ist es Verhalten?

Jede Hilfe und Ideen sind willkommen.

Antwort

1

Der Grund war schließlich, dass dnsmasq konfiguriert wurde, um die IP des Knotens abzuhören (listen-address = 192.168.58.6). Mit dieser Konfiguration bindet dnsmasq an alle Netzwerkschnittstellen des Knotens, versucht jedoch, "falsche" Verbindungen im Benutzerbereich (d. H. Für sich selbst) abzulehnen.

ich nicht wirklich verstehen, warum dnsmasq, dass von pod zu 192.168.58.6 Anfragen beschlossen, mit einer solchen Konfiguration verboten waren, aber ich habe es funktioniert von „listen-Adresse“ zu

interface=eth0 
bind-interfaces 

Veränderung, die gezwungen dnsmasq, um nur an NIC mit IP 192.168.58.6 zu binden. Danach begann dnsmasq alle TCP-Anfragen zu akzeptieren.

Verwandte Themen