Ich verwende derzeit eine Kubernetes-Spezifikation Deployment.yaml
für die Bereitstellung eines Dienstes. Die Spezifikation enthält einen wörtlichen Verweis auf eine bestimmte IP-Adresse (wie <static-ip-address>
unten markiert ):
spec:
type: LoadBalancer
loadBalancerIP: <static-ip-address>
Ich mache mir Sorgen, Informationen wie Passwörter oder IP-Adressen in entfernte Git-Repositorys zu übertragen. Kann ich dies vermeiden, indem ich Umgebungsvariablen verwende, z. B. mit einer Implementierungsspezifikation und einer tatsächlichen Implementierung, ungefähr wie folgt:
spec:
type: LoadBalancer
loadBalancerIP: ${SERVICE_ADDRESS}
und
export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml
Offensichtlich funktioniert diese spezielle Syntax noch nicht. Aber ist so etwas möglich und wenn ja wie?
Ich würde es vorziehen, mich nicht auf ein separates Bereitstellungstool zu verlassen . Geheimnis s und ConfigMap
s scheinen vielversprechend, aber offenbar können sie nicht , dass Klagen dieser Zweck in einer Art und Weise konsumiert werden. Wenn ich direkt auf eine statische IP-Adresse verweisen könnte, die damit definiert wurde gcloud compute addresses create service-address
, wäre das am besten.
envsubst
. Das wusste ich bis jetzt noch nichtsed
. Nach Ihrer Definition wäre die vorgeschlagene Lösung mitsed
auch nicht einfacher / sauberer, dased
auf Windows-Computern standardmäßig keine installiert ist.Es gab eine weitere angenehm einfache Lösung: Ich habe eine Google Compute - Adresse
my-address
definiert ist , und ich kann es offenbar wie so in dem Dienst spec benutzenloadBalancerIP: my-address
.Mit dieser Funktion als "externe" Quelle für IP-Adressen und Geheimnisse für Kennwörter ist für meinen einfachen Anwendungsfall (in einer GKE-Umgebung) kein Bereitstellungstool (oder keine Vorlagen) mehr erforderlich.
JETZT BEOBACHTEN: Ich habe mich schließlich für ein Provisioning-Tool entschieden, nämlich " Built -In"
sed
.Meine
Deployment.yaml
enthält jetzt eine "Template Variable" zB inund ich setze den Dienst mit zB 1.2.3.4 als externe IP-Adresse mit ein
quelle
Sie können einen einfachen Pre-Prozessor schreiben, um eine variable Substitution für Ihre yaml-Dateien durchzuführen (oder Sie können jsonnet verwenden , um dasselbe für json-Konfigurationsdateien zu erreichen).
Es wird diskutiert , Vorlagen direkt in die Kubernetes-Konfiguration einzufügen , diese ist jedoch noch nicht implementiert oder verfügbar.
quelle
Bis Vorlagen zur Verfügung stehen, ist der einfachste Weg , es zu tun ist , einen Job zu starten, das das Kubernetes API verwendet , um den Dienst zu aktualisieren. Ein kurzes Shell-Skript in einem alpinen Image, das mit einem Geheimnis (das die IP-Adresse enthält) und einer Konfigurationsübersicht (das die Vorlage enthält) gekoppelt ist, sollte einfach genug sein. Das schwierige Bit verwendet die Authentifizierungs- und Autorisierungsfunktionen des Apiservers korrekt.
/programming/30690186/how-do-i-access-the-kubernetes-api-from-within-a-pod-container gibt ein Beispiel für den Zugriff auf die API. Offensichtlich möchten Sie in diesem Beispiel einen POST in / api / v1 / namespaces / default / services anstelle des GET durchführen.
quelle