@thockin Mit dem Validierungscode kann ich keine zwei Ports mit nicht angegebenen Namen erstellen.
The Service "my-service" is invalid: * spec.ports[0].name: Required value* spec.ports[1].name: Required value
Welche Version hat der Benutzer verwendet?
mengqiy am 28. Dez. 2016
Es sieht so aus, als hätte der Benutzer den Kommentar gelöscht, in dem er dies behauptet hat
wahrscheinlich wurde ihnen klar, dass sie einen Fehler gemacht haben (sorry, dass sie das nicht gesehen haben). Immer noch,
Der Portname scheint der korrektere Zusammenführungsschlüssel zu sein
Am Dienstag, den 27. Dezember 2016 um 16:11 Uhr schrieb Mengqi Yu [emailprotected] :
@thockin https://github.com/thockin Der Validierungscode
https://github.com/kubernetes/kubernetes/blob/master/pkg/api/validation/validation.go#L2481
Ich kann keine zwei Ports mit nicht angegebenen Namen erstellen.Der Dienst "my-service" ist ungültig:
- spec.ports [0] .name: Erforderlicher Wert
- spec.ports [1] .name: Erforderlicher Wert
Welche Version hat der Benutzer verwendet?
- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/kubernetes/kubernetes/issues/39188#issuecomment-269401334 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AFVgVH8_TwXVE7sudwh4kZl230-wkIPgks5rMalGgaJpZM4LUkwV
.
thockin am 28. Dez. 2016
Trotzdem scheint der Portname der korrektere Zusammenführungsschlüssel zu sein
Zustimmen.
Wenn wir name
als mergeKey
möchten, sollten wir einen Validierungscode hinzufügen, um sicherzustellen, dass die Namen eindeutig sind. Und wir müssen uns um einen leeren Namen kümmern, wenn es nur einen einzigen Port gibt.
@thockin Dies ist eine bahnbrechende Änderung. Also sollten wir diese Änderung in 1.6 vornehmen, richtig?
cc: @pwittrock
mengqiy am 28. Dez. 2016
Namen sind einzigartig. Wir können nicht verlangen, dass dieser Name für das nicht leer ist
Single-Port-Fall, und wir fordern es bereits im Multi-Port-Fall. Können ""
ein gültiger Wert für den Fall eines einzelnen Ports sein?
Ich denke, das Ändern des Zusammenführungsschlüssels ist technisch gesehen eine bahnbrechende Änderung, aber es gibt sie
irgendwelche wirklichen Auswirkungen?
Am Dienstag, den 27. Dezember 2016 um 16:40 Uhr schrieb Mengqi Yu [emailprotected] :
Trotzdem scheint der Portname der korrektere Zusammenführungsschlüssel zu sein
Zustimmen.
Wenn wir den Namen als mergeKey verwenden möchten, sollten wir einen Validierungscode hinzufügen
Stellen Sie sicher, dass die Namen eindeutig sind. Und wir müssen uns um einen leeren Namen kümmern
wenn es nur einen einzigen Port gibt.@thockin https://github.com/thockin Dies ist eine bahnbrechende Änderung. Also wir
sollte diese Änderung in 1.6 vornehmen, oder?cc: @pwittrock https://github.com/pwittrock
- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/kubernetes/kubernetes/issues/39188#issuecomment-269403661 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AFVgVFEiLbxVHCgP4QtVUV4t9PML2OC2ks5rMa_7gaJpZM4LUkwV
.
thockin am 28. Dez. 2016
Kann "" ein gültiger Wert für den Fall eines einzelnen Ports sein?
Weiß noch nicht. Ich muss mich darum kümmern.
Ich denke, das Ändern des Zusammenführungsschlüssels ist technisch gesehen eine bahnbrechende Änderung, aber es gibt sie
irgendwelche wirklichen Auswirkungen?
Ja, wie # 36024 ( kubectl
ist kaputt, auch bei geringfügigem Versionsversatz)
mengqiy am 28. Dez. 2016
igitt
Am Dienstag, den 27. Dezember 2016 um 17:00 Uhr schrieb Mengqi Yu [emailprotected] :
Kann "" ein gültiger Wert für den Fall eines einzelnen Ports sein?
Weiß noch nicht. Ich muss mich darum kümmern.
Ich denke, das Ändern des Zusammenführungsschlüssels ist technisch gesehen eine bahnbrechende Änderung, aber es gibt sie
irgendwelche wirklichen Auswirkungen?Ja, wie # 36024 https://github.com/kubernetes/kubernetes/issues/36024 (
kubectl ist kaputt, auch bei geringfügigem Versionsversatz)- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/kubernetes/kubernetes/issues/39188#issuecomment-269405464 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AFVgVI2Vj195GZZg7oyCZwmm4SaqQaOZks5rMbSzgaJpZM4LUkwV
.
thockin am 28. Dez. 2016
Kann "" ein gültiger Wert für den Fall eines einzelnen Ports sein?
Der mergeKey muss in der go-Struktur vorhanden sein, um den Patch zu berechnen. Beim Auslösen einer Objektrunde wird jedoch ein leeres Feld gelöscht, das in diesem Fall name
ist. Wenn Sie also einfach mergeKey
ändern, wird der No-Name-Single-Port-Fall aufgehoben.
for: "../svc.yaml": map: map[protocol:UDP port:30420 targetPort:0 nodePort:30432] does not contain declared merge key: name
Wir sollten die mergeKey
ändern, sonst macht kubectl apply
etwas falsch.
zB Erstellen eines Dienstes mit kubectl apply
apiVersion: v1kind: Servicemetadata: name: my-servicespec: type: NodePort ports: - protocol: UDP port: 30420 name: updport nodePort: 30420 - protocol: TCP port: 30420 name: tcpport nodePort: 30420 selector: app: MyApp
Nehmen Sie die Änderung an tcpport
und apply
- protocol: TCP port: 30420 name: tcpport nodePort: 30000 # Change this nodePort
kubectl get
den Service zurück
apiVersion: v1kind: Servicemetadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"kind":"Service","apiVersion":"v1","metadata":{"name":"my-service","creationTimestamp":null},"spec":{"ports":[{"name":"updport","protocol":"UDP","port":30420,"targetPort":0,"nodePort":30420},{"name":"tcpport","protocol":"TCP","port":30420,"targetPort":0,"nodePort":30000}],"selector":{"app":"MyApp"},"type":"NodePort"},"status":{"loadBalancer":{}}} name: my-service...spec: clusterIP: 10.0.0.249 ports: - name: updport nodePort: 30000 # Wrong change port: 30420 protocol: UDP targetPort: 30420 - name: tcpport nodePort: 30420 port: 30420 protocol: TCP targetPort: 30420 selector: app: MyApp sessionAffinity: None type: NodePortstatus: loadBalancer: {}
Die Änderung geht an den falschen Ort.
mengqiy am 28. Dez. 2016
Ich bin damit einverstanden, dass wir es ändern sollten, aber wie können wir das tun, wenn der Name optional ist?
Kann ein leerer Mergekey automatisch zu einer zufälligen Zeichenfolge werden?
Am Mittwoch, den 28. Dezember 2016 um 14:20 Uhr schrieb Mengqi Yu [emailprotected] :
Kann "" ein gültiger Wert für den Fall eines einzelnen Ports sein?
Der mergeKey muss in der go-Struktur vorhanden sein, um den Patch zu berechnen. Aber Objekt
Beim Auslösen einer Runde wird ein leeres Feld gelöscht, das in diesem Fall der Name ist. Damit
Ändern Sie einfach den mergeKey, um den No-Name-Single-Port-Fall zu lösen.Wir sollten den mergeKey ändern, sonst reicht kubectl apply aus
etwas stimmt nicht.
zB Erstellen eines Dienstes mit kubectl anwendenapiVersion: v1kind: Servicemetadata:
Name: my-servicespec:
Typ: NodePort
Häfen:
- Protokoll: UDP
Port: 30420
Name: Updport
nodePort: 30420
- Protokoll: TCP
Port: 30420
Name: tcpport
nodePort: 30420
Wähler:
App: MyAppNehmen Sie Änderungen an tcpport vor und übernehmen Sie die Änderung
- protocol: TCP port: 30420 name: tcpport nodePort: 30000 # Change this nodePort
kubectl bekommt den Service zurück
apiVersion: v1kind: Servicemetadata:
Anmerkungen:
kubectl.kubernetes.io/last-applied-configuration: | {"kind": "Service", "apiVersion": "v1", "metadata": {"name": "my-service", "createdTimestamp": null}, "spec": {"ports": [{ "name": "updport", "protocol": "UDP", "port": 30420, "targetPort": 0, "nodePort": 30420}, {"name": "tcpport", "protocol": "TCP "," port ": 30420," targetPort ": 0," nodePort ": 30000}]," selector ": {" app ":" MyApp "}," type ":" NodePort "}," status ": { "loadBalancer": {}}} name: my-service ... spec:
clusterIP: 10.0.0.249
Häfen:
- Name: Updport
nodePort: 30000 # Falsche Änderung
Port: 30420
Protokoll: UDP
targetPort: 30420- Name: tcpport
nodePort: 30420
Port: 30420
Protokoll: TCP
targetPort: 30420
Wähler:
App: MyApp
sessionAffinity: Keine
Typ: NodePortstatus:
Lastenausgleicher: {}Die Änderung geht an den falschen Ort.
- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/kubernetes/kubernetes/issues/39188#issuecomment-269550385 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AFVgVB00_aCZ2pF7mjyy3y2f810VjtMaks5rMuDGgaJpZM4LUkwV
.
thockin am 29. Dez. 2016
Kann ein leerer Mergekey automatisch zu einer zufälligen Zeichenfolge werden?
Ja, es ist möglich, aber es wird die Logik kompliziert machen. Da apply
die ursprüngliche Konfiguration (in Anmerkungen), die aktuelle Konfiguration (auf dem API-Server) und die geänderte Konfiguration (in der Benutzerdatei) benötigen, um 3-Wege-Diff auszuführen.
Ich bin mir nicht sicher, ob @pwittrock @ bgrant0607 das gefallen wird. Benötigen Sie ihre Kommentare, bevor Sie fortfahren.
mengqiy am 29. Dez. 2016
"Zufällige" Zeichenfolge - Nr.
In anderen Fällen reicht ein einzelnes Feld als Zusammenführungsschlüssel nicht aus, z. B. Listen mit Objektreferenzen. Ich denke, alle Felder, die in der Konfiguration des Benutzers angegeben sind, als Schlüssel zu behandeln, funktioniert in allen Fällen, an die ich gedacht habe. Ich würde das wahrscheinlich zu einer neuen Patch-Strategie machen. Es wäre wahrscheinlich sogar abwärtskompatibel.
bgrant0607 am 10. Jan. 2017
@ bgrant0607 Denken Sie, dass dies nur die primitiven Felder als Teil des eindeutigen / Zusammenführungsschlüssels unterstützen würde? Oder wäre diese Strategie nur für Typen gültig, die nur primitive Felder enthalten?
Basierend auf Ihrer Beschreibung wäre der Zusammenführungsschlüssel für diese Strategie dynamisch und würde vom Client definiert.
Haben wir darüber nachgedacht, Zusammenführungsschlüssel zu unterstützen, bei denen es sich um mehrere Werte handelt, die ansonsten genauso behandelt werden wie Zusammenführungsschlüssel mit einem Wert (in diesem Fall könnte dies der Fall sein?
pwittrock am 12. Jan. 2017
@pwittrock Nein, ich dachte, wir würden alle vom Benutzer angegebenen Felder als Schlüssel verwenden, einschließlich verschachtelter Karten. Mehrere Schlüssel würden ebenfalls funktionieren und sind möglicherweise weniger fehleranfällig.
bgrant0607 am 12. Jan. 2017
Für diesen speziellen Fall ist "" nur im Fall eines einzelnen ein gültiger Name
Eintrag, und das wird durch Validierung erzwungen, also wenn "" erlaubt wäre, würde es
einfach arbeiten?
Am Mittwoch, den 11. Januar 2017 um 19:10 Uhr, Brian Grant [emailprotected]
schrieb:
@pwittrock https://github.com/pwittrock Nein, ich dachte, wir würden alle verwenden
Vom Benutzer als Schlüssel angegebene Felder, einschließlich verschachtelter Karten. Mehrere
Schlüssel würden auch funktionieren und könnten weniger fehleranfällig sein.- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/kubernetes/kubernetes/issues/39188#issuecomment-272064310 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AFVgVDqLA1mRB-bEcODC1TQDuFNPXi_7ks5rRZmmgaJpZM4LUkwV
.
thockin am 12. Jan. 2017
@thockin Ich habe gestern etwas Ähnliches gedacht. Etwas wie:
Wenn len (Patchliste) == 1 && Zusammenführungsschlüssel im Patchlisteneintrag fehlt && len (Zielliste) == 1 && Zusammenführungsschlüssel im Ziellisteneintrag fehlt
-> Dann nur in Eintrag in der Zielliste zusammenführen
Mein größtes Zögern hier war, dass es der bereits schlecht verstandenen Zusammenführungssemantik etwas Komplexität hinzufügt. Es würde wahrscheinlich einige seltsame Randfälle geben, wie das, was passiert, wenn wir den Zusammenführungsschlüssel zum vorhandenen Eintrag hinzufügen. z.B
Wenn len (Patch-Liste) == 1 && Zusammenführungsschlüssel im Listeneintrag vorhanden ist && len (Zielliste) == 1 && Zusammenführungsschlüssel im Ziellisteneintrag fehlt
-> Führen Sie dann nur den Eintrag in der Zielliste zusammen und legen Sie den Zusammenführungsschlüssel fest
pwittrock am 12. Jan. 2017
@ymqytw Kannst du sicherstellen, dass dies in 1.7 behoben wird?
pwittrock am 7. März 2017
@pwittrock Wenn Sie den Ansatz in https://github.com/kubernetes/kubernetes/issues/39188#issuecomment -272221767 verwenden, dann ja.
Wenn wir jedoch einen kombinierten Zusammenführungsschlüssel unterstützen möchten, der mehrere Schlüssel enthält, brauchen wir meiner Meinung nach zuerst einen Vorschlag.
mengqiy am 7. März 2017
Synchronisieren Sie mit @thockin , um die Mindestanforderungen für die Richtigkeit zu ermitteln. Ich möchte keine Teillösung einführen, da dies zu einem Wartungsaufwand führt. Sobald die Zusammenführungsschlüsselprüfung abgeschlossen ist, können Sie einen Vorschlag unterbreiten.
Ich denke, es ist in Ordnung, wenn wir einen Entwurfsvorschlag schreiben. Ich werde sicherstellen, dass es innerhalb von ~ Wochen angemessen überprüft wird.
pwittrock am 7. März 2017
Ich habe viele Probleme mit Ports, die durch 1.6 falsch PATCHEN. Glauben wir, dass diese Probleme jetzt behoben sind? Ich kann sie scheinbar nicht tadeln, aber ich war nicht fleißig darin, sie alle zu katalogisieren ...
thockin am 17. März 2017
Ich denke, der Schmerz, den Sie beim PATCHEN der Ports haben, wird durch den Fehler verursacht, das falsche JSON-Paket auf dem API-Server zu verwenden (# 42488). Es wurde von # 42489 behoben.
Probleme mit Ports:
- [x] # 42488 Problem mit der Nummernkonvertierung, das durch die Verwendung des falschen JSON-Pakets verursacht wurde.
- [] (dieses Problem) mergeKey für Ports (Port #) ist nicht eindeutig. Die Ports werden immer noch falsch PATCHED, wenn der Benutzer etwas wie https://github.com/kubernetes/kubernetes/issues/39188#issue -197312716 tut
mengqiy am 18. März 2017
Wurde dies behoben? Ich sehe beide Ports auf beschreiben:
› kubectl describe svc nginxName: nginxNamespace: defaultLabels: <none>Annotations: <none>Selector: app=nginxType: NodePortIP: 10.0.0.133Port: udp 30420/UDPNodePort: udp 30420/UDPEndpoints: 172.17.0.4:30420Port: tcp 30420/TCPNodePort: tcp 30420/TCPEndpoints: 172.17.0.4:30420Session Affinity: NoneEvents: <none>
jamiehannaford am 20. Apr. 2017
@ Jamiehannaford Noch nicht. describe
ist von diesem Problem nicht betroffen.
Vorschlag unter https://github.com/kubernetes/community/pull/476. Bewertung willkommen.
mengqiy am 20. Apr. 2017
Es gibt eine PR, die dies behebt, aber nicht in 1.7 landet
pwittrock am 2. Juni 2017
PR für die Unterstützung von Multifields MergeKey in neuen APIs: https://github.com/kubernetes/kubernetes/pull/46161
Vorschlag zur Korrektur vorhandener APIs: https://github.com/kubernetes/community/pull/476
Der zweite hängt vom ersten ab.
mengqiy am 2. Juni 2017
Scheint so, als würde dies nicht auf 1.8 landen. Möglicherweise möchten wir den Meilenstein entfernen.
cc @pwittrock @thockin
xiangpengzhao am 2. Sept. 2017
Art / Bug
Priorität / wichtig-bald
@pwittrock Bitte ändern Sie den Meilenstein, da dieser nicht in 1.8 landet.
mengqiy am 7. Sept. 2017
[MILESTONENOTIFIER] Meilensteinetiketten unvollständig
@mengqiy @thockin
Erforderliche Aktion : Für dieses Problem sind Änderungen an der Bezeichnung erforderlich. Wenn die erforderlichen Änderungen nicht innerhalb eines Tages vorgenommen werden, wird das Problem aus dem Meilenstein von Version 1.8 entfernt.
kind: Muss höchstens eines von ['kind / bug', 'kind / feature', 'kind / cleanup'] angeben.
Priorität: Muss höchstens eines von ['Priorität / kritisch-dringend', 'Priorität / wichtig-bald', 'Priorität / wichtig-langfristig'] angeben.
k8s-github-robot am 7. Sept. 2017
Probleme sind nach 90 Tagen Inaktivität veraltet.
Markieren Sie das Problem mit /remove-lifecycle stale
als frisch.
Veraltete Probleme verrotten nach weiteren 30 Tagen Inaktivität und schließen schließlich.
Verhindern Sie das automatische Schließen von Problemen mit einem /lifecycle frozen
-Kommentar.
Wenn dieses Problem jetzt sicher geschlossen werden kann, tun Sie dies bitte mit /close
.
Senden Sie Feedback an sig-testing, kubernetes / test-infra und / oder @fejta
.
/ Lebenszyklus abgestanden
fejta-bot am 4. Jan. 2018
/ remove-lifecycle veraltet
bgrant0607 am 23. Jan. 2018
Verwandte # 59482
yue9944882 am 8. Feb. 2018
Ja # 59482 hat die gleiche Grundursache.
bgrant0607 am 8. Feb. 2018
Ich denke, containerPort
s in Bereitstellungen haben das gleiche Problem. Ich kann anscheinend nicht denselben Port für zwei verschiedene Protokolle angeben.
praseodym am 29. Apr. 2018
👍2
Dieses Problem scheint nicht mit der CLI zu tun zu haben. Das Problem befindet sich auf dem API-Server. Sollten wir das Sig auf API-Maschinerie oder ähnliches ändern?
fabianvf am 20. Juni 2018
Probleme sind nach 90 Tagen Inaktivität veraltet.
Markieren Sie das Problem mit /remove-lifecycle stale
als frisch.
Veraltete Probleme verrotten nach weiteren 30 Tagen Inaktivität und schließen schließlich.
Wenn dieses Problem jetzt sicher geschlossen werden kann, tun Sie dies bitte mit /close
.
Senden Sie Feedback an sig-testing, kubernetes / test-infra und / oder fejta .
/ Lebenszyklus abgestanden
fejta-bot am 18. Sept. 2018
/ remove-lifecycle veraltet
george-angel am 18. Sept. 2018
Probleme sind nach 90 Tagen Inaktivität veraltet.
Markieren Sie das Problem mit /remove-lifecycle stale
als frisch.
Veraltete Probleme verrotten nach weiteren 30 Tagen Inaktivität und schließen schließlich.
Wenn dieses Problem jetzt sicher geschlossen werden kann, tun Sie dies bitte mit /close
.
Senden Sie Feedback an sig-testing, kubernetes / test-infra und / oder fejta .
/ Lebenszyklus abgestanden
fejta-bot am 17. Dez. 2018
/ remove-lifecycle veraltet
george-angel am 17. Dez. 2018
Was ist passiert :
Ich glaube, ich habe das reproduziert. Bitte zögern Sie nicht, mich zu informieren, wenn meine Erwartungen falsch sind.
Ich habe eine Bereitstellung mit der folgenden Portdeklaration durchgeführt:
ports: - name: https containerPort: 443 - name: cport10000tcp containerPort: 10000 protocol: TCP - name: cport10000udp containerPort: 10000 protocol: UDP - name: cport10001udp containerPort: 10001 protocol: UDP
Wenn ich den Pod beschreibe, wurde er übersprungen und erwähnt, dass der Port (10000) für UDP geöffnet ist.
Pod Template: Labels: app=svr env=dev Containers: svr: Image: dev-svr:0.92 Ports: 443/TCP, 10000/TCP, 10001/UDP Host Ports: 0/TCP, 0/TCP, 0/UDP
Umwelt :
- Kubernetes-Version (verwenden Sie
kubectl version
):
$ kubectl versionClient Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.3", GitCommit:"5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0", GitTreeState:"clean", BuildDate:"2019-06-06T01:44:30Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"}Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.3", GitCommit:"5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0", GitTreeState:"clean", BuildDate:"2019-06-06T01:36:19Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
- Cloud-Anbieter oder Hardwarekonfiguration:
Mac - Betriebssystem (zB:
cat /etc/os-release
):
macOS Version 10.14.6 - Kernel (zB
uname -a
):
$ uname -aDarwin skwok-mbp.local 18.7.0 Darwin Kernel Version 18.7.0: Thu Jun 20 18:42:21 PDT 2019; root:xnu-4903.270.47~4/RELEASE_X86_64 x86_64
- Tools installieren:
Docker Desktop Version 19.03.1 - Netzwerk-Plugin und -Version (falls es sich um einen Netzwerkfehler handelt):
- Andere:
skwokie am 13. Aug. 2019
Ich kann dieses Verhalten wiederholen, plus PATCH
schlägt bei einem Dienst oder einer Bereitstellung fehl, die mit demselben Port beschrieben wurden, der zweimal aufgeführt ist (selbst wenn jeder Port ein eindeutiges Attribut name
oder protocol
hat) als es scheint, dass das matchKey
nur port
berücksichtigt
davidalpert am 27. Aug. 2019
Ich stoße auch auf das gleiche Problem.
berlincount am 26. Sept. 2019
Ebenso und beim Aktualisieren des zweiten Eintrags ändert das Ausführen von "kubectl apply" die Werte nicht und "kubectl replace" ist erforderlich.
erwbgy am 28. März 2020
Dieser Käfer ist älter als meine Tochter, er wird bald zur Schule gehen.
Warum wird es niemand reparieren?
rearden-steel am 25. Mai 2020
😄5👍4🚀1❤1🎉1
Das macht Spaß!
Ich werde dies für API-Maschinerie anstelle von CLI markieren, weil es nicht so aussieht, als ob dies wirklich nichts ist, was in der CLI behoben wird.
/ remove-sig cli
/ remove-area kubectl
/ sig api-maschinen
Es scheint, dass es einige mögliche Ansätze gibt, die dies angehen könnten (bitte fügen Sie andere hinzu, wenn Sie welche kennen):
1. Ändern Sie den Zusammenführungsschlüssel für Service.Ports (und Container.Ports ) so, dass er Name anstelle von Port ist.
- Dies scheint vom Standpunkt des Codes aus am wenigsten störend zu sein.
- Einige vorhandene Single-Port-Dienste verfügen jedoch über Ports ohne Namen, da der Name nur erforderlich war, wenn Sie mehrere Ports hatten.
- Im Wesentlichen kann der Zusammenführungsschlüssel nicht optional sein. Es wäre schön, einen Namen erforderlich zu machen, aber das scheint die bestehenden Single-Port-Dienste ohne Namen zu beschädigen.
- Möglicherweise könnte der Patch-Code für die
2. Aktualisieren Sie den strategischen Zusammenführungs-Patch, um mehrere Zusammenführungsschlüssel zu ermöglichen (Port, Protokoll statt nur Port).
- Dies scheint den Code zu stören und das Risiko zu erhöhen, aber es umgeht das Problem, dass einige Single-Port-Dienste einen Port ohne Namen haben, da wir damit im Grunde einen zusammengesetzten Zusammenführungsschlüssel für Port und Protokoll definieren könnten
- Ich bin kein großer Fan dieser Idee, weil es eine so große Veränderung ist und nur die Hafensituation wirklich berücksichtigt.
3. Repariere es nicht. Fehler beim Erstellen des Dienstes, wenn Sie versuchen, dieselbe Portnummer mit zwei Protokollen zu verwenden.
- Natürlich möchte jeder, dass dies behoben wird, aber seien wir ehrlich, es wurde seit Jahren nicht mehr behoben, und wenn es auftritt, verursacht es Probleme für Leute, von denen sie nichts erfahren, bis sie später versuchen, ihre Ports zu aktualisieren.
- Wir sollten den Leuten helfen, indem wir ihnen zu dem Zeitpunkt, zu dem der Server (oder Container) erstellt wird, im Voraus mitteilen, dass er nicht unterstützt wird, und den Vorgang fehlschlagen.
- Dies kann jedoch zu Problemen führen, wenn einige Benutzer es ordnungsgemäß verwenden, ihre Ports jedoch nie aktualisiert haben. Ich bin mir nicht sicher, ob dies realistisch ist oder nicht.
So reproduzieren Sie das Problem:
Ich weiß, dass dieser Thread bereits viele Informationen und Beispiele enthält, aber hier ist mein All-in-One-Skript, um das Problem zu reproduzieren:
# Create a service with tcp and udp ports using the same port numberkubectl apply -f - <<EOFapiVersion: v1kind: Servicemetadata: name: foospec: type: NodePort ports: - name: bar protocol: UDP port: 30420 nodePort: 30420 - name: baz protocol: TCP port: 30420 nodePort: 30420EOFkubectl get svc foo# Update the service to use a new port number for both portskubectl apply -f - <<EOFapiVersion: v1kind: Servicemetadata: name: foospec: type: NodePort ports: - name: bar protocol: UDP port: 30421 nodePort: 30421 - name: baz protocol: TCP port: 30421 nodePort: 30421EOFkubectl get svc fooecho "Whoops, I lost one of my ports!"
Ausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEfoo NodePort 10.109.137.128 <none> 30420:30420/UDP,30420:30420/TCP 0sservice/foo configuredNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEfoo NodePort 10.109.137.128 <none> 30421:30421/UDP 1sWhoops, I lost one of my ports!
brianpursley am 23. Juni 2020
Könnte für Option 1 ein Standardname hinzugefügt werden, wenn dieser nicht vorhanden ist, z. B. Port1, Port2 usw.?
erwbgy am 23. Juni 2020
Ja, ich denke, das wäre Teil von Option 1.
Es gibt jedoch immer noch Dienste mit einem einzigen Port ohne Namen. Ich bin mir nicht sicher, wie Sie noch zulassen können, dass diese aktualisiert werden.
brianpursley am 23. Juni 2020
Ich habe das gleiche Problem beim Erstellen eines ClusterIP-Dienstes mit demselben Port für TCP und UDP ... und beim Lesen dieses Threads klingt es so, als wäre er nach all dieser Zeit nicht behoben. Aber ich bin verwirrt von kube-dns unter dem Namespace des kube-Systems. Es ist auch ein ClusterIP, aber es scheint denselben Port für TCP und UDP zu haben:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkube-dns ClusterIP 10.100.200.2 <none> 53/UDP,53/TCP 60d
Ich habe mir die Service-Definition yaml (https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/deployments/kube-dns.yaml#L15) angesehen und sie ist sehr einfach. Ich habe die gleiche Syntax für meine service.yaml, aber es wird nur TCP angezeigt ... nun, je nachdem, was oben steht. Weiß jemand, was an kube-dns anders ist, was diese Arbeit macht?
alankwon am 18. Juli 2020
@brianpursley Sie haben vergessen 4. Verwenden Sie serverseitig anwenden und den neuen listMapKey, der mehrere Zusammenführungsschlüssel ermöglicht.
apelisse am 24. Okt. 2020
Hier gibt es einen Aspekt, der einige Komplikationen verursacht. Die Diskussion konzentrierte sich auf Definitionen, die denselben Port haben, aber je nach Protokoll variieren. Das aktuelle Verhalten akzeptiert jedoch yaml mit Definitionen, die nur nach Namen variieren. Es wird nicht wie erwartet funktionieren, aber das Yaml wird akzeptiert.
Konzeptionell gibt es ein Argument zur Unterstützung mehrerer Namen für einen einzelnen Port: Ports haben Port-Aliase - ich kann Port 25 entweder als SMTP oder als Mail bezeichnen.
ephesused am 26. Okt. 2020
Dies scheint in 1.20 behoben zu sein (vielleicht vorher, aber ich habe 20 zur Hand :):
$ k describe svc hostnames...Type: NodePortIP: 10.0.0.201Port: tcp 80/TCPTargetPort: 9376/TCPNodePort: tcp 30013/TCPEndpoints: 10.64.0.83:9376Port: udp 80/UDPTargetPort: 9376/UDPNodePort: udp 30013/UDPEndpoints: 10.64.0.83:9376...
Gibt es noch andere Aspekte, die noch ausstehen?
thockin am 9. Dez. 2020
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen