<p>kubeadm schlägt ohne IPv4-Adresse auf der Netzwerkschnittstelle mit defaultroute fehl</p>

Erstellt am 3. Okt. 2018  ·  42Kommentare  ·  Quelle: kubernetes/kubeadm

Ist dies ein FEHLERBERICHT oder eine FEATURE-ANFRAGE?

Wählen Sie einen: FEHLERBERICHT

Versionen

kubeadm-Version (verwenden Sie kubeadm version ):
kubeadm version: &version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.2", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-07T23:14:39Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}

Umgebung :

  • Kubernetes-Version (verwenden Sie kubectl version ):
    Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.2", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-07T23:17:28Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
  • Cloud-Anbieter oder Hardwarekonfiguration : Hardware
  • Betriebssystem (zB aus /etc/os-release):
    ```NAME="CentOS Linux"
    VERSION="7 (Kern)"
    ID="centos"
    ID_LIKE="Rhel-Fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Kern)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o: centos:centos :7"
    HOME_URL=" https://www.centos.org/ "
    BUG_REPORT_URL=" https://bugs.centos.org/ "

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"


- **Kernel** (e.g. `uname -a`):
`Linux node1-lab-a1-01 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux`

- **Others**:
Our hosts are setup using IPv4 BGP over IPv6 (rfc5549: https://tools.ietf.org/html/rfc5549).
The host ip address is attached to a loopback address and FRR bgp announces that IP to connected TOR switches (spine and leaf fabric). There is no IPv4 address on the connected interfaces, but I do have a default route that allows access to the world:

```# ip route
default proto bgp metric 20
    nexthop via 169.254.0.1 dev em1 weight 1 onlink
    nexthop via 169.254.0.1 dev em2 weight 1 onlink
10.101.155.0/24 proto bgp metric 20
    nexthop via 169.254.0.1 dev em1 weight 1 onlink
    nexthop via 169.254.0.1 dev em2 weight 1 onlink
10.101.246.0/24 dev em3 proto kernel scope link src 10.101.246.11
169.254.0.0/16 dev em3 scope link metric 1002
169.254.0.0/16 dev em1 scope link metric 1003
169.254.0.0/16 dev em2 scope link metric 1005
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

Was ist passiert?

Habe ein ähnliches Problem wie #982

Laufen

# kubeadm config images pull
unable to select an IP from default routes.
# kubeadm config images pull -v 10
I1003 20:56:35.880474   87226 interface.go:360] Looking for default routes with IPv4 addresses
I1003 20:56:35.880550   87226 interface.go:365] Default route transits interface "em1"
I1003 20:56:35.881831   87226 interface.go:174] Interface em1 is up
I1003 20:56:35.881925   87226 interface.go:222] Interface "em1" has 1 addresses :[fe80::266e:96ff:fe5f:7b48/64].
I1003 20:56:35.881957   87226 interface.go:189] Checking addr  fe80::266e:96ff:fe5f:7b48/64.
I1003 20:56:35.881989   87226 interface.go:202] fe80::266e:96ff:fe5f:7b48 is not an IPv4 address
I1003 20:56:35.882027   87226 interface.go:360] Looking for default routes with IPv6 addresses
I1003 20:56:35.882051   87226 interface.go:376] No active IP found by looking at default routes
unable to select an IP from default routes.

Der gleiche Fehler tritt bei kubeadm init

Was haben Sie erwartet?

Ich erwarte, dass kubeadm funktioniert und die Bilder zieht oder eine Init durchführt.
Vielleicht haben Sie eine Möglichkeit, die IP-Adresse oder Schnittstelle meiner Hosts anzugeben.

Wie kann man es reproduzieren (so minimal und genau wie möglich)?

Müssen wir noch etwas wissen?

areecosystem kinbug prioritimportant-longterm sinetwork

Hilfreichster Kommentar

Außerdem ist es etwas schwieriger, die anderen Ausgaben und Abstände zu analysieren;)

Ich habe in meinem Leben so viel Sed & Awk gemacht, dass ich wahrscheinlich zu desensibilisiert bin ;-)

Alle 42 Kommentare

@bart0sh @kad - Haben Sie ähnliche Netzwerkkonfigurationen?

@scheuk was ist die lokal auflösbare IPv4-Adresse für diesen Host?
Können Sie es zu /etc/hosts hinzufügen und in der kubeadm-Konfiguration angeben?

/cc @kubernetes/sig-network-bugs

@timothysc wissen wir, ob der API-Server mit dieser Art von Umgebung funktioniert? Ich frage mich nur, ob wir kubeadm in diesem Netzwerk-Setup zum Laufen bringen, werden wir in der Zukunft auf weitere Probleme stoßen?

