Spec-Zone.ru › Kubernetes 1.27

Служба

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

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

  • internalTrafficPolicy (строка)

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

  • healthCheckNodePort (int32)

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

  • publishNotReadyAddresses (логическое значение)

    publishNotReadyAddresses указывает, что любой агент, который работает с конечными точками для этого сервиса, должен игнорировать любые указания на готовность/неготовность. Основной случай использования для установки этого поля — Headless Service 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. Оболочки предоставляются для многих фабричных методов, которые предлагает пакет 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), требуется

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

Spec-Zone.ru

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