Сервис
apiVersion: v1
import "k8s.io/api/core/v1"
Сервис
Сервис — это именованное абстрагирование программной службы (например, mysql), состоящее из локального порта (например, 3306), на котором прокси слушает, и селектора, определяющего, какие под будут отвечать на запросы, отправленные через прокси.
apiVersion: v1
kind: Сервис
-
metadata (ObjectMeta)
Стандартные метаданные объекта. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-
spec (ServiceSpec)
Spec определяет поведение сервиса. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-
status (ServiceStatus)
Наиболее недавно наблюдаемый статус сервиса. Заполняется системой. Только для чтения. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
ServiceSpec
ServiceSpec описывает атрибуты, которые пользователь создаёт для сервиса.
-
selector (map[string]string)
Направляет трафик службы маршрутизации на под с метками ключей и значений, соответствующими этому селектору. Если пусто или отсутствует, предполагается, что служба имеет внешний процесс, управляющий её конечными точками, который Kubernetes не будет изменять. Применяется только к типам ClusterIP, NodePort и LoadBalancer. Игнорируется, если тип ExternalName. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/
-
ports ([]ServicePort)
Стратегия патча: слияние по ключу
portКарта: уникальные значения по ключам
port, protocolбудут сохранены во время слиянияСписок портов, экспонируемых этой службой. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
ServicePort содержит информацию о порте службы.
-
ports.port (int32), обязательное поле
Порт, который будет экспонирован этой службой.
-
ports.targetPort (IntOrString)
Номер или имя порта для доступа к под, на которые нацелена служба. Номер должен быть в диапазоне от 1 до 65535. Имя должно быть IANA_SVC_NAME. Если это строка, она будет интерпретирована как имя порта в портах контейнеров целевого под. Если это не указано, используется значение поля 'port' (отображение по идентификатору). Это поле игнорируется для служб с clusterIP=None и должно быть опущено или равно полю 'port'. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
IntOrString — тип, который может содержать int32 или строку. При использовании в JSON или YAML маршалинге и анмаршалинге он генерирует или потребляет внутренний тип. Это позволяет, например, иметь поле JSON, которое может принимать имя или число.
-
ports.protocol (string)
Протокол IP для этого порта. Поддерживаются "TCP", "UDP" и "SCTP". По умолчанию TCP.
-
ports.name (string)
Имя этого порта в службе. Это должно быть DNS_LABEL. Все порты в ServiceSpec должны иметь уникальные имена. При рассмотрении конечных точек службы это имя должно соответствовать полю 'name' в EndpointPort. Необязательно, если в этой службе определен только один ServicePort.
-
ports.nodePort (int32)
Порт на каждом узле, на котором эта служба экспонирована при type NodePort или LoadBalancer. Обычно назначается системой. Если значение указано, находится в допустимом диапазоне и не используется, оно будет использовано, в противном случае операция завершится с ошибкой. Если не указано, порт будет выделен, если это требуется службе. Если это поле указано при создании службы, которой оно не нужно, создание завершится с ошибкой. Это поле будет удалено при обновлении службы, когда она больше не нуждается в нём (например, при изменении типа с NodePort на ClusterIP). Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
-
ports.appProtocol (string)
Прикладной протокол для этого порта. Используется как подсказка для реализаций, чтобы предложить более богатые возможности для протоколов, которые они понимают. Это поле следует стандартной синтаксике меток 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.
-
-
type (string)
Тип определяет, как экспонирована служба. По умолчанию 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
-
ipFamilies ([]string)
Атомарно: будет заменено во время слияния
IPFamilies — список семейств IP (например, IPv4, IPv6), назначенных этой службе. Это поле обычно назначается автоматически на основе конфигурации кластера и поля ipFamilyPolicy. Если это поле указано вручную, запрашиваемое семейство доступно в кластере и ipFamilyPolicy позволяет это, оно будет использовано; в противном случае создание службы завершится ошибкой. Это поле условно изменяемо: оно позволяет добавлять или удалять второстепенное семейство IP, но не позволяет изменять основное семейство IP службы. Допустимые значения — "IPv4" и "IPv6". Это поле применяется только к службам типов ClusterIP, NodePort и LoadBalancer, и не применяется к "headless" службам. Это поле будет удалено при обновлении службы до типа ExternalName.
Это поле может содержать максимум две записи (семейства двойной стековой адресации в любом порядке). Эти семейства должны соответствовать значениям поля clusterIPs, если оно указано. И clusterIPs, и ipFamilies регулируются полем ipFamilyPolicy.
-
ipFamilyPolicy (string)
IPFamilyPolicy представляет собой двойную стековую адресацию, запрашиваемую или требуемую данной службой. Если значение не указано, это поле будет установлено в SingleStack. Службы могут быть "SingleStack" (одно семейство IP), "PreferDualStack" (два семейства IP в конфигурированных кластерах двойной стековой адресации или одно семейство IP в конфигурированных кластерах одинарной стековой адресации) или "RequireDualStack" (два семейства IP в конфигурированных кластерах двойной стековой адресации, в противном случае произойдёт ошибка). Поля ipFamilies и clusterIPs зависят от значения этого поля. Это поле будет удалено при обновлении службы до типа ExternalName.
-
clusterIP (string)
clusterIP — IP-адрес службы, который обычно назначается случайным образом. Если адрес указан вручную, находится в допустимом диапазоне (согласно конфигурации системы) и не используется, он будет выделен службе; в противном случае создание службы завершится ошибкой. Это поле нельзя изменить при обновлениях, если поле type также не изменяется на ExternalName (что требует, чтобы это поле было пустым) или поле type изменяется с ExternalName (в этом случае это поле может быть указано, как описано выше). Допустимые значения: "None", пустая строка ("") или допустимый IP-адрес. Установка в "None" создаёт "headless service" (без виртуального IP), что полезно, когда предпочтительнее прямые соединения с конечными точками и не требуется проксирование. Применяется только к типам ClusterIP, NodePort и LoadBalancer. Если это поле указано при создании службы типа ExternalName, создание завершится ошибкой. Это поле будет удалено при обновлении службы до типа ExternalName. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
-
clusterIPs ([]string)
Атомарно: будет заменено во время слияния
ClusterIPs — список IP-адресов, назначенных этой службе, которые обычно назначаются случайным образом. Если адрес указан вручную, находится в допустимом диапазоне (согласно конфигурации системы) и не используется, он будет выделен службе; в противном случае создание службы завершится ошибкой. Это поле нельзя изменить при обновлениях, если поле type также не изменяется на ExternalName (что требует, чтобы это поле было пустым) или поле type изменяется с ExternalName (в этом случае это поле может быть указано, как описано выше). Допустимые значения: "None", пустая строка ("") или допустимый IP-адрес. Установка в "None" создаёт "headless service" (без виртуального 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
-
externalIPs ([]string)
Атомарно: будет заменено во время слияния
externalIPs — список IP-адресов, для которых узлы в кластере также будут принимать трафик для этой службы. Эти IP-адреса не управляются Kubernetes. Пользователь отвечает за обеспечение того, чтобы трафик поступал на узел с этим IP. Типичный пример — внешние балансировщики, не являющиеся частью системы Kubernetes.
-
sessionAffinity (string)
Поддерживает "ClientIP" и "None". Используется для поддержания сродства сессий. Включает сродство сессий на основе IP-адреса клиента. Должно быть ClientIP или None. По умолчанию None. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
-
loadBalancerIP (string)
Применяется только для типа службы: LoadBalancer. Эта функция зависит от того, поддерживает ли поставщик облачных услуг указание loadBalancerIP при создании балансировщика нагрузки. Это поле будет проигнорировано, если поставщик облачных услуг не поддерживает эту функцию. Устарело: это поле было недостаточно определено, и его значение различается в разных реализациях. Его использование не является переносимым, и оно может не поддерживать двойную адресацию. Пользователям рекомендуется использовать специфичные для реализации аннотации, если они доступны.
-
loadBalancerSourceRanges ([]string)
Атомарно: будет заменено во время слияния
Если указано и поддерживается платформой, это ограничит трафик через балансировщик нагрузки облачного поставщика до указанных IP-адресов клиентов. Это поле будет проигнорировано, если поставщик облачных услуг не поддерживает эту функцию. Дополнительная информация: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
-
loadBalancerClass (string)
loadBalancerClass — это класс реализации балансировщика нагрузки, к которому принадлежит эта служба. Если указано, значение этого поля должно быть идентификатором в стиле метки с необязательным префиксом, например, "internal-vip" или "example.com/internal-vip". Имена без префиксов зарезервированы для конечных пользователей. Это поле может быть задано только при типе службы 'LoadBalancer'. Если оно не задано, используется стандартная реализация балансировщика нагрузки, в настоящее время это обычно делается через интеграцию с облачным провайдером, но должно применяться для любой реализации по умолчанию. Если оно задано, предполагается, что реализация балансировщика нагрузки отслеживает службы с соответствующим классом. Любая реализация балансировщика нагрузки по умолчанию (например, поставщики облачных услуг) должна игнорировать службы, в которых задано это поле. Это поле может быть задано только при создании или обновлении службы типа 'LoadBalancer'. После задания его нельзя изменить. Это поле будет удалено при обновлении службы до типа, отличного от 'LoadBalancer'.
-
externalName (string)
externalName — это внешняя ссылка, которую механизмы обнаружения будут возвращать как псевдоним для этой службы (например, запись DNS CNAME). Проксирование не будет использоваться. Должно быть именем хоста в нижнем регистре RFC-1123 (https://tools.ietf.org/html/rfc1123) и требует, чтобы
typeбыло "ExternalName". -
externalTrafficPolicy (string)
externalTrafficPolicy описывает, как узлы распределяют трафик службы, который они получают по одному из внешних адресов службы (NodePorts, ExternalIPs и LoadBalancer IP). Если установлено значение "Local", прокси будет настраивать службу таким образом, что предполагает, что внешние балансировщики нагрузки будут заботиться о балансировании трафика службы между узлами, и поэтому каждый узел будет направлять трафик только на локальные узловые точки службы, не маскируя IP-адрес источника клиента. (Трафик, ошибочно отправленный узлу без конечных точек, будет отброшен.) Значение по умолчанию "Cluster" использует стандартное поведение маршрутизации ко всем конечным точкам равномерно (возможно, модифицированное топологией и другими функциями). Обратите внимание, что трафик, отправленный на внешний IP-адрес или IP-адрес LoadBalancer изнутри кластера, всегда будет иметь семантику "Cluster", но клиентам, отправляющим на NodePort изнутри кластера, может потребоваться учесть политику трафика при выборе узла.
-
internalTrafficPolicy (string)
InternalTrafficPolicy описывает, как узлы распределяют трафик службы, который они получают по ClusterIP. Если установлено значение "Local", прокси будет предполагать, что поды хотят взаимодействовать только с конечными точками службы на том же узле, что и под, отбрасывая трафик, если локальных конечных точек нет. Значение по умолчанию "Cluster" использует стандартное поведение маршрутизации ко всем конечным точкам равномерно (возможно, модифицированное топологией и другими функциями).
-
healthCheckNodePort (int32)
healthCheckNodePort указывает NodePort проверки состояния для службы. Это применимо только тогда, когда тип установлен на LoadBalancer, а externalTrafficPolicy — на Local. Если значение указано, находится в допустимом диапазоне и не используется, оно будет использовано. Если не указано, значение будет автоматически выделено. Внешние системы (например, балансировщики нагрузки) могут использовать этот порт для определения того, содержит ли данный узел конечные точки для этой службы или нет. Если это поле указано при создании службы, которой оно не нужно, создание завершится с ошибкой. Это поле будет удалено при обновлении службы, когда оно больше не нужно (например, при изменении типа). Это поле нельзя обновить после установки.
-
publishNotReadyAddresses (boolean)
publishNotReadyAddresses указывает, что любой агент, который имеет дело с конечными точками для этой службы, должен игнорировать любые указания на готовность/неготовность. Основной случай использования для задания этого поля — для бестелесной службы StatefulSet для распространения записей DNS SRV для её Pods для целей взаимного обнаружения. Контроллеры Kubernetes, которые генерируют ресурсы Endpoints и EndpointSlice для служб, интерпретируют это как то, что все конечные точки считаются «готовыми», даже если сами Pods не готовы. Агенты, которые потребляют только сгенерированные Kubernetes конечные точки через ресурсы Endpoints или EndpointSlice, могут безопасно предположить это поведение.
-
sessionAffinityConfig (SessionAffinityConfig)
sessionAffinityConfig содержит конфигурации сессионной аффинити.
SessionAffinityConfig представляет конфигурации сессионной аффинити.
-
sessionAffinityConfig.clientIP (ClientIPConfig)
clientIP содержит конфигурации сессионной аффинити на основе IP-адреса клиента.
ClientIPConfig представляет конфигурации сессионной аффинити на основе IP-адреса клиента.
-
sessionAffinityConfig.clientIP.timeoutSeconds (int32)
timeoutSeconds указывает секунды сессионной аффинити типа ClientIP. Значение должно быть >0 && <=86400 (для 1 дня), если ServiceAffinity == "ClientIP". Значение по умолчанию 10800 (для 3 часов).
-
-
-
allocateLoadBalancerNodePorts (boolean)
allocateLoadBalancerNodePorts определяет, будут ли автоматически выделены NodePorts для служб типа LoadBalancer. По умолчанию "true". Может быть установлено в "false", если кластерный балансировщик нагрузки не полагается на NodePorts. Если вызывающий элемент запрашивает конкретные NodePorts (указав значение), эти запросы будут учтены независимо от этого поля. Это поле может быть задано только для служб типа LoadBalancer и будет очищено, если тип будет изменен на любой другой.
-
trafficDistribution (string)
TrafficDistribution предлагает способ выразить предпочтения для того, как трафик распределяется по конечным точкам службы. Реализации могут использовать это поле как подсказку, но не обязаны гарантировать строгое соблюдение. Если поле не задано, реализация применит свою стратегию маршрутизации по умолчанию. Если установлено значение "PreferClose", реализации должны отдавать приоритет конечным точкам, которые топологически близки (например, в той же зоне). Это бета-поле и требует включения функции ServiceTrafficDistribution.
ServiceStatus
ServiceStatus представляет текущее состояние службы.
-
conditions ([]Condition)
Стратегия патчинга: слияние по ключу
typeКарта: уникальные значения по типу ключа будут сохранены во время слияния
Текущее состояние службы
Условие содержит детали одного аспекта текущего состояния этого ресурса API.
-
conditions.lastTransitionTime (Time), требуется
lastTransitionTime — это последнее время, когда условие перешло из одного состояния в другое. Это должно быть время изменения базового условия. Если это неизвестно, допустимо использовать время изменения поля API.
Time — это оболочка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Оболочки предоставляются для многих фабричных методов пакета time.
-
conditions.message (строка), требуется
message — это читаемое человеком сообщение, указывающее детали перехода. Это может быть пустая строка.
-
conditions.reason (строка), требуется
reason содержит программно определяемый идентификатор, указывающий причину последнего перехода условия. Производители конкретных типов условий могут определять ожидаемые значения и их значения для этого поля, а также является ли оно гарантированным API. Значение должно быть строкой с регистром CamelCase. Это поле не может быть пустым.
-
conditions.status (строка), требуется
статус условия, один из True, False, Unknown.
-
conditions.type (строка), требуется
тип условия в формате CamelCase или в формате foo.example.com/CamelCase.
-
conditions.observedGeneration (int64)
observedGeneration представляет .metadata.generation, на основе которой было установлено условие. Например, если .metadata.generation в настоящее время составляет 12, но .status.conditions[x].observedGeneration составляет 9, условие устарело по отношению к текущему состоянию экземпляра.
-
-
loadBalancer (LoadBalancerStatus)
LoadBalancer содержит текущее состояние балансировщика нагрузки, если оно присутствует.
LoadBalancerStatus представляет состояние балансировщика нагрузки.
-
loadBalancer.ingress ([]LoadBalancerIngress)
Атомарно: будет заменено во время слияния
Ingress — это список, содержащий точки входа балансировщика нагрузки. Трафик, предназначенный для службы, должен быть отправлен в эти точки входа.
LoadBalancerIngress представляет собой состояние точки входа балансировщика нагрузки: трафик, предназначенный для службы, должен быть отправлен в точку входа.
-
loadBalancer.ingress.hostname (строка)
Hostname устанавливается для точек входа балансировщика нагрузки, основанных на DNS (обычно балансировщики AWS).
-
loadBalancer.ingress.ip (строка)
IP устанавливается для точек входа балансировщика нагрузки, основанных на IP-адресах (обычно балансировщики GCE или OpenStack).
-
loadBalancer.ingress.ipMode (строка)
IPMode определяет, как ведет себя IP-адрес балансировщика нагрузки, и может быть указан только при указании поля ip. Установка его в значение "VIP" указывает, что трафик направляется на узел с назначенным IP-адресом балансировщика и портом. Установка его в значение "Proxy" указывает, что трафик направляется на узел или pod с назначенным IP-адресом узла и портом узла или IP-адресом pod и портом. Реализации служб могут использовать эту информацию для корректировки маршрутизации трафика.
-
loadBalancer.ingress.ports ([]PortStatus)
Атомарно: будет заменено во время слияния
Ports — это список записей портов службы. Если используется, каждый порт, определенный в службе, должен иметь запись в нем.
**
-
loadBalancer.ingress.ports.port (int32), требуется
Порт — это номер порта порта службы, состояние которого здесь записывается.
-
loadBalancer.ingress.ports.protocol (строка), требуется
Протокол — это протокол порта службы, состояние которого здесь записывается. Поддерживаемые значения: "TCP", "UDP", "SCTP".
-
loadBalancer.ingress.ports.error (строка)
Error — это запись проблемы с портом службы. Формат ошибки должен соответствовать следующим правилам: — встроенные значения ошибок должны быть указаны в этом файле и использовать имена с регистром CamelCase
- ошибки, специфичные для поставщика облачных услуг, должны иметь имена, соответствующие формату foo.example.com/CamelCase.
-
-
-
Список служб
ServiceList содержит список служб.
apiVersion: v1
kind: ServiceList
-
metadata (ListMeta)
Стандартные метаданные списка. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
items ([]Service), требуется
Список служб
© 2024 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2024 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/