Wenn Sie einen bestimmten Ethernet-Adapter haben, der die Details umschließt und an den Sie binden können, oder /etc/hosts überschreiben, würde ich denken, dass es "einfach funktionieren" sollte.

@timothysc
meine lokale Host-IP sitzt auf lo0:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.101.228.11/32 brd 10.101.228.11 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

die 10.101.228.11 IP-Adresse

Ich habe den Morgen damit verbracht, kubeadm init Arbeit zu machen.
Ich konnte dies der Konfiguration hinzufügen und init funktionierte wie ein Zauber.

api:
  advertiseAddress: 10.101.228.11

Ich stecke jedoch immer noch fest und brauche eine Route, um sowohl den kubeadm config images pull Befehl auszuführen
sowie kubeadm token create --print-join-command , um den Join-Befehl abzurufen, um dem Cluster Worker-Knoten hinzuzufügen.

@timothysc
Können Sie die /etc/hosts-Überschreibung erklären?

Ich habe gerade versucht, 10.101.228.11 hostname zu /etc/hosts hinzuzufügen.
aber kubeadm schaut sich immer noch die Schnittstelle mit der Route an.

Dies hat also mit den Besonderheiten Ihrer Netzwerkkonfiguration in Verbindung mit dem Standardverhalten des Systems zu tun.

Ich bin mir ziemlich sicher, wenn Sie einen überbrückten Adapter erstellen würden, um die IPv4-Adresse an zu binden, anstatt an ein Loopback gebunden zu sein, würde es richtig erkennen.

Ich suche gerade nach, ob es eine globale Überschreibung für die Netzwerkkarte gibt, die über *.

Es wäre also eine Kombination aus --api-advertise-addresses und --hostname-override .

@scheuk könntest du laufen

kubeadm config images pull --config yourconfig.yaml

mit der Angabe Ihrer Konfigurationsdatei: advertiseAddress

Möglicherweise müssen Sie --config für jeden Unterbefehl eingeben, b/c wie Ihr Netzwerk eingerichtet ist.

Sie können kubeadm token create --print-join-command von jedem Host oder einer Pipeline mit dem Flag --kubeconfig ausführen.

Eine mögliche Problemumgehung für das Pull-Ding von Bildern angesichts der Konfiguration wäre etwa:
kubeadm config images list | xargs -n1 -I {} docker pull {}
vor der Initialisierung ausführen

@timothysc @maailion

Nicht weiter --kubeconfig:

# kubeadm token create --print-join-command --kubeconfig /etc/kubernetes/admin.conf
unable to select an IP from default routes.

Auch wenn ich es mit --config versuche, sagt es, dass Sie diese beiden nicht kombinieren können:

# kubeadm token create --print-join-command --config /etc/kubernetes/kubeadm.conf
can not mix '--config' with arguments [print-join-command]

Das hat funktioniert, ich werde meine Bereitstellung aktualisieren, um dies zu tun

# kubeadm config images pull --config /etc/kubernetes/kubeadm.conf

Ich meine, dass Sie kubeadm token create von einem Computer mit einer Standardroute wie Ihrem Laptop verwenden können, solange er Zugriff auf den laufenden Apiserver und eine Admin-Ebene kubeconfig hat

@scheuk

```

kubeadm-Token erstellen --print-join-command --config /etc/kubernetes/kubeadm.conf

kann '--config' nicht mit Argumenten mischen [print-join-command]
```

ist ein kleiner Fehler, den wir in 1.13 beheben können

Bist du noch gesperrt?

@timothysc

Ich bin immer noch gesperrt.
Wir verwenden ansible, um all diese Schritte auszuführen, und ich führe sie derzeit aus
kubeadm token create --print-join-command auf dem ersten Master, der den Befehl zum Verbinden der Worker-Knoten mit dem Cluster erhält. Ich kann mich jedoch möglicherweise vorübergehend entsperren, indem ich tue, was @mauilion sagt, und kubeadm lokal einrichten (wo ansible ausgeführt wird), um diese Aktion auszuführen.

Danke für die ganze Hilfe bisher!

Wir verwenden ansible, um all diese Schritte auszuführen, und ich führe sie derzeit aus
kubeadm token create --print-join-command auf dem ersten Master, um den Befehl zum Verbinden der Workerknoten mit dem Cluster abzurufen.

Die Ausgabe von init enthält den Befehl, den Sie auf den anderen Knoten ausführen sollen.

Dies geschieht normalerweise in ansible, da das Token kurzlebig ist und es einfacher ist, die Ausgabe des Join-Befehls von Token create zu erfassen als init.

Außerdem ist es etwas schwieriger, die anderen Ausgaben und Abstände zu analysieren;)

Außerdem ist es etwas schwieriger, die anderen Ausgaben und Abstände zu analysieren;)

