Существует несколько вариантов для предоставления вашей службы за пределами кластера:
Первый вариант - использовать тип NodePort Служба Kubernetes .Таким образом, Сервис откроет порт на сетевом интерфейсе каждого узла в кластере, и весь трафик, поступающий на этот порт, будет перенаправлен на сервис.По умолчанию диапазон портов для этого вида услуг ограничен 30000–32767.
Вот пример конфигурации Service NodePort:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
type: NodePort
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
nodePort: 30080
Второй вариант доступен, если вы работаетеKubernetes кластер в облаках, как AWS, GCP, Azure.Если вы создадите сервис типа LoadBalancer, он создаст новый балансировщик нагрузки в облаке и перенаправит весь трафик из этого балансировщика нагрузки в сервис.Недостатком этого способа является то, что каждая служба создает отдельный балансировщик нагрузки, который будет стоить вам дополнительных денег.
Вот пример конфигурации Service LoadBalancer:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
type: LoadBalancer
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
Третий вариант -использовать объект Ingress .Контроллер Ingress должен работать в кластере для настройки облачной сети в соответствии с содержимым созданного вами объекта Ingress.Ingress может предоставить вам функциональность маршрутизации запросов к различным сервисам в зависимости от имени DNS и пути URI.Вы также можете использовать его в чистом кластере Kubernetes, но в этом случае вы несете ответственность за маршрутизацию сетевого трафика на контроллер Ingress, например, по правилам брандмауэра.
Вот несколько примеров конфигурации Ingress:
# redirect all traffic to a service
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
backend:
serviceName: testsvc
servicePort: 80
# redirect traffic to a service for specified URI path
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /testpath
backend:
serviceName: test
servicePort: 80