Сервис
Документация по концепции Service
-
Предоставьте приложению, работающему в кластере, единую внешнюю точку доступа, даже если рабочая нагрузка распределена между несколькими серверными компонентами.
apiVersion: v1
import "k8s.io/api/core/v1"
Service
Сервис — это именованная абстракция программного сервиса (например, mysql), состоящая из локального порта (например, 3306), который прослушивает прокси, и селектора, определяющего, какие поды будут отвечать на запросы, отправленные через прокси.
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
kindstring |
Kind — строковое значение, представляющее ресурс REST, который описывает этот объект. Серверы могут определить его по конечной точке, на которую клиент отправляет запросы. Не может быть обновлено. В CamelCase. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataObjectMeta |
Стандартные метаданные объекта. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata |
specServiceSpec |
Spec определяет поведение сервиса. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status |
statusServiceStatus |
Последнее наблюдавшееся состояние сервиса. Заполняется системой. Доступно только для чтения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status |
ServiceSpec
ServiceSpec описывает атрибуты, которые пользователь задаёт для сервиса.
| Поле | Описание |
|---|---|
allocateLoadBalancerNodePortsboolean |
allocateLoadBalancerNodePorts определяет, будут ли автоматически выделяться NodePorts для сервисов типа LoadBalancer. Значение по умолчанию — "true". Можно задать значение "false", если балансировщик нагрузки кластера не использует NodePorts. Если вызывающий объект запрашивает определённые NodePorts (указывая значение), эти запросы будут выполнены независимо от этого поля. Это поле можно задавать только для сервисов типа LoadBalancer; оно будет очищено, если тип изменится на любой другой. |
clusterIPstring |
clusterIP — IP-адрес сервиса, который обычно назначается случайным образом. Если адрес задан вручную, находится в допустимом диапазоне (согласно конфигурации системы) и не используется, он будет выделен сервису; в противном случае создание сервиса завершится ошибкой. Это поле нельзя изменить при обновлении, кроме случаев, когда поле type также изменяется на ExternalName (для которого это поле должно быть пустым) или изменяется с ExternalName (в этом случае это поле можно указать по желанию, как описано выше). Допустимые значения: "None", пустая строка ("") или действительный IP-адрес. Значение "None" создаёт «сервис без IP-адреса» (без виртуального IP), что полезно, когда предпочтительны прямые подключения к конечным точкам и проксирование не требуется. Применяется только к типам ClusterIP, NodePort и LoadBalancer. Если это поле указано при создании сервиса типа ExternalName, создание завершится ошибкой. При обновлении сервиса до типа ExternalName это поле будет очищено. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies |
clusterIPsstring array |
ClusterIPs — список IP-адресов, назначенных этому сервису; обычно они назначаются случайным образом. Если адрес задан вручную, находится в допустимом диапазоне (согласно конфигурации системы) и не используется, он будет выделен сервису; в противном случае создание сервиса завершится ошибкой. Это поле нельзя изменить при обновлении, кроме случаев, когда поле type также изменяется на ExternalName (для которого это поле должно быть пустым) или изменяется с ExternalName (в этом случае это поле можно указать по желанию, как описано выше). Допустимые значения: "None", пустая строка ("") или действительный IP-адрес. Значение "None" создаёт «сервис без IP-адреса» (без виртуального IP), что полезно, когда предпочтительны прямые подключения к конечным точкам и проксирование не требуется. Применяется только к типам ClusterIP, NodePort и LoadBalancer. Если это поле указано при создании сервиса типа ExternalName, создание завершится ошибкой. При обновлении сервиса до типа ExternalName это поле будет очищено. Если это поле не указано, оно будет инициализировано значением поля clusterIP. Если это поле указано, клиенты должны гарантировать, что clusterIPs[0] и clusterIP имеют одинаковое значение. Это поле может содержать не более двух элементов (IP-адреса для двух стеков в любом порядке). Эти IP-адреса должны соответствовать значениям поля ipFamilies. Поля clusterIPs и ipFamilies управляются полем ipFamilyPolicy. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies |
externalIPsstring array |
externalIPs — список IP-адресов, для которых узлы кластера также будут принимать трафик этого сервиса. Kubernetes не управляет этими IP-адресами. Пользователь отвечает за то, чтобы трафик поступал на узел с этим IP-адресом. Типичный пример — внешние балансировщики нагрузки, не являющиеся частью системы Kubernetes. |
externalNamestring |
externalName — внешняя ссылка, которую механизмы обнаружения будут возвращать как псевдоним этого сервиса (например, запись DNS CNAME). Проксирование не выполняется. Имя должно быть в нижнем регистре и соответствовать RFC-1123 (https://tools.ietf.org/html/rfc1123); для этого поля требуется, чтобы `type` имел значение "ExternalName". |
externalTrafficPolicystring |
externalTrafficPolicy описывает, как узлы распределяют трафик сервиса, полученный на одном из «внешних» адресов сервиса (NodePorts, ExternalIPs и IP-адресах LoadBalancer). Если задано значение "Local", прокси настроит сервис так, чтобы предполагалось, что внешние балансировщики нагрузки будут распределять трафик сервиса между узлами; поэтому каждый узел будет направлять трафик только к локальным конечным точкам сервиса, не подменяя исходный IP-адрес клиента. (Трафик, ошибочно отправленный на узел без конечных точек, будет отброшен.) Значение по умолчанию "Cluster" использует стандартное поведение — равномерную маршрутизацию ко всем конечным точкам (возможно, с учётом топологии и других возможностей). Обратите внимание: трафик, отправленный на внешний IP-адрес или IP-адрес LoadBalancer изнутри кластера, всегда обрабатывается по правилам "Cluster", однако клиентам, отправляющим запросы на NodePort изнутри кластера, при выборе узла может потребоваться учитывать политику трафика. Возможные значения перечисления: - `"Cluster"` направляет трафик ко всем конечным точкам. - `"Local"` сохраняет исходный IP-адрес трафика, направляя его только к конечным точкам на том же узле, на который он поступил (трафик отбрасывается, если локальных конечных точек нет). |
healthCheckNodePortinteger |
healthCheckNodePort задаёт порт NodePort для проверки работоспособности сервиса. Применяется только тогда, когда type имеет значение LoadBalancer, а externalTrafficPolicy — Local. Если значение указано, находится в допустимом диапазоне и не используется, будет использовано это значение. Если оно не указано, значение будет выделено автоматически. Внешние системы (например, балансировщики нагрузки) могут использовать этот порт, чтобы определить, есть ли на данном узле конечные точки этого сервиса. Если это поле указано при создании сервиса, которому оно не требуется, создание завершится ошибкой. При обновлении сервиса, если это поле больше не требуется (например, при изменении типа), оно будет очищено. Это поле нельзя изменить после установки. |
internalTrafficPolicystring |
InternalTrafficPolicy описывает, как узлы распределяют трафик сервиса, полученный на ClusterIP. Если задано значение "Local", прокси будет исходить из того, что поды должны обращаться только к конечным точкам сервиса на том же узле, что и сам под; если локальных конечных точек нет, трафик будет отброшен. Значение по умолчанию "Cluster" использует стандартное поведение — равномерную маршрутизацию ко всем конечным точкам (возможно, с учётом топологии и других возможностей). Возможные значения перечисления: - `"Cluster"` направляет трафик ко всем конечным точкам. - `"Local"` направляет трафик только к конечным точкам на том же узле, что и клиентский под (трафик отбрасывается, если локальных конечных точек нет). |
ipFamiliesstring array |
IPFamilies — список семейств IP-адресов (например, IPv4, IPv6), назначенных этому сервису. Обычно это поле назначается автоматически на основе конфигурации кластера и поля ipFamilyPolicy. Если поле указано вручную, запрошенное семейство доступно в кластере и это допускается значением ipFamilyPolicy, оно будет использовано; в противном случае создание сервиса завершится ошибкой. Это поле можно изменять при определённых условиях: оно позволяет добавлять или удалять вторичное семейство IP-адресов, но не позволяет менять основное семейство IP-адресов сервиса. Допустимые значения: "IPv4" и "IPv6". Это поле применяется только к сервисам типов ClusterIP, NodePort и LoadBalancer, а также к сервисам без IP-адреса. При обновлении сервиса до типа ExternalName это поле будет очищено. Это поле может содержать не более двух элементов (семейства для двух стеков в любом порядке). Если поле clusterIPs указано, эти семейства должны соответствовать его значениям. Поля clusterIPs и ipFamilies управляются полем ipFamilyPolicy. |
ipFamilyPolicystring |
IPFamilyPolicy представляет запрошенную или необходимую для этого сервиса поддержку двух стеков. Если значение не указано, этому полю будет присвоено значение SingleStack. Сервисы могут быть типа "SingleStack" (одно семейство IP-адресов), "PreferDualStack" (два семейства IP-адресов в кластерах с настроенной поддержкой двух стеков или одно семейство в кластерах с одним стеком) или "RequireDualStack" (два семейства IP-адресов в кластерах с настроенной поддержкой двух стеков; в противном случае операция завершится ошибкой). Поля ipFamilies и clusterIPs зависят от значения этого поля. При обновлении сервиса до типа ExternalName это поле будет очищено. Возможные значения перечисления: - `"PreferDualStack"` указывает, что сервис предпочитает использовать два стека, если кластер настроен для работы с двумя стеками. Если кластер не настроен для работы с двумя стеками, сервису будет назначено одно семейство IP-адресов. Если семейство IP-адресов не задано в service.spec.ipFamilies, сервису будет назначено семейство IP-адресов, используемое в кластере по умолчанию - `"RequireDualStack"` указывает, что для сервиса требуется поддержка двух стеков. Использование IPFamilyPolicyRequireDualStack в кластере с одним стеком приведёт к ошибкам проверки. Семейства IP-адресов (и их порядок), назначенные сервису, определяются значением service.spec.ipFamilies. Если service.spec.ipFamilies не указано, семейства назначаются в соответствии с настройками кластера. Если в service.spec.ipFamilies указан только один элемент, apiserver добавит альтернативное семейство IP-адресов - `"SingleStack"` указывает, что для сервиса требуется одно семейство IP-адресов. Назначаемое семейство IP-адресов определяется семейством, используемым в кластере по умолчанию, либо полем service.spec.ipFamilies |
loadBalancerClassstring |
loadBalancerClass — класс реализации балансировщика нагрузки, к которому относится этот сервис. Если значение указано, оно должно быть идентификатором в формате метки с необязательным префиксом, например "internal-vip" или "example.com/internal-vip". Имена без префикса зарезервированы для конечных пользователей. Это поле можно задать только для сервиса типа 'LoadBalancer'. Если оно не задано, используется реализация балансировщика нагрузки по умолчанию; в настоящее время это обычно обеспечивается интеграцией с поставщиком облачных услуг, но такое поведение должно поддерживаться любой реализацией по умолчанию. Если поле задано, предполагается, что реализация балансировщика нагрузки отслеживает сервисы с соответствующим классом. Любая реализация балансировщика нагрузки по умолчанию (например, предоставляемая облачным провайдером) должна игнорировать сервисы, в которых задано это поле. Это поле можно задать только при создании сервиса или его обновлении до типа 'LoadBalancer'. После установки его нельзя изменить. При обновлении сервиса до типа, отличного от 'LoadBalancer', это поле будет очищено. |
loadBalancerIPstring |
Применяется только к типу сервиса LoadBalancer. Эта возможность зависит от того, поддерживает ли базовый поставщик облачных услуг указание loadBalancerIP при создании балансировщика нагрузки. Если поставщик облачных услуг не поддерживает эту возможность, поле будет проигнорировано. Устарело: это поле было недостаточно специфицировано, и его значение различается в разных реализациях. Его использование непереносимо и может не поддерживать два стека. Пользователям рекомендуется использовать аннотации, специфичные для реализации, если они доступны. |
loadBalancerSourceRangesstring array |
Если это поле указано и поддерживается платформой, доступ к трафику через балансировщик нагрузки поставщика облачных услуг будет ограничен указанными IP-адресами клиентов. Если поставщик облачных услуг не поддерживает эту возможность, поле будет проигнорировано. Дополнительная информация: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ |
portsМассив ServicePort стратегия patch: объединение по ключу port
|
Список портов, доступных через этот сервис. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies |
publishNotReadyAddressesboolean |
publishNotReadyAddresses указывает, что любой агент, работающий с конечными точками этого сервиса, должен игнорировать все признаки готовности или неготовности. Основной сценарий использования этого поля — распространение SRV-записей DNS для подов бессетевого сервиса StatefulSet с целью обнаружения узлов. Контроллеры Kubernetes, создающие ресурсы Endpoints и EndpointSlice для сервисов, трактуют это значение так, будто все конечные точки готовы, даже если сами поды не готовы. Агенты, которые используют только конечные точки, созданные Kubernetes в ресурсах Endpoints или EndpointSlice, могут безопасно полагаться на это поведение. |
selectorobject |
Направляет трафик сервиса к подам, метки которых соответствуют ключам и значениям этого селектора. Если поле пустое или отсутствует, предполагается, что конечными точками сервиса управляет внешний процесс, который Kubernetes не будет изменять. Применяется только к типам ClusterIP, NodePort и LoadBalancer. Игнорируется, если type имеет значение ExternalName. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/ |
sessionAffinitystring |
Поддерживаются значения "ClientIP" и "None". Используется для сохранения привязки сеанса. Включает привязку сеанса на основе IP-адреса клиента. Допустимы только значения ClientIP и None. Значение по умолчанию — None. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies Возможные значения перечисления: - `"ClientIP"` — привязка на основе IP-адреса клиента. - `"None"` — привязка сеанса не используется. |
sessionAffinityConfigSessionAffinityConfig |
sessionAffinityConfig содержит настройки привязки сеанса. |
trafficDistributionstring |
TrafficDistribution позволяет задать предпочтения относительно распределения трафика между конечными точками сервиса. Реализации могут использовать это поле как подсказку, но не обязаны гарантировать строгое соблюдение заданных предпочтений. Если поле не задано, реализация применит стратегию маршрутизации по умолчанию. Если задано значение "PreferClose", реализациям следует отдавать предпочтение конечным точкам, расположенным в той же зоне. |
typestring |
type определяет способ предоставления сервиса. По умолчанию используется ClusterIP. Допустимые значения: ExternalName, ClusterIP, NodePort и LoadBalancer. "ClusterIP" выделяет внутренний IP-адрес кластера для балансировки нагрузки между конечными точками. Конечные точки определяются селектором или, если он не указан, создаются вручную с помощью объекта Endpoints или объектов EndpointSlice. Если clusterIP имеет значение "None", виртуальный IP-адрес не выделяется, а конечные точки публикуются как набор конечных точек, а не как виртуальный IP-адрес. "NodePort" расширяет ClusterIP и выделяет порт на каждом узле, который направляет трафик к тем же конечным точкам, что и clusterIP. "LoadBalancer" расширяет NodePort и создаёт внешний балансировщик нагрузки (если он поддерживается текущей облачной средой), который направляет трафик к тем же конечным точкам, что и clusterIP. "ExternalName" задаёт для этого сервиса псевдоним, указывающий на значение externalName. Некоторые другие поля не применяются к сервисам ExternalName. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types Возможные значения перечисления: - `"ClusterIP"` означает, что сервис будет доступен только внутри кластера через IP-адрес кластера. - `"ExternalName"` означает, что сервис содержит только ссылку на внешнее имя, которое kubedns или аналогичная система вернёт в виде записи CNAME; при этом поды не предоставляются и не проксируются. - `"LoadBalancer"` означает, что сервис будет доступен через внешний балансировщик нагрузки (если облачный провайдер его поддерживает) в дополнение к типу 'NodePort'. - `"NodePort"` означает, что сервис будет доступен через один порт на каждом узле в дополнение к типу 'ClusterIP'. |
ServiceStatus
ServiceStatus представляет текущее состояние сервиса.
| Поле | Описание |
|---|---|
conditionsМассив Condition стратегия patch: объединение по ключу type
|
Текущее состояние сервиса |
loadBalancerLoadBalancerStatus |
LoadBalancer содержит текущее состояние балансировщика нагрузки, если он существует. |
ServiceList
ServiceList содержит список сервисов.
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
items *Массив Service |
Список сервисов |
kindstring |
Kind — строковое значение, представляющее ресурс REST, который описывает этот объект. Серверы могут определить его по конечной точке, на которую клиент отправляет запросы. Не может быть обновлено. В CamelCase. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataListMeta |
Стандартные метаданные списка. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
ClientIPConfig
ClientIPConfig представляет настройки привязки сеанса на основе IP-адреса клиента.
| Поле | Описание |
|---|---|
timeoutSecondsinteger |
timeoutSeconds задаёт продолжительность привязки сеанса типа ClientIP в секундах. Если ServiceAffinity == "ClientIP", значение должно быть >0 && \<=86400 (1 день). Значение по умолчанию — 10800 (3 часа). |
LoadBalancerIngress
LoadBalancerIngress представляет состояние точки входа балансировщика нагрузки: трафик, предназначенный для сервиса, должен направляться в точку входа.
| Поле | Описание |
|---|---|
hostnamestring |
Hostname задаётся для точек входа балансировщика нагрузки, основанных на DNS (обычно это балансировщики нагрузки AWS). |
ipstring |
IP задаётся для точек входа балансировщика нагрузки, основанных на IP-адресах (обычно это балансировщики нагрузки GCE или OpenStack). |
ipModestring |
IPMode определяет поведение IP-адреса балансировщика нагрузки. Это поле можно указать только вместе с полем ip. Значение "VIP" означает, что трафик доставляется на узел, а в качестве адреса назначения указаны IP-адрес и порт балансировщика нагрузки. Значение "Proxy" означает, что трафик доставляется на узел или под, а в качестве адреса назначения указываются IP-адрес и порт узла либо IP-адрес и порт пода. Реализации сервисов могут использовать эту информацию для настройки маршрутизации трафика. |
portsМассив PortStatus |
Ports — список записей о портах сервиса. Если поле используется, в нём должна быть запись для каждого порта, определённого в сервисе. |
LoadBalancerStatus
LoadBalancerStatus представляет состояние балансировщика нагрузки.
| Поле | Описание |
|---|---|
ingressМассив LoadBalancerIngress |
Ingress — список точек входа балансировщика нагрузки. Трафик, предназначенный для сервиса, должен направляться в эти точки входа. |
PortStatus
PortStatus представляет состояние ошибки порта сервиса.
| Поле | Описание |
|---|---|
errorstring |
Error предназначено для записи проблемы с портом сервиса. Формат ошибки должен соответствовать следующим правилам: - встроенные значения ошибок должны быть определены в этом файле и использовать имена в CamelCase; - значения ошибок, специфичные для облачного провайдера, должны иметь имена в формате foo.example.com/CamelCase. |
port *integer |
Port — номер порта сервиса, состояние которого записано здесь. |
protocol *string |
Protocol — протокол порта сервиса, состояние которого записано здесь. Поддерживаемые значения: "TCP", "UDP", "SCTP". Возможные значения перечисления: - `"SCTP"` — протокол SCTP. - `"TCP"` — протокол TCP. - `"UDP"` — протокол UDP. |
ServicePort
ServicePort содержит сведения о порте сервиса.
| Поле | Описание |
|---|---|
appProtocolstring |
Протокол приложения для этого порта. Реализации используют это значение как подсказку, чтобы предоставлять расширенные возможности для поддерживаемых ими протоколов. Это поле соответствует стандартному синтаксису меток Kubernetes. Допустимы следующие значения: * Имена протоколов без префикса — зарезервированы для стандартных имён сервисов IANA (согласно RFC-6335 и https://www.iana.org/assignments/service-names). * Имена с префиксами, определённые Kubernetes: * 'kubernetes.io/h2c' — HTTP/2 без шифрования с предварительным знанием протокола, как описано в https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior- * 'kubernetes.io/ws' — WebSocket без шифрования, как описано в https://www.rfc-editor.org/rfc/rfc6455 * 'kubernetes.io/wss' — WebSocket поверх TLS, как описано в https://www.rfc-editor.org/rfc/rfc6455 * Для других протоколов следует использовать имена с префиксами, определяемыми реализацией, например mycompany.com/my-custom-protocol. |
namestring |
Имя этого порта в рамках сервиса. Оно должно соответствовать формату DNS_LABEL. Все порты в ServiceSpec должны иметь уникальные имена. При выборе конечных точек для сервиса это имя должно совпадать со значением поля 'name' в EndpointPort. Необязательное поле, если в сервисе определён только один ServicePort. |
nodePortinteger |
Порт на каждом узле, через который предоставляется этот сервис, если его тип — NodePort или LoadBalancer. Обычно назначается системой. Если значение указано, находится в допустимом диапазоне и не используется, оно будет использовано; в противном случае операция завершится ошибкой. Если значение не указано, порт будет выделен, если он требуется этому сервису. Если это поле указано при создании сервиса, которому оно не требуется, создание завершится ошибкой. При обновлении сервиса, если это поле больше не требуется (например, при изменении типа с NodePort на ClusterIP), оно будет очищено. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport |
port *integer |
Порт, который будет доступен через этот сервис. |
protocolstring |
IP-протокол для этого порта. Поддерживаются значения "TCP", "UDP" и "SCTP". Значение по умолчанию — TCP. Возможные значения перечисления: - `"SCTP"` — протокол SCTP. - `"TCP"` — протокол TCP. - `"UDP"` — протокол UDP. |
targetPort |
Номер или имя порта для доступа к подам, на которые направляет трафик сервис. Номер должен находиться в диапазоне от 1 до 65535. Имя должно соответствовать формату IANA_SVC_NAME. Если указана строка, она будет найдена как именованный порт среди портов контейнеров целевого пода. Если значение не указано, используется значение поля 'port' (отображение тождественно). Это поле игнорируется для сервисов с clusterIP=None; его следует опустить или задать равным полю 'port'. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service |
SessionAffinityConfig
SessionAffinityConfig представляет настройки привязки сеанса.
| Поле | Описание |
|---|---|
clientIPClientIPConfig |
clientIP содержит настройки привязки сеанса на основе IP-адреса клиента. |
© 2026 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2026 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/core/service-v1/