Ответ, данный выше @Manikanta P, правильный. Однако при первом чтении объяснение слова «Порт» может показаться немного непонятным. Поясню на примере:
Рассмотрим веб-приложение с его статическим содержимым (первая страница, изображения и т. Д.), Размещенным на httpd, и динамическим содержимым (например, ответ на запросы и т.д.), размещенным на tomcat. Веб-сервер (или статический контент) обслуживается httpd в порту, 80
а сервер приложений (или динамический контент) обслуживается tomcat в порту 8080
.
Чего хочет разработчик: пользователь должен иметь доступ к веб-серверу извне, но не к серверу приложений извне.
Решение. Тип службы веб-сервера в его service.yml будет NodePort, а тип службы сервера приложений в его 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.
Код для сервера приложений service.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). Когда пользователь нажимает кнопку, делается запрос. Этот запрос перенаправляется на сервер приложений, поскольку в httpd.conf
файле 5050
указан порт, и это порт, по которому контейнер сервера приложений и контейнер веб-сервера обмениваются данными внутри. Когда сервер приложений получает запрос, он может обслуживать запрос из-за того, что tomcat работает внутри него в порту 8080
.