Ich habe in meinem Leben so viel Sed & Awk gemacht, dass ich wahrscheinlich zu desensibilisiert bin ;-)

Mein Localhost, auf dem ich kubeadm von ansible aus ausführen würde, ist also ein Mac.
Auf der kubeadm-Installationsseite wird mac os x nicht unterstützt.

docker run --net=host --rm -v /path/to/kubeconfig:/kubeconfig quay.io/mauilion/kubeadm:v1.11.3  kubeadm token create --print-join-command --kubeconfig=/kubeconfig

output:
kubeadm join 10.192.0.2:6443 --token iwikby.5u4wc05jnbdldq5e --discovery-token-ca-cert-hash sha256:f19311dfe7034d14c48002fd4f29e285270a573b9e9066735d5749ca89b9c89f

:)

@mailion duh ! Aber das ist großartig, du hast einen kubeadm-Conatiner :)

Ich habe gerade mein Ansible aktualisiert, um auszuführen:
docker run --rm -v /etc/kubernetes/admin.conf:/kubeconfig quay.io/mauilion/kubeadm:v1.11.3 kubeadm token create --print-join-command --kubeconfig=/kubeconfig 2>/dev/null auf dem ersten Master. Lassen Sie den Container das Docker-Netzwerk anstelle des Host-Netzwerks verwenden, um mein Netzwerk-Setup zu maskieren.

nett

Bist du entsperrt @scheuk

Ja, ich bin jetzt entsperrt! Danke für die ganze Hilfe!

@bart0sh @kad - Haben Sie ähnliche Netzwerkkonfigurationen?

Wir haben nicht genau so etwas, aber ich denke, wir können einfacher, aber nahe an diesem Setup simulieren.

@scheuk können Sie Beispiele zeigen, was Sie in Ihrer IPv6-Routing-Tabelle haben und welche Art von IPv4- / IPv6-Adressen Sie auf Ihren em*-Schnittstellen haben? (Sie müssen keine echten IPs anzeigen, Sie können sie verschleiern, möchten nur sehen, welche Art von Unicast-Adressen neben Link-Local-Adressen in Ihrem Setup vorhanden sein könnten).

@kad unser Netzwerkteam ist schon ziemlich auf IPv6
hier ein Link zur Funktionsweise: https://docs.cumulusnetworks.com/display/ROH/Routing+on+the+Host
im Abschnitt BGP- und OSPF-unnummerierte Schnittstellen .

Hier ist die Ausgabe meiner IPv6-Routing-Tabelle und -Schnittstellen angehängt:

# ip -6 route
unreachable ::/96 dev lo metric 1024 error -113 pref medium
unreachable ::ffff:0.0.0.0/96 dev lo metric 1024 error -113 pref medium
unreachable 2002:a00::/24 dev lo metric 1024 error -113 pref medium
unreachable 2002:7f00::/24 dev lo metric 1024 error -113 pref medium
unreachable 2002:a9fe::/32 dev lo metric 1024 error -113 pref medium
unreachable 2002:ac10::/28 dev lo metric 1024 error -113 pref medium
unreachable 2002:c0a8::/32 dev lo metric 1024 error -113 pref medium
unreachable 2002:e000::/19 dev lo metric 1024 error -113 pref medium
unreachable 3ffe:ffff::/32 dev lo metric 1024 error -113 pref medium
fe80::/64 dev fabric0 proto kernel metric 256 mtu 9000 pref medium
fe80::/64 dev em1 proto kernel metric 256 pref medium
fe80::/64 dev em2 proto kernel metric 256 pref medium
fe80::/64 dev em3 proto kernel metric 256 pref medium
fe80::/64 dev docker0 proto kernel metric 256 pref medium

# ip addr show em1
4: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 24:6e:96:5f:7b:48 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::266e:96ff:fe5f:7b48/64 scope link
       valid_lft forever preferred_lft forever

# ip addr show em2
5: em2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 24:6e:96:5f:7b:4a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::266e:96ff:fe5f:7b4a/64 scope link
       valid_lft forever preferred_lft forever

@kad unser Netzwerkteam ist schon ziemlich auf IPv6
hier ein Link zur Funktionsweise: https://docs.cumulusnetworks.com/display/ROH/Routing+on+the+Host
im Abschnitt BGP- und OSPF-unnummerierte Schnittstellen .

@scheuk danke für die Klarstellungen. Um das ganze Bild zusammenzufassen (um zu sehen, ob ich Ihr Setup vollständig verstehe):

  • Ihr Host hat auf der lo Schnittstelle eine (oder mehrere?) /32 IPv4-Adressen.
  • Sie haben keine Unicast-IPv6/128-Adressen auf lo (ähnlich wie bei IPv4-Szenarien)
  • Netzwerkschnittstellen verwenden Link-Locals auf bofh ipv4/ipv6.
  • ospf/bgp wird verwendet, um echte Routen an den Host anzukündigen, und die /32 oder /128 des Hosts werden an TORs zurückgemeldet.

