Відповідь, подана вище @Manikanta P, є правильною. Однак пояснення "Порту" може бути трохи незрозумілим на першому читанні. Я поясню на прикладі:
Розглянемо веб-додаток з його статичним вмістом (титульна сторінка, зображення тощо), розміщеним httpd, та динамічним контентом (наприклад, відповіді на запити тощо), розміщеним Tomcat. Веб-сервер (або статичний контент) обслуговується httpd у порту, 80
тоді як Appserver (або динамічний контент) обслуговується tomcat в порту 8080
.
Що хоче розробник: Користувач повинен мати доступ до веб-сервера ззовні, АЛЕ не Appserver ззовні.
Рішення: Тип сервісу веб-сервера в його service.yml буде NodePort, тоді як тип служби Appserver у його service.yml буде ClusterIP.
Код служби service.yml:
spec:
selector:
app: Webserver
type: NodePort // written to make this service accessible from outside.
ports:
- nodePort: 30475 // To access from outside, type <host_IP>:30475 in browser.
port: 5050 // (ignore for now, I will explain below).
protocol: TCP
targetPort: 80 // port where httpd runs inside the webserver pod.
Код для служби Appserver.yml
spec:
selector:
app: appserver
type: ClusterIP // written to make this service NOT accessible from outside.
ports:
- port: 5050 // port to access this container internally
protocol: TCP
targetPort: 8080 // port where tomcat runs inside the appserver pod.
Також зверніть увагу, що у httpd.conf
файл веб-сервера ми запишемо IP, який перенаправляє запит користувача на додаток. Цей IP буде: host_IP:5050
.
Що саме тут відбувається? Користувач пише hostIP:30475
і бачить сторінку веб-сервера. Це тому, що його обслуговує httpd у порту 80
(targetport). Коли користувач натискає кнопку, робиться запит. Цей запит переспрямовується на Appserver, оскільки у httpd.conf
файлі 5050
згадується порт , і це порт, де контейнер Appserver і контейнер контейнера Webserver внутрішньо спілкуються. Коли додаток отримує запит, він може обслуговувати його через Tomcat, що працює в ньому в порту 8080
.