Skip to content

Services

andyceo edited this page Jan 26, 2017 · 2 revisions

Сервисы (Services)

Pods в Kubernetes смертны. Они рождаются и когда они умирают, они не воскреснут. ReplicationControllers, в частности, создают и уничтожают Pods динамически (например, при масштабировании вверх или вниз или при выполнении прокатки обновления). Несмотря на то, что каждый Pod получает свой собственный IP-адрес, даже эти IP-адреса нестабильны в течение долгого времени. Это приводит к проблеме: если некоторый набор Pods (назовем их бэкэнд) предоставляет функциональность для других Pods (давайте назовем их Фронтэнд) внутри кластера Kubernetes, как эти фронтэнды обнаружат и отследят, какие бэкэнды есть в этом наборе?

Представляем Сервисы (Services).

Публикация сервисов - типы сервисов

Для некоторых частей приложения (например, фронтенда) вы можете выставить службу на внешний (за пределами вашего кластера) IP-адрес.

Kubernetes ServiceTypes позволяют определить, какой сервис вы хотите. По умолчанию ClusterIP.

Значения ServiceType и их поведение:

  • ClusterIP: выставляет службу на кластерный внутренний IP. Выбор этого значения делает сервис достижимым только изнутри кластера. Это значение поля ServiceType по умолчанию.

  • NodePort: выставляет сервис на IP каждого узла (Node) на статический порт (The NodePort). ClusterIP-сервис, к которому NodePort-сервис будет направлять, создается автоматически. Вы можете связаться с NodePort-сервисом, из-за пределов кластера, запрашивая : .

  • LoadBalancer: выставляет сервис наружу с помощью балансировщика нагрузки от провайдера облачных услуг. NodePort- и ClusterIP-сервисы, к которым внешний балансировщик нагрузки будет направлять, создаются автоматически.

  • ExternalName: переводит сервис к содержимому поля externalName (например, foo.bar.example.com), возвращая CNAME-запись с его значением. Ни один вид проксирование не устанавливается. Это требует kube-dns версии 1.7 или выше.

Тип NodePort

Если вы установите поле type в значение NodePort, мастер Kubernetes выделит порт из диапазона (по умолчанию: 30000-32767), и каждый узел будет проксировать этот порт (один и тот же номер порта на каждом узле) в ваш Сервис. Об этом порте будет сообщено в поле spec.ports[*].nodePort вашего сервиса.

Если вы хотите определенный номер порта, вы можете указать значение в поле nodePort, и система выделит вам этот порт или иначе транзакция API потерпит неудачу (то есть вам необходимо позаботиться о возможных коллизиях портов самостоятельно). Значение должно быть в сконфигурированном диапазоне для портов узлов.

Это дает разработчикам свободу устанавливать свои собственные балансировщики нагрузки, для настройки среды, которые не полностью поддерживаются Kubernetes, или даже просто выставить IP-адреса одного или нескольких узлов напрямую.

Обратите внимание, что этот сервис будет виден и как : порт spec.ports []: spec.ports [] nodePort и spec.clusterIp..

Sidebar is under construction

Clone this wiki locally