Ist das korrekt ?

Wenn das oben richtig ist, können Sie eine weitere Ausgabe von ip ro get 8.8.8.8 teilen?
(Anstelle von 8.8.8.8 Sie eine beliebige Unicast-IP verwenden. Ich versuche zu verstehen, was der Kernel als ausgehende Quelladresse für die Standardroute und Routen verwendet, die Sie über ospf/bgp außerhalb Ihres Cluster-IP-Bereichs erhalten haben ).

@scheuk Sie können den Patch von #69578 ausprobieren, um zu sehen, ob er in Ihrem Setup funktioniert.
Wenn Sie Hilfe benötigen, kann ich eine erstellte Binärdatei mit diesem Patch bereitstellen.

@kad Ihr Verständnis unseres Setups ist richtig.
BGP kündigt auch andere Routen an, es ist so konfiguriert, dass es lokale Blackhole-Routen aufnimmt und ankündigt, aber das ist für POD-Konnektivität vs. Host-Konnektivität.

Hier ist die Ausgabe von ip ro get auf dem Host:

# ip ro get 8.8.8.8
8.8.8.8 via 169.254.0.1 dev em2 src 10.101.228.11
    cache

Ich werde versuchen, auch den Patch von #69578 zu testen und euch Bescheid zu geben

@kad kannst du mir eine Binärdatei schicken, könnte weniger Zeit in

@kad kannst du mir eine Binärdatei schicken, könnte weniger Zeit in

versuche es mit http://orava.kad.name/kubeadm/kubeadm-69578
Dieser kubeadm ist aus dem Master-Branch aufgebaut. aber zumindest sollte es in Ordnung sein, um es in Ihrem Setup zu versuchen.

@kad sieht gut aus:

# ./kubeadm-69578 config images pull -v 10
I1009 21:53:05.336396   47234 interface.go:384] Looking for default routes with IPv4 addresses
I1009 21:53:05.336485   47234 interface.go:389] Default route transits interface "em1"
I1009 21:53:05.337591   47234 interface.go:196] Interface em1 is up
I1009 21:53:05.337687   47234 interface.go:244] Interface "em1" has 1 addresses :[fe80::266e:96ff:fe5f:7b48/64].
I1009 21:53:05.337721   47234 interface.go:211] Checking addr  fe80::266e:96ff:fe5f:7b48/64.
I1009 21:53:05.337742   47234 interface.go:224] fe80::266e:96ff:fe5f:7b48 is not an IPv4 address
I1009 21:53:05.337768   47234 interface.go:398] Default route exists for IPv4, but interface "em1" does not have unicast addresses. Checking loopback interface
I1009 21:53:05.338779   47234 interface.go:196] Interface lo is up
I1009 21:53:05.338884   47234 interface.go:244] Interface "lo" has 4 addresses :[127.0.0.1/8 10.101.228.11/32 192.0.2.1/24 ::1/128].
I1009 21:53:05.338918   47234 interface.go:211] Checking addr  127.0.0.1/8.
I1009 21:53:05.338958   47234 interface.go:221] Non-global unicast address found 127.0.0.1
I1009 21:53:05.338977   47234 interface.go:211] Checking addr  10.101.228.11/32.
I1009 21:53:05.338995   47234 interface.go:218] IP found 10.101.228.11
I1009 21:53:05.339025   47234 interface.go:250] Found valid IPv4 address 10.101.228.11 for interface "lo".
I1009 21:53:05.339044   47234 interface.go:404] Found active IP 10.101.228.11 on loopback interface
I1009 21:53:05.339186   47234 version.go:156] fetching Kubernetes version from URL: https://dl.k8s.io/release/stable-1.txt
I1009 21:53:05.687024   47234 feature_gate.go:206] feature gates: &{map[]}

gut. Also, kommentieren Sie bitte PR :)

/cc @rdodev - zu cli-arg-

zugehörige PR dafür ist in Arbeit von
https://github.com/kubernetes/kubernetes/pull/69578

/ @rdodev zuweisen

Lassen Sie uns morgen früh darüber reden.

kubeadm token create --print-join-command --config /etc/kubernetes/kubeadm.conf kann '--config' nicht mit Argumenten mischen [print-join-command]

In Sachen cli ist das @timothysc schon

https://github.com/kubernetes-csi/driver-registrar/blob/87d0059110a8b4a90a6d2b5a8702dd7f3f270b80/vendor/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation/validation.go#L375

Prima!

Setzen Sie einfach die IP des Masters anstelle von $ (hostname -i)
Zum Beispiel:
kubeadm init --apiserver-advertise-address 192.168.1.2

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen