etcd-Gateway
Was ist das etcd-Gateway?
Das etcd-Gateway ist ein einfacher TCP-Proxy, der Netzwerkdaten an den etcd-Cluster weiterleitet. Es ist zustandslos und transparent: Es untersucht weder Clientanfragen noch greift es in Clusterantworten ein. Es terminiert keine TLS-Verbindungen, führt keine TLS-Handshakes im Namen seiner Clients durch und prüft nicht, ob eine Verbindung abgesichert ist.
Das Gateway unterstützt mehrere etcd-Serverendpunkte und verwendet ein einfaches Round-Robin-Verfahren. Es leitet nur an verfügbare Endpunkte weiter und verbirgt Ausfälle vor seinen Clients. Weitere Wiederholungsstrategien, etwa gewichtetes Round-Robin, können künftig unterstützt werden.
Wann das etcd-Gateway sinnvoll ist
Jede Anwendung, die auf etcd zugreift, muss zunächst die Adresse eines Clientendpunkts des etcd-Clusters kennen. Greifen mehrere Anwendungen auf demselben Server auf denselben etcd-Cluster zu, muss trotzdem jede Anwendung dessen bekannt gegebene Clientendpunkte kennen. Wird der etcd-Cluster so umkonfiguriert, dass er andere Endpunkte hat, muss möglicherweise auch jede Anwendung ihre Endpunktliste aktualisieren. Diese umfassende Umkonfiguration ist aufwendig und fehleranfällig.
Das etcd-Gateway löst dieses Problem, indem es einen stabilen lokalen Endpunkt bereitstellt. In einer typischen Konfiguration läuft auf jedem Rechner ein Gateway, das auf einer lokalen Adresse lauscht; jede etcd-Anwendung verbindet sich mit ihrem lokalen Gateway. Dadurch muss nur das Gateway seine Endpunkte aktualisieren, statt jede einzelne Anwendung anzupassen.
Um Änderungen der Clusterendpunkte automatisch weiterzugeben, läuft das etcd-Gateway also auf jedem Rechner, auf dem mehrere Anwendungen auf denselben etcd-Cluster zugreifen.
Wann das etcd-Gateway nicht sinnvoll ist
- Leistungssteigerung
Das Gateway ist nicht dafür ausgelegt, die Leistung eines etcd-Clusters zu verbessern. Es bietet weder Caching noch die Zusammenführung von Watches oder die Bündelung von Anfragen. Das etcd-Team entwickelt einen Caching-Proxy, der die Skalierbarkeit von Clustern verbessern soll.
- Betrieb auf einem Clusterverwaltungssystem
Fortgeschrittene Clusterverwaltungssysteme wie Kubernetes unterstützen Diensterkennung von Haus aus. Anwendungen können über einen DNS-Namen oder eine vom System verwaltete virtuelle IP-Adresse auf einen etcd-Cluster zugreifen. Beispielsweise entspricht kube-proxy dem etcd-Gateway.
Das etcd-Gateway starten
Als Beispiel dient ein etcd-Cluster mit folgenden statischen Endpunkten:
| Name | Adresse | Hostname | Port |
|---|---|---|---|
| infra0 | 10.0.1.10 | infra0.example.com | 2379 |
| infra1 | 10.0.1.11 | infra1.example.com | 2379 |
| infra2 | 10.0.1.12 | infra2.example.com | 2379 |
Das etcd-Gateway mit folgendem Befehl für diese statischen Endpunkte starten:
Alternativ bei einer Diensterkennung über DNS die folgenden DNS-SRV-Einträge betrachten:
Das etcd-Gateway mit folgendem Befehl starten, damit es die Endpunkte aus den DNS-SRV-Einträgen abruft:
Konfigurationsoptionen
etcd-Cluster
–endpoints
- Kommagetrennte Liste von etcd-Serverzielen, an die Clientverbindungen weitergeleitet werden.
- Standard:
127.0.0.1:2379 - Der Port muss enthalten sein.
- Ungültiges Beispiel:
https://127.0.0.1:2379(das Gateway terminiert TLS nicht). Das Gateway prüft weder das HTTP-Schema noch die Anfragen; es leitet Anfragen lediglich an die angegebenen Endpunkte weiter.
–discovery-srv
- DNS-Domäne, über die Clusterendpunkte mithilfe von SRV-Einträgen initialisiert werden.
- Standard: (nicht gesetzt)
Netzwerk
–listen-addr
- Schnittstelle und Port, an die gebunden wird, um Clientanfragen anzunehmen.
- Standard:
127.0.0.1:23790
–retry-delay
- Wartezeit vor einem erneuten Verbindungsversuch zu ausgefallenen Endpunkten.
- Standard: 1m0s
- Ungültiges Beispiel: “123” (das Format erwartet eine Zeiteinheit)
Sicherheit
–insecure-discovery
- SRV-Einträge akzeptieren, die unsicher oder für Man-in-the-Middle-Angriffe anfällig sind.
- Standard:
false
–trusted-ca-file
- Pfad zur TLS-CA-Datei des Clients für den etcd-Cluster, um die bei der SRV-Erkennung zurückgegebenen Endpunkte zu überprüfen. Sie wird NUR zur Authentifizierung der gefundenen Endpunkte verwendet, nicht zum Aufbau von Verbindungen für die Datenübertragung. Das Gateway terminiert niemals TLS-Verbindungen und erstellt keine TLS-Verbindungen im Namen seiner Clients.
- Standard: (nicht gesetzt)