Spec-Zone.ru › Kubernetes 1.28

Служба

Служба — это именованная абстракция программной службы (например, 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), 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)

      Порт на каждом узле, на котором этот сервис открыт, когда тип 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 over cleartext, как описано в https://www.rfc-editor.org/rfc/rfc7540
        • 'kubernetes.io/ws' - WebSocket over cleartext, как описано в https://www.rfc-editor.org/rfc/rfc6455
        • 'kubernetes.io/wss' - WebSocket over 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, а также к "головым" сервисам. Это поле будет удалено при обновлении сервиса на тип 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 при создании балансировщика нагрузки. Это поле будет проигнорировано, если облако-провайдер не поддерживает эту функцию. Устаревшее поле: это поле было недостаточно определено, и его значение варьируется в разных реализациях. Его использование не переносимо, и он может не поддерживать двойную стековую адресацию. Пользователям рекомендуется использовать специфичные для реализации аннотации, если они доступны.

  • loadBalancerSourceRanges ([]string)

    Если указано и поддерживается платформой, это ограничит трафик через балансировщик облачной платформы только указанными IP-адресами клиентов. Это поле будет проигнорировано, если облачная платформа не поддерживает эту функцию. Дополнительная информация: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

  • loadBalancerClass (string)

    loadBalancerClass — это класс реализации балансировщика нагрузки, к которому относится этот Service. Если указано, значение этого поля должно быть идентификатором в стиле метки, с необязательным префиксом, например, "internal-vip" или "example.com/internal-vip". Непрефиксные имена зарезервированы для конечных пользователей. Это поле может быть установлено только при типе Service 'LoadBalancer'. Если не указано, используется реализация балансировщика нагрузки по умолчанию, в настоящее время это обычно делается через интеграцию с облачной платформой, но должно применяться ко всем реализациям по умолчанию. Если указано, предполагается, что реализация балансировщика нагрузки отслеживает Service с соответствующим классом. Любая реализация балансировщика нагрузки по умолчанию (например, облачные поставщики) должна игнорировать Service, в которых это поле установлено. Это поле может быть установлено только при создании или обновлении Service до типа 'LoadBalancer'. После установки его нельзя изменить. Это поле будет удалено при обновлении сервиса на тип, не являющийся 'LoadBalancer'.

  • externalName (string)

    externalName — это внешняя ссылка, которую механизмы обнаружения вернут в качестве псевдонима для этого сервиса (например, запись DNS CNAME). Проксирование не будет использоваться. Должно быть именем хоста в нижнем регистре RFC-1123 (https://tools.ietf.org/html/rfc1123) и требует type, чтобы быть "ExternalName".

  • externalTrafficPolicy (string)

    externalTrafficPolicy описывает, как узлы распределяют трафик сервиса, который они получают по одному из "внешне ориентированных" адресов сервиса (NodePort, ExternalIP и IP-адреса LoadBalancer). Если установлено значение "Local", прокси будет настраивать сервис таким образом, чтобы предполагалось, что внешние балансировщики будут отвечать за балансировку трафика сервиса между узлами, и поэтому каждый узел будет передавать трафик только локальным конечным точкам сервиса на этом узле без маскирования IP-адреса источника клиента. (Трафик, ошибочно отправленный узлу без конечных точек, будет отброшен.) Значение по умолчанию, "Cluster", использует стандартное поведение маршрутизации ко всем конечным точкам равномерно (возможно, с модификацией топологией и другими функциями). Обратите внимание, что трафик, отправленный на External IP или IP-адрес LoadBalancer изнутри кластера, всегда получит семантику "Cluster", но клиентам, отправляющим на NodePort изнутри кластера, может потребоваться учитывать политику трафика при выборе узла.

  • internalTrafficPolicy (string)

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

  • healthCheckNodePort (int32)

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

  • publishNotReadyAddresses (boolean)

    publishNotReadyAddresses указывает, что любой агент, который имеет дело с конечными точками для этого сервиса, должен игнорировать любые указания на готовность/неготовность. Основной случай использования этого поля — для Headless Service StatefulSet, чтобы распространить записи DNS SRV для своих Pods в целях обнаружения peer. Контроллеры Kubernetes, которые генерируют ресурсы Endpoints и EndpointSlice для Services, интерпретируют это как указание, что все конечные точки считаются "готовыми", даже если сами Pods не являются таковыми. Агенты, которые потребляют только сгенерированные 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 (boolean)

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

ServiceStatus

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

  • conditions ([]Condition)

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

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

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

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

    • conditions.lastTransitionTime (Time), required

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

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

    • conditions.message (string), required

      message — это удобочитаемое сообщение, указывающее детали о переходе. Это может быть пустая строка.

    • conditions.reason (string), required

      reason содержит программный идентификатор, указывающий причину последнего перехода условия. Производители определенных типов условий могут определять ожидаемые значения и значения для этого поля и того, считаются ли значения гарантированным API. Значение должно быть строкой CamelCase. Это поле не может быть пустым.

    • conditions.status (string), required

      состояние условия, одно из True, False, Unknown.

    • conditions.type (string), required

      тип условия в 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 (string)

        Hostname устанавливается для точек входа балансировщика нагрузки, которые основаны на DNS (обычно балансировщики AWS).

      • loadBalancer.ingress.ip (string)

        IP устанавливается для точек входа балансировщика нагрузки, которые основаны на IP-адресах (обычно GCE или OpenStack балансировщики).

      • loadBalancer.ingress.ipMode (string)

        IPMode указывает, как работает IP-адрес балансировщика нагрузки и может быть указан только при указании поля ip. Установка его в "VIP" указывает, что трафик передается узлу с установленным для балансировщика IP-адресом и портом. Установка его в "Proxy" указывает, что трафик передается узлу или поду с установленным для узла IP-адресом и портом узла или IP-адресом и портом поди. Реализации сервиса могут использовать эту информацию для корректировки маршрутизации трафика.

      • loadBalancer.ingress.ports ([]PortStatus)

        Атомарно: будет заменено во время слияния

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

        **

        • loadBalancer.ingress.ports.port (int32), required

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

        • loadBalancer.ingress.ports.protocol (string), required

          Protocol — это протокол порта сервиса, состояние которого здесь записано. Поддерживаемые значения: "TCP", "UDP", "SCTP".

        • loadBalancer.ingress.ports.error (string)

          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), required

    Список сервисов

© 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2022 The Linux Foundation ®. All rights reserved.
https://v1-28.docs.kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/

Spec-Zone.ru

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