Spec-Zone.ru › Kubernetes 1.25

Служба

Служба — это именованная абстракция программной службы (например, mysql), состоящая из локального порта (например, 3306), на котором прокси слушает, и селектора, определяющего, какие под будут отвечать на запросы, отправленные через прокси.

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)

      Порт на каждом узле, на котором эта служба открыта, когда тип 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)

    тип определяет, как открыта служба. По умолчанию 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 описывает, как узлы распределяют трафик сервиса, который они получают по одному из «внешних» адресов сервиса (NodePorts, ExternalIPs и LoadBalancer IP). Если установлено значение "Local", прокси будет настраивать сервис таким образом, что предполагается, что внешние балансировщики будут управлять балансированием трафика сервиса между узлами, и каждый узел будет направлять трафик только на локальные узловые точки сервиса на данном узле, не маскируя IP-адрес клиента. (Трафик, ошибочно отправленный на узел без узловых точек, будет отклонен.) Значение по умолчанию "Cluster" использует стандартное поведение маршрутизации к всем узловым точкам равномерно (возможно, измененное топологией и другими функциями). Обратите внимание, что трафик, отправленный на External IP или LoadBalancer IP изнутри кластера, всегда получит семантику "Cluster", но клиентам, отправляющим на NodePort изнутри кластера, может потребоваться учесть политику трафика при выборе узла.

  • internalTrafficPolicy (строка)

    InternalTrafficPolicy описывает, как узлы распределяют трафик сервиса, который они получают по ClusterIP. Если установлено значение "Local", прокси будет предполагать, что поды хотят взаимодействовать только с узловыми точками сервиса на том же узле, что и под, отклоняя трафик, если локальных узловых точек нет. Значение по умолчанию "Cluster" использует стандартное поведение маршрутизации к всем узловым точкам равномерно (возможно, измененное топологией и другими функциями).

  • healthCheckNodePort (int32)

    healthCheckNodePort указывает healthcheck nodePort для сервиса. Это применимо только тогда, когда тип установлен на LoadBalancer, а externalTrafficPolicy установлен на Local. Если указано значение, оно находится в допустимом диапазоне и не используется, оно будет использоваться. Если не указано, значение будет автоматически выделено. Внешние системы (например, балансировщики нагрузки) могут использовать этот порт, чтобы определить, содержит ли данный узел узловые точки для этого сервиса или нет. Если это поле указано при создании сервиса, которому это не нужно, создание завершится ошибкой. Это поле будет очищено при обновлении сервиса, которому это больше не нужно (например, при изменении типа). Это поле нельзя обновить после задания.

  • publishNotReadyAddresses (булево)

    publishNotReadyAddresses указывает, что любой агент, который имеет дело с узловыми точками для этого сервиса, должен игнорировать любые указания о готовности/неготовности. Основной случай использования этого поля — для сервиса Headless StatefulSet для распространения записей SRV DNS для его Pods для целей обнаружения узлов. Контроллеры Kubernetes, которые генерируют ресурсы Endpoints и EndpointSlice для сервисов, интерпретируют это как означающее, что все узловые точки считаются «готовыми», даже если сами поды не готовы. Агенты, которые потребляют только сгенерированные Kubernetes узловые точки через ресурсы Endpoints или EndpointSlice, могут безопасно предположить это поведение.

  • sessionAffinityConfig (SessionAffinityConfig)

    sessionAffinityConfig содержит конфигурации сессионной аффинити.

    SessionAffinityConfig представляет конфигурации сессионной аффинити.

    • sessionAffinityConfig.clientIP (ClientIPConfig)

      clientIP содержит конфигурации сессионной аффинити на основе Client IP.

      ClientIPConfig представляет конфигурации сессионной аффинити на основе Client IP.

      • sessionAffinityConfig.clientIP.timeoutSeconds (int32)

        timeoutSeconds указывает секунды времени «липкости» сессии типа ClientIP. Значение должно быть >0 && <=86400 (для 1 дня), если ServiceAffinity == "ClientIP". Значение по умолчанию — 10800 (на 3 часа).

  • allocateLoadBalancerNodePorts (булево)

    allocateLoadBalancerNodePorts определяет, будут ли автоматически выделены NodePorts для сервисов типа LoadBalancer. Значение по умолчанию — "true". Оно может быть установлено в "false", если кластерный балансировщик не полагается на NodePorts. Если вызывающая сторона запрашивает определенные NodePorts (указав значение), эти запросы будут учтены, независимо от этого поля. Это поле может быть задано только для сервисов типа LoadBalancer и будет очищено, если тип будет изменён на любой другой.

ServiceStatus

ServiceStatus представляет текущее состояние сервиса.

  • conditions ([]Condition)

    Стратегия патча: слияние по ключу type

    Карта: уникальные значения по ключу type будут сохранены во время слияния

    Текущее состояние сервиса

    Condition содержит подробности для одного аспекта текущего состояния этого ресурса API.

    • conditions.lastTransitionTime (Time), обязательно

      lastTransitionTime — это последнее время, когда состояние условия изменилось с одного статуса на другой. Это должно быть время, когда изменилось основное условие. Если это неизвестно, можно использовать время изменения поля API.

      Time — это оболочка вокруг time.Time, которая поддерживает правильную сериализацию в YAML и JSON. Оболочки предоставляются для многих фабричных методов, которые предлагает пакет времени.

    • 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), обязательно

          Port — это номер порта порта сервиса, состояние которого здесь записывается.

        • 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-25.docs.kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API