Postarea acestui răspuns wiki comunității pentru a stabili o abordare de bază pentru această întrebare, mai degrabă decât pentru a oferi o soluție definitivă.
Simțiți-vă liber să editați și să extindeți.
Vă puteți expune aplicațiile cu Servicii
. Există câteva opțiuni în care fiecare este diferită într-un fel de alta:
ClusterIP
: Expune Serviciul pe un IP intern al clusterului. Alegerea acestei valori face ca Serviciul să fie accesibil doar din cadrul clusterului. Aceasta este valoarea implicită ServiceType
.
- NodePort: Expune Serviciul pe IP-ul fiecărui Nod la un port static (the
NodePort
). A ClusterIP
Serviciul, la care NodePort
Rute de serviciu, este creat automat. Veți putea contacta NodePort
Service, din afara clusterului, prin solicitare <NodeIP>:<NodePort>
.
- Echilibrarea greutății: Expune Serviciul în exterior utilizând echilibrul de încărcare al unui furnizor de cloud.
NodePort
și ClusterIP
Serviciile către care se îndreaptă echilibrul de încărcare extern sunt create automat.
- ExternalName: Mapează Serviciul la conținutul
externalName
domeniu (de ex. foo.bar.example.com
), prin returnarea a CNAME
înregistrarea cu valoarea sa. Nu este configurată niciun fel de proxy.
-- Kubernetes.io: Documente: Concepte: Servicii de rețea: Serviciu: Tipuri de servicii de servicii de publicare
Documentația specifică expunerii aplicațiilor pe Google Kubernetes Engine
poate fi gasit aici:
Concentrându-ne în mod specific pe unele dintre punctele incluse în întrebare:
Pot folosi un serviciu NodePort și pot pierde controlul asupra portului la care trebuie să se conecteze clientul. Aceasta este o problemă deoarece serverul se înregistrează pe o listă de servere.
Puteți specifica NodePort
port în Serviciu
YAML (cum ar fi nodePort: 32137
sau nodePort: 30911
).
Puteți configura aplicația pentru a asculta pe același port ca nodePort
:
- Aplicația este ascultată pe port
30000
- Serviciul folosește un
nodePort
cu port
:30000
(clientul/utilizatorul ar trebui să se conecteze la acest port) și targetPort:30000
. În acest caz, nu ar exista modificări de port.
O notă secundară!
În mod implicit, nodePort
intervalul de porturi este blocat de GCP
Firewall. Va trebui să creați o regulă (sau un set de reguli) care să permită acest lucru.
Pot folosi rețelele gazdă. Dacă informațiile mele sunt corecte, asta necesită containere privilegiate, ceea ce cu siguranță nu este bine.
Aș sfătui să nu folosiți containere privilegiate dacă nu există un motiv întemeiat în spate. Citând documentația oficială:
Politica Privilegiată este deschisă intenționat și complet nerestricționată. Acest tip de politică vizează, de obicei, sarcinile de lucru la nivel de sistem și infrastructură gestionate de utilizatori privilegiați și de încredere.
-- Kubernetes.io: Documente: Concepte: Securitate: Standard de securitate pentru pod: Privilegiat
Portul poate fi configurat, atâta timp cât știu pe ce port trebuie să ruleze serverul înainte ca podul să pornească.
Cum vei avea o multitudine de single Păstăi
(fiecare cu câte un Implementare
) ai putea parametriza fiecare dintre ele. Ceea ce vreau să spun este că poți crea un șablon și modifica doar părțile manifestelor tale (cum ar fi porturile, variabilele env etc.).
Puteți trece variabila de mediu către dvs Pod
astfel încât să poată fi folosit ca parametru în comenzile dvs. De asemenea, puteți modifica comanda pe care Pod
începe cu