Служба
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), required
Порт, который будет экспонирован этим сервисом.
-
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). Нестандартные протоколы должны использовать имена с префиксами, например mycompany.com/my-custom-protocol.
-
-
type (string)
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
-
ipFamilies ([]string)
Атомарный: будет заменен при слиянии
IPFamilies — список семейств IP (например, IPv4, IPv6), назначенных этому сервису. Это поле обычно назначается автоматически на основе конфигурации кластера и поля ipFamilyPolicy. Если это поле указано вручную, запрашиваемое семейство доступно в кластере и ipFamilyPolicy разрешает его, оно будет использовано; в противном случае создание сервиса завершится ошибкой. Это поле условно изменяемое: оно позволяет добавлять или удалять второе семейство IP, но не позволяет изменять основное семейство IP сервиса. Допустимые значения: "IPv4" и "IPv6". Это поле применимо только к сервисам типов ClusterIP, NodePort и LoadBalancer, и не применимо к "бесголовым" сервисам. Это поле будет удалено при обновлении сервиса на тип 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" создает "бесголовый сервис" (без виртуального 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" создает "бесголовый сервис" (без виртуального 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 при создании балансировщика нагрузки. Это поле будет проигнорировано, если поставщик облачных услуг не поддерживает эту функцию. Устаревшее поле: Это поле было недостаточно определено, и его значение различается в разных реализациях, и оно не может поддерживать двойную стековую архитектуру. Начиная с Kubernetes v1.24, пользователям рекомендуется использовать специфичные для реализации аннотации, если они доступны. Это поле может быть удалено в будущей версии API.
-
loadBalancerSourceRanges ([]string)
Если указано и поддерживается платформой, это ограничит трафик через балансировщик нагрузки поставщика облачных услуг до указанных IP-адресов клиентов. Это поле будет проигнорировано, если поставщик облачных услуг не поддерживает эту функцию. Более подробно: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
-
loadBalancerClass (строка)
loadBalancerClass — это класс реализации балансировщика нагрузки, к которому относится данный сервис. Если указано, значение этого поля должно быть идентификатором в стиле метки с необязательным префиксом, например, «internal-vip» или «example.com/internal-vip». Имена без префиксов зарезервированы для конечных пользователей. Это поле может быть установлено только при типе сервиса 'LoadBalancer'. Если не установлено, используется реализация балансировщика по умолчанию, в настоящее время это обычно делается через интеграцию с поставщиком облачных услуг, но должно применяться к любой реализации по умолчанию. Если установлено, предполагается, что реализация балансировщика нагрузки отслеживает сервисы с соответствующим классом. Любая реализация балансировщика по умолчанию (например, поставщики облачных услуг) должна игнорировать сервисы, которые устанавливают это поле. Это поле можно установить только при создании или обновлении сервиса типа 'LoadBalancer'. После установки его нельзя изменить. Это поле будет очищено при обновлении сервиса до типа, отличного от 'LoadBalancer'.
-
externalName (строка)
externalName — это внешняя ссылка, которую механизмы обнаружения вернут как псевдоним для данного сервиса (например, запись DNS CNAME). Никакого проксирования не будет. Должно быть именем хоста в нижнем регистре RFC-1123 (https://tools.ietf.org/html/rfc1123) и требует, чтобы
typeбыло «ExternalName». -
externalTrafficPolicy (строка)
externalTrafficPolicy определяет, хочет ли данный сервис маршрутизировать внешний трафик к узлово-локальным или кластерным конечным точкам. «Local» сохраняет IP-адрес источника клиента и избегает второго перехода для сервисов типа LoadBalancer и Nodeport, но рискует потенциально несбалансированным распространением трафика. «Cluster» скрывает IP-адрес источника клиента и может вызвать второй переход к другому узлу, но должен иметь хорошую общую балансировку нагрузки.
-
internalTrafficPolicy (строка)
InternalTrafficPolicy определяет, должен ли внутренний трафик кластера маршрутизироваться ко всем конечным точкам или только к узлово-локальным конечным точкам. «Cluster» маршрутизирует внутренний трафик к сервису ко всем конечным точкам. «Local» маршрутизирует трафик только к узлово-локальным конечным точкам, трафик отбрасывается, если нет готовых узлово-локальных конечных точек. Значение по умолчанию — «Cluster».
-
healthCheckNodePort (int32)
healthCheckNodePort указывает nodePort для проверки работоспособности сервиса. Это применимо только в том случае, если тип установлен в LoadBalancer, а externalTrafficPolicy — в Local. Если значение указано, находится в допустимом диапазоне и не используется, оно будет использоваться. Если не указано, значение будет автоматически выделено. Внешние системы (например, балансировщики нагрузки) могут использовать этот порт, чтобы определить, содержит ли данный узел конечные точки для данного сервиса или нет. Если это поле указано при создании сервиса, которому оно не нужно, создание завершится ошибкой. Это поле будет очищено при обновлении сервиса до состояния, в котором оно больше не нужно (например, изменение типа).
-
publishNotReadyAddresses (boolean)
publishNotReadyAddresses указывает, что любой агент, который работает с конечными точками данного сервиса, должен игнорировать любые указания на готовность/неготовность. Основной сценарий использования для установки этого поля — Headless Service 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 определяет, будут ли автоматически выделены NodePort для сервисов типа LoadBalancer. Значение по умолчанию — «true». Оно может быть установлено в «false», если кластерный балансировщик не полагается на NodePort. Если вызывающий процесс запрашивает определенные NodePort (указав значение), эти запросы будут уважаться, независимо от этого поля. Это поле может быть установлено только для сервисов с типом LoadBalancer и будет очищено, если тип будет изменен на любой другой тип.
ServiceStatus
ServiceStatus представляет собой текущее состояние сервиса.
-
conditions ([]Condition)
Стратегия исправления: слияние по ключу
typeКарта: уникальные значения по ключу type будут сохранены при слиянии
Текущее состояние сервиса
Condition содержит подробности об одном аспекте текущего состояния этого ресурса 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.ports ([]PortStatus)
Атомарно: будет заменено при слиянии
Ports — это список записей портов сервиса. Если используется, каждый порт, определённый в сервисе, должен иметь запись в нём
**
-
loadBalancer.ingress.ports.port (int32), обязательно
Порт — это номер порта сервисного порта, состояние которого здесь записано.
-
loadBalancer.ingress.ports.protocol (строка), обязательно
Protocol — это протокол сервисного порта, состояние которого здесь записано. Поддерживаемые значения: «TCP», «UDP», «SCTP»
-
loadBalancer.ingress.ports.error (строка)
Error — это запись о проблеме с сервисным портом. Формат ошибки должен соответствовать следующим правилам: — встроенные значения ошибок должны быть указаны в этом файле, и они должны использовать CamelCase имена
- ошибки, специфичные для поставщика облачных услуг, должны иметь имена, соответствующие формату foo.example.com/CamelCase.
-
-
-
ServiceList
ServiceList хранит список сервисов.
-
apiVersion: v1
-
kind: ServiceList
-
metadata (ListMeta)
Стандартные данные метаданных списка. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
items ([]Service), обязательно
Список сервисов
© 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2022 The Linux Foundation ®. All rights reserved.
https://v1-24.docs.kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/