
Fragebeschreibung:
Ich habe einen Harvester-HCI-Cluster (RKE2), bei dem Pods nicht die richtigen IP-Adressen für Internetdomänen auflösen.
kubectl run debug --image=busybox -i --tty --rm -- sh
/ # ping serverfault.com
PING serverfault.com (<redacted IP address>): 56 data bytes
64 bytes from <redacted IP address>: seq=0 ttl=63 time=0.362 ms
64 bytes from <redacted IP address>: seq=1 ttl=63 time=0.312 ms
64 bytes from <redacted IP address>: seq=2 ttl=63 time=0.319 ms
64 bytes from <redacted IP address>: seq=3 ttl=63 time=0.449 ms
64 bytes from <redacted IP address>: seq=4 ttl=63 time=0.317 ms
64 bytes from <redacted IP address>: seq=5 ttl=63 time=0.363 ms
64 bytes from <redacted IP address>: seq=6 ttl=63 time=0.296 ms
64 bytes from <redacted IP address>: seq=7 ttl=63 time=0.361 ms
^C
--- serverfault.com ping statistics ---
8 packets transmitted, 8 packets received, 0% packet loss
round-trip min/avg/max = 0.296/0.347/0.449 ms
<redacted IP address>
ist in diesem Fall die öffentliche IP-Adresse des Netzwerks, in dem sich der Cluster befindet (und nicht eine der serverfault.com
IP-Adressen).
Im selben Container nslookup
wird jedoch die richtige IP-Adresse aufgelistet:
/ # nslookup serverfault.com
Server: 10.53.0.10
Address: 10.53.0.10:53
Non-authoritative answer:
Name: serverfault.com
Address: 104.18.23.101
Name: serverfault.com
Address: 104.18.22.101
Non-authoritative answer:
Dies ist auf dem Hostknoten nicht reproduzierbar:
# ping serverfault.com
PING serverfault.com (104.18.23.101) 56(84) bytes of data.
64 bytes from 104.18.23.101 (104.18.23.101): icmp_seq=1 ttl=57 time=1.27 ms
64 bytes from 104.18.23.101 (104.18.23.101): icmp_seq=2 ttl=57 time=1.30 ms
64 bytes from 104.18.23.101 (104.18.23.101): icmp_seq=3 ttl=57 time=1.33 ms
64 bytes from 104.18.23.101 (104.18.23.101): icmp_seq=4 ttl=57 time=1.29 ms
64 bytes from 104.18.23.101 (104.18.23.101): icmp_seq=5 ttl=57 time=1.23 ms
64 bytes from 104.18.23.101 (104.18.23.101): icmp_seq=6 ttl=57 time=1.28 ms
^C
--- serverfault.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5006ms
rtt min/avg/max/mdev = 1.231/1.284/1.333/0.030 ms
Der Cluster selbst ist eine Neuinstallation vonHarvester HCI v1.2.0
ohne weitere Konfigurationsänderungen nach der Installation.
Ich suche nach weiteren Tipps zur Behebung dieses Problems und um herauszufinden, warum die falsche IP-Adresse aufgelöst wird.
Kontext:
/etc/resolve.conf
auf dem Host:
### /etc/resolv.conf is a symlink to /var/run/netconfig/resolv.conf
### autogenerated by netconfig!
search harvester.<redacted domain> 1
nameserver 10.10.0.1
/etc/resolve.conf
auf Pod-Container:
search default.svc.cluster.local svc.cluster.local cluster.local harvester.<redacted domain>
nameserver 10.53.0.10
options ndots:5
/etc/nsswitch.conf
auf dem Host:
#
# /etc/nsswitch.conf
#
passwd: compat
group: compat
shadow: compat
# Allow initgroups to default to the setting for group.
# initgroups: compat
hosts: files mdns_minimal [NOTFOUND=return] dns
networks: files dns
aliases: files usrfiles
ethers: files usrfiles
gshadow: files usrfiles
netgroup: files nis
protocols: files usrfiles
publickey: files
rpc: files usrfiles
services: files usrfiles
automount: files nis
bootparams: files
netmasks: files
/etc/nsswitch.conf
auf Pod-Container:
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: files
group: files
shadow: files
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
/etc/hosts
in beiden Fällen keine weiteren/verdächtigen Einträge enthalten.
Antwort1
Ich habe festgestellt, dass das Problem bei der ndots
Option in liegt resolve.conf
:
options ndots:5
Diese Option bedeutet, dass der Hostname nur dann nicht an die Suchdomäne angehängt wird, wenn er 5 oder mehr Punkte enthält.
Ich vermute, dass diese Option erforderlich ist, da Kubernetes intern viele Hostnamen mit mehreren Punkten verwendet.
Allerdings serverfault.com
hat beispielsweise nur ein Punkt, also wird I an die lokale Domäne angehängt, harvester.<redacted domain>
sodass es wird serverfault.com.harvester.<redacted domain>
. Wir hatten zufällig einen Platzhaltereintrag ( *
) in dieser Domäne, der auf die öffentliche IP-Adresse des Netzwerks verwies. Das Ergebnis serverfault.com.harvester.<redacted domain>
würde mit dem Platzhaltereintrag aufgelöst werden, was dieses Verhalten erklärt.
Um dies zu beheben, haben wir den DHCP-Eintrag für die lokale Domäne vorübergehend entfernt. Dies würde dazu führen, dass die search
Konfiguration result.conf
ihn nicht mehr enthält und die Internetdomäne somit nicht mehr an die lokale Domäne angehängt wird.
Langfristig planen wir die Entfernung der Wildcard-Domäne.