Na várj.. Szerintem kicsit keversz 1-2 dolgot.. Ha expose-olni akarsz valamit, akkor ahhoz kell egy service-t definiálnod, aminek a label selectora az adott deploymentre / POD-ra mutat, majd a service-t kell expose-olnod.. Expose-ra viszont több lehetőség is adott:
- ClusterIP: A cluster CNI pluginja által létrehozott virtuális SDN hálón belülről kapsz egy IP-t és azon keresztül tudod elérni a szolgáltatásod.. Kifelé ezzel nem expose-olsz
- Node Port: Minden Kubernetes worker csinál egy iptables szabályt magának, ami majd aztán a megfelelő irányba forwardolja a bejövő csomagot. Amennyiben a workerek rendelkeznek külsős IP-vel, úgy ezzel a megoldással lényegében kívülről elérhető szolgáltatást kapsz..
- Load Balancer: Egy külsős LB-re bízod a forgalom irányítását, és majd az forwardolja be kívülről az adatot
Az így létrehozott expose fölé tudsz még egy Ingress controller-t definiálni (alapból Nginx Ingress), ami alapból HTTP/HTTPS kapcsolatokat képes Load balance-olni, úgy hogy az eredményt a cluster fő elérési útja fogja majd kiszolgálni (amolyan virtualhost jeleggel).
Tehát ha van egy k8s clustered, amit elérsz a server.mydomain.com-on, akkor az ingress controller ez fölé tud neked felhúzni egy szabályt, ami aztán halgat mondjuk a http://server.mydomain.com/testapp, vagy a http://testapp.server.mydomain.com/ -ra..
Itt egy jó példa arra, hogy ez hogy is áll össze (mi mire mutat): https://medium.com/@dwdraju/how-deployment-service-ingress-are-related-…
Ami viszont fontos: Olyan külsőleg elérhető plusz IP-t nem tud neked adni, amivel már most nem rendelkezel.. Szóval vagy a Kubernetes node-jaid 1ik IP-jére tudod ráaggatni a szolgáltatásod, vagy megelégszel a belsős CNI network-ből kapott IP-vel, az viszont csak belsőleg használható
Edit: Lehet Nginx Ingress-el HTTP/HTTPS-en kívüli expose-t is csinálni, viszont az egy-az-egy kapcsolat lesz, tehát az így expose-olt portot nem tudod elosztani több deployment között, mivel a selector 1 adott service-re fog mindig mutatni (szemben a virtualhost-os mókával, aminél a path vagy a host írja le, hogy melyik service-re kell forwardolni a bejövő adatot.
Egy viszonylag érthető példa: https://gist.github.com/superseb/ba6becd1a5e9c74ca17996aa59bcc67e
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..