Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.
Ресурси Service
- 1: Service
- 2: Endpoints
- 3: EndpointSlice
- 4: Ingress
- 5: IngressClass
1 - Service
apiVersion: v1
import "k8s.io/api/core/v1"
Service
Service — це іменована абстракція служб програмного забезпечення (наприклад, mysql), що складається з локального порту (наприклад, 3306), який прослуховує проксі, і селектора, який визначає, які Podʼи будуть відповідати на запити, надіслані через проксі.
apiVersion: v1
kind: Service
metadata (ObjectMeta)
Стандартні метадані обʼєкта. Детальніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (ServiceSpec)
Специфікація бажаної поведінки Service. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
status (ServiceStatus)
Останній зафіксований статус Service. Заповнюється системою. Тільки для читання. Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
ServiceSpec
ServiceSpec описує атрибути, які користувач створює для служби.
selector (map[string]string)
Направляє трафік до Podʼів з ключами та значеннями міток, які відповідають цьому селектору. Якщо селектор порожній або не вказаний, передбачається, що Service має зовнішній процес, який керує його точками доступу, і Kubernetes не буде їх змінювати. Застосовується лише до типів ClusterIP, NodePort і LoadBalancer. Ігнорується, якщо тип — ExternalName. Більше інформації: https://kubernetes.io/docs/concepts/services-networking/service/
ports ([]ServicePort)
Patch strategy: злиття по ключу
port
Map: унікальні значення за ключами
port, protocol
зберігатимуться під час злиттяСписок портів, які відкриває Service. Більше інформації: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
ServicePort містить інформацію про порт Service.
ports.port (int32), обовʼязково
Порт, який буде відкритий цим Service.
ports.targetPort (IntOrString)
Номер або імʼя порту для доступу до Podʼів, на які спрямовано Service. Номер повинен бути в діапазоні від 1 до 65535. Імʼя повинно бути IANA_SVC_NAME. Якщо це рядок, він буде шукатися як іменований порт у портах контейнера цільового Podʼа. Якщо не вказано, використовується значення поля ʼportʼ (identity map). Це поле ігнорується для Service із 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)
Імʼя цього порту в Service. Воно повинно бути DNS_LABEL. Усі порти в межах ServiceSpec повинні мати унікальні імена. При аналізі точок доступу для Service, вони повинні відповідати полю ʼnameʼ в EndpointPort. Необовʼязкове, якщо визначено лише один ServicePort для цього Service.
ports.nodePort (int32)
Порт на кожному вузлі, на якому цей Service буде доступний, коли тип — NodePort або LoadBalancer. Зазвичай призначається системою. Якщо значення вказано, знаходиться в діапазоні та не використовується, воно буде використано, інакше операція завершиться невдачею. Якщо не вказано, порт буде виділено, якщо Service його потребує. Якщо це поле вказано під час створення Service, яка не потребує його, створення не вдасться. Це поле буде видалено під час оновлення Service, щоб більше не потребувати його (наприклад, змінюючи тип з 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)
Тип визначає, як Service буде відкрито. Стандартне значення — ClusterIP. Допустимі варіанти: ExternalName, ClusterIP, NodePort та LoadBalancer. "ClusterIP" виділяє точкам доступу внутрішню IP-адресу кластера для балансування навантаження. Точки доступу визначаються селектором або, якщо його не вказано, ручним створенням обʼєкта Endpoints або обʼєктів EndpointSlice. Якщо clusterIP має значення "None", жодна віртуальна IP-адреса не виділяється, і точки доступу публікуються як набір точок доступу, а не віртуальна IP-адреса. "NodePort" базується на ClusterIP і виділяє порт на кожному вузлі, який маршрутизується до тих самих точок доступу, що і clusterIP. "LoadBalancer" базується на NodePort і створює зовнішній балансувальник навантаження (якщо підтримується в поточній хмарі), який маршрутизується до тих самих точок доступу, що і clusterIP. "ExternalName" привʼязує цей Service до вказаного externalName. Декілька інших полів не застосовуються до Service ExternalName. Більше інформації: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
ipFamilies ([]string)
Atomic: буде замінено під час злиття
IPFamilies — це список IP-сімейств (наприклад, IPv4, IPv6), призначених цьому Serviceʼу. Це поле зазвичай призначається автоматично на основі конфігурації кластера та поля ipFamilyPolicy. Якщо це поле вказано вручну, запитане сімейство доступне в кластері, і ipFamilyPolicy дозволяє це, воно буде використане; інакше створення Service не вдасться. Це поле змінюється відповідно до умов: дозволяє додавати або видаляти вторинне IP-сімейство, але не дозволяє змінювати первинне IP-сімейство Service. Допустимі значення: "IPv4" і "IPv6". Це поле застосовується лише до Service типів ClusterIP, NodePort та LoadBalancer, і не застосовується до "headless" Service. Це поле буде очищено під час оновлення Service до типу ExternalName.
Це поле може містити максимум два записи (двостекові сімейство, у будь-якому порядку). Ці сімейства повинні відповідати значенням поля clusterIPs, якщо вказано. Поля clusterIPs та ipFamilies керуються полем ipFamilyPolicy.
ipFamilyPolicy (string)
IPFamilyPolicy представляє вимоги до подвійного стека для цього Service. Якщо значення не надано, це поле буде встановлено на SingleStack. Service можуть бути "SingleStack" (одне IP-сімейство), "PreferDualStack" (два IP-сімейства в конфігураціях з подвійним стеком або одне IP-сімейство в конфігураціях з одним стеком) або "RequireDualStack" (два IP-сімейства в конфігураціях з подвійним стеком, інакше буде збій). Поля ipFamilies та clusterIPs залежать від значення цього поля. Це поле буде очищено під час оновлення Service до типу ExternalName.
clusterIP (string)
clusterIP — це IP-адреса Service, яка зазвичай призначається випадковим чином. Якщо адреса вказана вручну, знаходиться в діапазоні (згідно з конфігурацією системи) і не використовується, вона буде виділена Service; інакше створення Service не вдасться. Це поле не може бути змінено через оновлення, якщо тип поля також не змінюється на ExternalName (що вимагає, щоб це поле було порожнім) або тип поля змінюється з ExternalName (у цьому випадку це поле може бути зазначено опціонально, як описано вище). Допустимі значення: "None", порожній рядок (""), або дійсна IP-адреса. Встановлення цього значення в "None" створює "headless service" (без віртуальної IP-адреси), що корисно, коли потрібні прямі зʼєднання з точками доступу, і проксіювання не потрібне. Застосовується лише до типів ClusterIP, NodePort і LoadBalancer. Якщо це поле вказано під час створення Service типу ExternalName, створення не вдасться. Це поле буде очищено під час оновлення Service до типу ExternalName. Більше інформації: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
clusterIPs ([]string)
Atomic: буде замінено під час злиття
ClusterIPs — це список IP-адрес, призначених Service, і зазвичай вони призначаються випадковим чином. Якщо адреса вказана вручну, знаходиться в діапазоні (згідно з конфігурацією системи) і не використовується, вона буде виділена Service; інакше створення Service не вдасться. Це поле не може бути змінено через оновлення, якщо тип поля також не змінюється на ExternalName (що вимагає, щоб це поле було порожнім) або тип поля змінюється з ExternalName (у цьому випадку це поле може бути зазначено опціонально, як описано вище). Допустимі значення: "None", порожній рядок (""), або дійсна IP-адреса. Встановлення цього значення на "None" створює "headless service" (без віртуальної IP-адреси), що корисно, коли потрібні прямі зʼєднання з точками доступу, і проксіювання не потрібно. Застосовується лише до типів ClusterIP, NodePort і LoadBalancer. Якщо це поле вказано під час створення Service типу ExternalName, створення не вдасться. Це поле буде очищено під час оновлення Service до типу 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)
Atomic: буде замінено під час злиття
externalIPs — це список IP-адрес, для яких вузли в кластері також будуть приймати трафік для цього Service. Ці 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)
Застосовується лише до типу Service: LoadBalancer. Ця функція залежить від того, чи підтримує базовий хмарний провайдер вказівку loadBalancerIP під час створення балансувальника навантаження. Це поле буде ігноруватися, якщо постачальник хмари не підтримує цю функцію. Застаріле: це поле було недостатньо описане, і його значення варіюється залежно від реалізацій. Використання його не є переносимим і може не підтримувати подвійний стек. Користувачам рекомендується використовувати анотації специфічні для реалізації, коли це можливо.
loadBalancerSourceRanges ([]string)
Atomic: буде замінено під час злиття
Якщо вказано і підтримується платформою, це обмежить трафік через балансувальник навантаження постачальника хмари до вказаних 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ʼ. Після встановлення його не можна змінити. Це поле буде очищено при оновленні Service до типу, відмінного від ʼLoadBalancerʼ.
externalName (string)
externalName — це зовнішнє посилання, яке механізми виявлення будуть повертати як псевдонім для цього Service (наприклад, запис DNS CNAME). Проксіювання не буде. Повинно бути вказано в нижньому регістрі відповідно до RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) і вимагає
type
бути "ExternalName".externalTrafficPolicy (string)
externalTrafficPolicy описує, як вузли розподіляють трафік, який вони отримують на одній з "зовнішньо спрямованих" адрес Service (NodePorts, ExternalIPs і LoadBalancer IPs). Якщо встановлено значення "Local", проксі налаштує Service так, що передбачається, що зовнішні балансувальники навантаження будуть піклуватися про балансування трафіку Service між вузлами, і тому кожен вузол буде доставляти трафік лише до локальних точок доступу вузла цього Service, не маскуючи IP-адресу джерела клієнта. (Трафік, помилково надісланий на вузол без точок доступу, буде відхилений.) Стандартне значення "Cluster" використовує стандартну поведінку маршрутизації до всіх точок доступу рівномірно (можливо, змінену топологією та іншими функціями). Зверніть увагу, що трафік, надісланий на External IP або LoadBalancer IP зсередини кластера, завжди буде мати семантику "Cluster", але клієнти, які надсилають на NodePort зсередини кластера, можуть враховувати політику трафіку під час вибору вузла.
internalTrafficPolicy (string)
InternalTrafficPolicy описує, як вузли розподіляють трафік, який вони отримують на ClusterIP. Якщо встановлено значення "Local", проксі вважатиме, що Podʼи хочуть спілкуватися лише з точками доступу Service на тому ж вузлі, що й Pod, відхиляючи трафік, якщо немає локальних точок доступу. Стандартне значення "Cluster" використовує стандартну поведінку маршрутизації до всіх точок доступу рівномірно (можливо, змінено топологією та іншими функціями).
healthCheckNodePort (int32)
healthCheckNodePort визначає порт вузла перевірки справності Service. Це застосовується лише при встановленні типу на LoadBalancer і зовнішньому трафіку політики на Local. Якщо вказане значення, знаходиться в діапазоні і не використовується, воно буде використано. Якщо не вказано, значення буде автоматично призначено. Зовнішні системи (наприклад, балансувальники навантаження) можуть використовувати цей порт, щоб визначити, чи містить певний вузол точки доступу для цього Service чи ні. Якщо це поле вказано під час створення Service, яка цього не потребує, створення не вдасться. Це поле буде очищено при оновленні Service, щоб більше не потребувати його (наприклад, зміна типу). Це поле не можна оновити після встановлення.
publishNotReadyAddresses (boolean)
publishNotReadyAddresses вказує, що будь-який агент, який має справу з точками доступу для цього Service, повинен ігнорувати будь-які індикатори готовності/не готовності. Основний випадок використання цього поля — для Headless Service для StatefulSet, щоб поширювати SRV DNS-записи для своїх Podʼів з метою їх виявлення. Контролери Kubernetes, які генерують ресурси Endpoints і EndpointSlice для Service, інтерпретують це як ознаку того, що всі точки доступу вважаються "готовими", навіть якщо самі Podʼи не готові. Агенти, які використовують тільки точки доступу, створені 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 для Service з типом LoadBalancer. Стандартне значення — "true". Його можна встановити у "false", якщо балансувальник навантаження кластера не покладається на NodePorts. Якщо абонент запитує конкретні NodePorts (вказуючи значення), ці запити будуть виконані, незалежно від цього поля. Це поле можна встановити лише для Service з типом LoadBalancer і воно буде очищено, якщо тип буде змінено на будь-який інший тип.
trafficDistribution (string)
TrafficDistribution надає спосіб виразити вподобання щодо того, як розподіляти трафік до точок доступу сервісу. Реалізації можуть використовувати це поле як підказку, але не зобовʼязані суворо дотримуватися вказівок. Якщо поле не встановлене, реалізація застосує свою стандартну стратегію маршрутизації. Якщо встановлено значення "PreferClose", реалізації повинні надавати пріоритет точкам доступу, які топологічно близькі (наприклад, у тій самій зоні). Це бета-поле і потребує ввімкнення функції ServiceTrafficDistribution.
ServiceStatus
ServiceStatus представляє поточний стан Service.
conditions ([]Condition)
Patch strategy: злиття за ключем
type
Map: унікальні значення за ключем type зберігаються під час злиття
Поточний стан Service
Condition містить деталі для одного аспекту поточного стану цього API ресурсу.
conditions.lastTransitionTime (Time), обовʼязково
lastTransitionTime — це останній час, коли стан змінився з одного на інший. Це має бути тоді, коли змінився основний стан. Якщо це невідомо, то можна використати час, коли змінилося поле API.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
conditions.message (string), обовʼязково
message — це повідомлення, зрозуміле людині, яке вказує на деталі про зміну стану. Це може бути порожній рядок.
conditions.reason (string), обовʼязково
reason містить програмний ідентифікатор, який вказує на причину останньоїзміни стану. Виробники специфічних типів станів можуть визначати очікувані значення та значення для цього поля, і чи вважаються значення гарантованим API. Значення має бути рядком у CamelCase. Це поле не може бути порожнім.
conditions.status (string), обовʼязково
статус стану, одне з True, False, Unknown.
conditions.type (string), обовʼязково
тип стану у 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)
Atomic: буде замінено під час злиття
Ingress — це список точок входу для балансувальника навантаження. Трафік, призначений для Service, має надходити до цих точок входу.
LoadBalancerIngress представляє стаnec точки входу балансувальника навантаження: трафік, призначений для Service, має надходити до точки входу.
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" означає, що трафік доставляється до вузла або Pod з встановленим призначенням на IP вузла та порт вузла або на IP Podʼа та порт. Реалізації Service можуть використовувати цю інформацію для налаштування маршрутизації трафіку.
loadBalancer.ingress.ports ([]PortStatus)
Atomic: буде замінено під час злиття
Ports — це список портів Service. Якщо використовується, кожен порт, визначений у Service, повинен мати запис у цьому списку.
loadBalancer.ingress.ports.port (int32), обовʼязково
Port — це номер порту Service, стан якого записаний тут.
loadBalancer.ingress.ports.protocol (string), обовʼязково
Protocol — це протокол порту Service, стан якого записаний тут. Підтримувані значення: "TCP", "UDP", "SCTP".
loadBalancer.ingress.ports.error (string)
Error — це запис проблеми з портом Service. Формат помилки має відповідати наступним правилам:
- значення вбудованих помилок повинні бути визначені у цьому файлі та повинні використовувати CamelCase імена;
- значення помилок, специфічних для хмарних провайдерів, повинні мати імена, які відповідають формату foo.example.com/CamelCase.
ServiceList
ServiceList містить список Serviceʼів.
apiVersion: v1
kind: ServiceList
metadata (ListMeta)
Стандартні метадані списку. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items ([]Service), обовʼязково
Список Serviceʼів
Операції
get
отримати вказаний Service
HTTP запит
GET /api/v1/namespaces/{namespace}/services/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя Service
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (Service): OK
401: Unauthorized
get
отримати статус вказаного Service
HTTP запит
GET /api/v1/namespaces/{namespace}/services/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя Service
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (Service): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу Service
HTTP запит
GET /api/v1/namespaces/{namespace}/services
Параметри
namespace (в шляху): string, обовʼязково
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (ServiceList): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу Service
HTTP запит
GET /api/v1/services
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (ServiceList): OK
401: Unauthorized
create
створення Service
HTTP запит
POST /api/v1/namespaces/{namespace}/services
Параметри
namespace (в шляху): string, обовʼязково
body: Service, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Service): OK
201 (Service): Created
202 (Service): Accepted
401: Unauthorized
update
заміна вказаного Service
HTTP запит
PUT /api/v1/namespaces/{namespace}/services/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя Service
namespace (в шляху): string, обовʼязково
body: Service, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Service): OK
201 (Service): Created
401: Unauthorized
update
заміна статусу вказаного Service
HTTP запит
PUT /api/v1/namespaces/{namespace}/services/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя Service
namespace (в шляху): string, обовʼязково
body: Service, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Service): OK
201 (Service): Created
401: Unauthorized
patch
часткове оновлення вказаного Service
HTTP запит
PATCH /api/v1/namespaces/{namespace}/services/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя Service
namespace (в шляху): string, обовʼязково
body: patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (Service): OK
201 (Service): Created
401: Unauthorized
patch
часткове оновлення статусу вказаного Service
HTTP запит
PATCH /api/v1/namespaces/{namespace}/services/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя Service
namespace (в шляху): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (Service): OK
201 (Service): Created
401: Unauthorized
delete
видалення Service
HTTP запит
DELETE /api/v1/namespaces/{namespace}/services/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя Service
namespace (в шляху): string, обовʼязково
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Service): OK
202 (Service): Accepted
401: Unauthorized
deletecollection
видалити колекцію Service
HTTP запит
DELETE /api/v1/namespaces/{namespace}/services
Параметри
namespace (в шляху): string, обовʼязково
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (ServiceList): OK
401: Unauthorized
2 - Endpoints
apiVersion: v1
import "k8s.io/api/core/v1"
Endpoints
Endpoints — є колекцією точок доступу, що фактично утворюють Service.
Name: "mysvc",
Subsets: [
{
Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
},
{
Addresses: [{"ip": "10.10.3.3"}],
Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
},
]
apiVersion: v1
kind: Endpoints
metadata (ObjectMeta)
Стандартні метадані обʼєкта. Детальніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
subsets ([]EndpointSubset)
Atomic: буде замінено під час злиття
Набір всіх точок доступу є обʼєднанням (union) всіх субнаборів. Адреси розміщуються в субнабори відповідно до IP-адрес, які вони поділяють. Одна адреса з кількома портами, деякі з яких готові, а деякі ні (тому що вони належать різним контейнерам), буде відображатися в різних субнаборах для різних портів. Жодна адреса не зʼявиться одночасно в Addresses і NotReadyAddresses в одному субнаборі. Набори адрес і портів, які складають Service.
EndpointSubset – це група адрес з одним набором портів. Розширений набір точок доступу є декартовим добутком Addresses x Ports. Наприклад, задано:
{ Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] }
Отриманий набір кінцевих точок може виглядати як:
a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], b: [ 10.10.1.1:309, 10.10.2.2:309 ]
subsets.addresses ([]EndpointAddress)
Atomic: буде замінено під час злиття
IP-адреси, які пропонують відповідні порти, позначені як готові. Ці точки доступу повинні вважатися безпечними для використання балансувальниками навантаження та клієнтами.
EndpointAddress — це кортеж, що описує одну IP-адресу.
subsets.addresses.ip (string), обовʼязкове
IP цієї точки доступу. Не може бути loopback (127.0.0.0/8 або ::1), link-local (169.254.0.0/16 або fe80::/10), або link-local multicast (224.0.0.0/24 або ff02::/16).
subsets.addresses.hostname (string)
Імʼя хоста цієї точки доступу
subsets.addresses.nodeName (string)
Необовʼязково: Вузол, на якому знаходиться ця точка доступу. Це може бути використано для визначення точок доступу що є локальними для вузла.
subsets.addresses.targetRef (ObjectReference)
Посилання на обʼєкт, що надає точку доступу.
subsets.notReadyAddresses ([]EndpointAddress)
Atomic: буде замінено під час злиття
IP-адреси, які пропонують відповідні порти, але наразі не позначені як готові, тому що вони ще не завершили запуск, нещодавно не пройшли перевірку готовності або нещодавно не пройшли перевірку на справність.
EndpointAddress — це кортеж, що описує одну IP-адресу.
subsets.notReadyAddresses.ip (string), обовʼязкове
IP цієї точки доступу. Не може бути loopback (127.0.0.0/8 або ::1), link-local (169.254.0.0/16 або fe80::/10), або link-local multicast (224.0.0.0/24 або ff02::/16).
subsets.notReadyAddresses.hostname (string)
Імʼя хоста цієї точки доступу
subsets.notReadyAddresses.nodeName (string)
Необовʼязково: Вузол, на якому знаходиться ця точка доступу. Це може бути використано для визначення точок доступу що є локальними для вузла.
subsets.notReadyAddresses.targetRef (ObjectReference)
Посилання на обʼєкт, що надає точку доступу.
subsets.ports ([]EndpointPort)
Atomic: буде замінено під час злиття
Номери портів, доступні на відповідних IP-адресах.
EndpointPort — це кортеж, що описує один порт.
subsets.ports.port (int32), обовʼязкове
Номер порту точки доступу.
subsets.ports.protocol (string)
IP-протокол для цього порту. Повинен бути UDP, TCP або SCTP. За замовчуванням TCP.
subsets.ports.name (string)
Імʼя цього порту. Це повинно відповідати полю 'name' у відповідному ServicePort. Повинно бути DNS_LABEL. Необовʼязкове, лише якщо визначено один порт.
subsets.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.
EndpointsList
EndpointsList – це список точок доступу.
apiVersion: v1
kind: EndpointsList
metadata (ListMeta)
Стандартні метадані списку. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items ([]Endpoints), обовʼязкове
Список точок доступу.
Операції
get
отримати вказані Endpoints
HTTP запит
GET /api/v1/namespaces/{namespace}/endpoints/{name}
Параметри
name (в шляху): string, обовʼязково
назва Endpoints
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (Endpoints): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу Endpoints
HTTP запит
GET /api/v1/namespaces/{namespace}/endpoints
Параметри
namespace (в шляху): string, обовʼязково
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (EndpointsList): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу Endpoints
HTTP запит
GET /api/v1/endpoints
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (EndpointsList): OK
401: Unauthorized
create
створення Endpoints
HTTP запит
POST /api/v1/namespaces/{namespace}/endpoints
Параметри
namespace (в шляху): string, обовʼязково
body: Endpoints, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Endpoints): OK
201 (Endpoints): Created
202 (Endpoints): Accepted
401: Unauthorized
update
заміна Endpoints
HTTP запит
PUT /api/v1/namespaces/{namespace}/endpoints/{name}
Параметри
name (в шляху): string, обовʼязково
назва Endpoints
namespace (в шляху): string, обовʼязково
body: Endpoints, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Endpoints): OK
201 (Endpoints): Created
401: Unauthorized
patch
часткове оновлення Endpoints
HTTP запит
PATCH /api/v1/namespaces/{namespace}/endpoints/{name}
Параметри
name (в шляху): string, обовʼязково
назва Endpoints
namespace (в шляху): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (Endpoints): OK
201 (Endpoints): Created
401: Unauthorized
delete
видалення Endpoints
HTTP запит
DELETE /api/v1/namespaces/{namespace}/endpoints/{name}
Параметри
name (в шляху): string, обовʼязково
назва Endpoints
namespace (в шляху): string, обовʼязково
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видалити колекцію Endpoints
HTTP запит
DELETE /api/v1/namespaces/{namespace}/endpoints
Параметри
namespace (в шляху): string, обовʼязково
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
3 - EndpointSlice
apiVersion: discovery.k8s.io/v1
import "k8s.io/api/discovery/v1"
EndpointSlice
EndpointSlice представляє підмножину точок доступу, які реалізують сервіс. Для даного сервісу може існувати декілька обʼєктів EndpointSlice, виділених мітками, які необхідно обʼєднати для отримання повного набору кінцевих точок.
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata (ObjectMeta)
Стандартні метадані обʼєкта.
addressType (string), обовʼязково
addressType вказує тип адреси, яку містить цей EndpointSlice. Усі адреси в цьому сегменті повинні бути одного типу. Це поле є незмінним після створення. Наразі підтримуються такі типи адрес:
- IPv4: Представляє адресу IPv4.
- IPv6: Представляє адресу IPv6.
- FQDN: Представляє повне доменне імʼя (Fully Qualified Domain Name).
endpoints ([]Endpoint), обовʼязково
Atomic: буде замінено під час злиття
endpoints — список унікальних точок доступу у цьому зрізі. Кожен зріз може містити максимум 1000 точок доступу.
Точка доступу являє собою окремий логічний “бекенд", що реалізує сервіс.
endpoints.addresses ([]string), обовʼязково
Set: унікальні значення будуть збережені під час злиття
адреси цієї точки доступу. Вміст цього поля інтерпретується згідно з відповідним полем EndpointSlice addressType. Споживачі повинні обробляти різні типи адрес у контексті власних можливостей. Це поле має містити принаймні одну адресу, але не більше 100. Вважається, що всі вони є взаємозамінними, і клієнти можуть використовувати лише перший елемент. Зверніться до: https://issue.k8s.io/106267
endpoints.conditions (EndpointConditions)
conditions містить інформацію про поточний стан точки доступу.
EndpointConditions представляє поточний стано точки доступу.
endpoints.conditions.ready (boolean)
ready вказує на те, що ця точка доступу готова приймати трафік, відповідно до системи, яка керує цією точкою доступу. Нульове значення вказує на невідомий стан. У більшості випадків споживачі повинні інтерпретувати цей невідомий стан як готовий. З міркувань сумісності значення ready ніколи не повинно бути "true" для точок доступу, що завершують роботу, за винятком випадків, коли звичайна поведінка готовності явно перевизначена, наприклад, коли пов'язана служба встановила прапорець publishNotReadyAddresses.
endpoints.conditions.serving (boolean)
serving ідентичний ready, за винятком того, що він встановлюється незалежно від завершального стану точок доступу. Ця умова має бути встановлена в true для точки доступу що має стан ready, яка завершує роботу. Якщо вона дорівнює нулю, споживачі повинні відкладати обслуговування до стану готовності.
endpoints.conditions.terminating (boolean)
terminating вказує на те, що ця точка доступу завершує роботу. Нульове значення вказує на невідомий стан. Споживачі повинні інтерпретувати цей невідомий стан як те, що точка доступу не завершує роботу.
endpoints.deprecatedTopology (map[string]string)
deprecatedTopology містить інформацію про топологію, яка є частиною v1beta1 API. Це поле є застарілим і буде вилучено, коли буде вилучено API v1beta1 (не раніше kubernetes v1.24). Хоча це поле може містити значення, воно не може бути записане через v1 API, і будь-які спроби запису до нього будуть проігноровані. Замість цього інформацію про топологію можна знайти у полях zone та nodeName.
endpoints.hints (EndpointHints)
hints містить інформацію, повʼязану з тим, як слід використовувати точку доступу.
EndpointHints надає підказки, що описують, як слід використовувати точку доступу.
endpoints.hints.forZones ([]ForZone)
Atomic: буде замінено під час злиття
forZones вказує на зону(и), до якої(их) повинна потрапити ця точка доступу, щоб увімкнути топологічно орієнтовану маршрутизацію.
ForZone надає інформацію про те, які зони повинні використовувати цю точку доступу.
endpoints.hints.forZones.name (string), обовʼязково
name — назва зони.
endpoints.hostname (string)
ім'я хосту цієї точки доступу. Це поле може використовуватися споживачами точок доступу, щоб відрізняти їх одна від одної (наприклад, в іменах DNS). Кілька точок доступу, які використовують одне й те саме ім'я хосту, слід вважати взаємозамінними (наприклад, кілька значень A в DNS). Повинні бути малими літерами і проходити перевірку DNS-мітки (RFC 1123).
endpoints.nodeName (string)
nodeName — імʼя вузла, на якому розміщено цю точку доступу. Це може бути використано для визначення локальних для вузла точок доступу.
endpoints.targetRef (ObjectReference)
targetRef — посилання на обʼєкт Kubernetes, який представляє цю точку доступу.
endpoints.zone (string)
зона — назва зони, в якій існує ця точка доступу.
ports ([]EndpointPort)
Atomic: буде замінено під час злиття
ports визначає список мережевих портів, доступних для кожної точки доступу у цьому зрізі. Кожен порт повинен мати унікальну назву. Якщо параметр ports порожній, це означає, що немає визначених портів. Якщо порт визначено зі значенням nil port, це означає "all ports" (всі порти). Кожен зріз може містити максимум 100 портів.
EndpointPort представляє Port, який використовується EndpointSlice
ports.port (int32)
порт — це номер порту точки доступу. Якщо його не вказано, порти не обмежуються і повинні інтерпретуватися в контексті конкретного споживача.
ports.protocol (string)
протокол представляє IP-протокол для цього порту. Має бути UDP, TCP або SCTP. Стандартно використовується TCP.
ports.name (string)
name - імʼя цього порту. Усі порти у фрагменті EndpointSlice повинні мати унікальне імʼя. Якщо EndpointSlice є похідним від сервісу Kubernetes, це імʼя відповідає Service.ports[].name. Імʼя має бути або порожнім рядком, або пройти перевірку DNS_LABEL:
- повинно мати довжину не більше 63 символів.
- має складатися з малих літер та цифр або символу '-'.
- повинно починатися і закінчуватися буквено-цифровим символом. Стандартно - порожній рядок.
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.
EndpointSliceList
EndpointSliceList представляє список зрізів точок доступу
apiVersion: discovery.k8s.io/v1
kind: EndpointSliceList
metadata (ListMeta)
Стандартні метадані списку.
items ([]EndpointSlice), обовʼязково
items — список зрізів точок доступу
Операції
get
отримати вказанний EndpointSlice
HTTP запит
GET /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя EndpointSlice
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (EndpointSlice): OK
401: Unauthorized
list
перелік або перегляд обʼєктів EndpointSlice
HTTP запит
GET /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
Параметри
namespace (в шляху): string, обовʼязково
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (EndpointSliceList): OK
401: Unauthorized
list
перелік або перегляд обʼєктів EndpointSlice
HTTP запит
GET /apis/discovery.k8s.io/v1/endpointslices
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (EndpointSliceList): OK
401: Unauthorized
create
створення EndpointSlice
HTTP запит
POST /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
Параметри
namespace (в шляху): string, обовʼязково
body: EndpointSlice, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (EndpointSlice): OK
201 (EndpointSlice): Created
202 (EndpointSlice): Accepted
401: Unauthorized
update
заміна вказаного EndpointSlice
HTTP запит
PUT /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя EndpointSlice
namespace (в шляху): string, обовʼязково
body: EndpointSlice, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (EndpointSlice): OK
201 (EndpointSlice): Created
401: Unauthorized
patch
часткове оновлення вказаного EndpointSlice
HTTP запит
PATCH /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя EndpointSlice
namespace (в шляху): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (EndpointSlice): OK
201 (EndpointSlice): Created
401: Unauthorized
delete
видалення EndpointSlice
HTTP запит
DELETE /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя EndpointSlice
namespace (в шляху): string, обовʼязково
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції EndpointSlice
HTTP запит
DELETE /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
Параметри
namespace (в шляху): string, обовʼязково
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
4 - Ingress
apiVersion: networking.k8s.io/v1
import "k8s.io/api/networking/v1"
Ingress
Ingress — це набір правил, які дозволяють вхідним зʼєднанням досягати точок доступу, визначених бекендом. Ingress можна налаштувати так, щоб надавати Service зовнішні адреси, балансувати трафік, закінчувати SSL, пропонувати віртуальний хостинг на основі імен тощо.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata (ObjectMeta)
Стандартні метадані обʼєкта. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (IngressSpec)
spec — це бажаний стан Ingress. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
status (IngressStatus)
status — це поточний стан Ingress. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
IngressSpec
IngressSpec описує Ingress, який користувач хоче, щоб існував.
defaultBackend (IngressBackend)
defaultBackend — це бекенд, який повинен обробляти запити, що не відповідають жодному правилу. Якщо правила не вказані, необхідно вказати DefaultBackend. Якщо DefaultBackend не встановлено, обробка запитів, що не відповідають жодному з правил, буде відбуватись на розсуд контролера Ingress.
ingressClassName (string)
ingressClassName — це імʼя ресурсу IngressClass у кластері. Реалізації контролера Ingress використовують це поле для визначення, чи повинні вони обслуговувати цей ресурс Ingress, через транзитивний звʼязок (controller -> IngressClass -> Ingress resource). Хоча анотація
kubernetes.io/ingress.class
(проста константна назва) ніколи не була формально визначена, вона була широко підтримана контролерами Ingress для створення прямого звʼязку між контролером Ingress і ресурсами Ingress. Новостворені ресурси Ingress повинні надавати перевагу використанню цього поля. Однак, попри те, що анотація офіційно застаріла, з міркувань зворотної сумісності контролери Ingress все ще повинні враховувати цю анотацію, якщо вона присутня.rules ([]IngressRule)
Atomic: буде замінено під час злиття
rules — це список правил для хостів, що використовуються для налаштування Ingress. Якщо не вказано або жодне правило не має збігів, весь трафік надсилається на стандартний бекенд.
IngressRule представляє правила, що зіставляють шляхи для зазначеного хосту з відповідними бекенд-сервісами. Вхідні запити спочатку оцінюються на відповідність хосту, а потім перенаправляються до бекенда, асоційованого з відповідним IngressRuleValue.
rules.host (string)
host — це повне доменне імʼя мережевого хосту, як визначено в RFC 3986. Зверніть увагу на такі відхилення від частини "host" в URI, як визначено в RFC 3986:
- IP-адреси не допускаються. Зараз IngressRuleValue може застосовуватися лише до IP-адреси в Spec батьківського Ingress.
- Двокрапка (:) як роздільник не використовується, оскільки порти не допускаються. Зараз порт Ingress неявно визначений як :80 для http і :443 для https.
Обидва ці моменти можуть змінитися в майбутньому. Вхідні запити зіставляються з хостом перед IngressRuleValue. Якщо хост не вказано, Ingress маршрутизує весь трафік на основі зазначеного IngressRuleValue.
host може бути "точним" (precise), доменним імʼям без завершальної крапки мережевого хосту (наприклад, "foo.bar.com"), або "wildcard" (маска), що є доменним імʼям з префіксом у вигляді одного символу маски (наприклад, "*.foo.com"). Символ маски '*' повинен зʼявлятися сам по собі як перша мітка DNS і відповідає лише одній мітці. Ви не можете мати мітку маски саму по собі (наприклад, Host == "*"). Запити будуть зіставлятися з полем Host наступним чином:
- Якщо host є точним, запит відповідає цьому правилу, якщо заголовок http host дорівнює Host.
- Якщо host є маскою, то запит відповідає цьому правилу, якщо заголовок http host дорівнює суфіксу (видаляючи першу мітку) правила маски.
rules.http (HTTPIngressRuleValue)
HTTPIngressRuleValue — це список http-селекторів, що вказують на бекенди. У прикладі: http://<host>/<path>?<searchpart> -> backend, де частини url відповідають RFC 3986, цей ресурс буде використовуватися для зіставлення з усім після останнього '/' і перед першим '?' або '#'.
rules.http.paths ([]HTTPIngressPath), обовʼязкове
Atomic: буде замінено під час злиття
paths — це набір шляхів, що зіставляють запити з бекендами.
HTTPIngressPath асоціює шлях з бекендом. Вхідні URL-адреси, що відповідають шляху, перенаправляються до бекенду.
rules.http.paths.backend (IngressBackend), обовʼязкове
backend визначає повʼязану точку доступу сервісу, до якого буде перенаправлено трафік.
rules.http.paths.pathType (string), обовʼязкове
pathType визначає інтерпретацію зіставлення шляху. PathType може мати одне з таких значень:
- Exact: Точно відповідає URL-шляху.
- Prefix: Збіг базується на префіксі шляху URL, розділеному символом '/'. Збіг перевіряється поелементно за елементами шляху. Елемент шляху — це список міток у шляху, розділених роздільником '/'. Запит вважається відповідністю для шляху p, якщо кожен елемент p є попереднім елементом відповідного елемента в кінцевому шляху запиту. Якщо це не так, то це не збіг (наприклад, /foo/bar має збіг з /foo/bar/baz, але не має з /foo/barbaz).
- ImplementationSpecific: Інтерпретація зіставлення шляху визначається IngressClass. Реалізації можуть трактувати це як окремий PathType або так само як і типи шляхів Prefix або Exact.
Реалізації повинні підтримувати всі типи шляхів.
rules.http.paths.path (string)
path зіставляється зі шляхом вхідного запиту. Зараз він може містити символи, не дозволені в традиційній частині "path" URL, як визначено в RFC 3986. Шляхи повинні починатися з '/' і повинні бути присутніми при використанні PathType зі значенням "Exact" або "Prefix".
tls ([]IngressTLS)
Atomic: буде замінено під час злиття
tls представляє конфігурацію TLS. Зараз Ingress підтримує лише один TLS-порт, 443. Якщо декілька елементів цього списку вказують різні хости, вони будуть мультиплексовані на одному і тому ж порту відповідно до імені хосту, зазначеного через розширення SNI TLS, якщо контролер Ingress, що виконує Ingress, підтримує SNI.
IngressTLS описує транспортний рівень безпеки, повʼязаний з ingress.
tls.hosts ([]string)
Atomic: буде замінено під час злиття
hosts — це список хостів, включених у сертифікат TLS. Значення в цьому списку повинні відповідати іменам, використаним у tlsSecret. Типово відповідає стандартним налаштуванням хосту для контролера балансування навантаження, що виконує цей Ingress, якщо залишено незазначеним.
tls.secretName (string)
secretName — це імʼя Secret, який використовується для завершення TLS-трафіку на порту 443. Поле залишено необовʼязковим, щоб дозволити маршрутизацію TLS на основі лише імені хосту SNI. Якщо хост SNI у слухачі конфліктує з полем "Host" у заголовку, використаному IngressRule, хост SNI використовується для завершення, а значення поля "Host" використовується для маршрутизації.
IngressBackend
IngressBackend описує всі точки доступу для вказаного Service і порту.
resource (TypedLocalObjectReference)
resource — є ObjectRef на інший ресурс Kubernetes у просторі імен обʼєкта Ingress. Якщо вказано resource, не можна вказувати service.Name та service.Port. Це взаємозаперечне налаштування з "Service".
service (IngressServiceBackend)
service — посилається на Service як на бекенд. Це взаємозаперечне налаштування з "Resource".
IngressServiceBackend посилається на Kubernetes Service як на Backend.
service.name (string), обовʼязкове
name — це посилання на сервіс. Сервіс повинен існувати в тому ж просторі імен, що й обʼєкт Ingress.
service.port (ServiceBackendPort)
port вказаного сервіс. Для IngressServiceBackend потрібно вказати імʼя порту або номер порту.
ServiceBackendPort — це порт сервісу, на який посилаються.
service.port.name (string)
name — це імʼя порту на сервісі. Це взаємозаперечне налаштування з "Number".
service.port.number (int32)
number — це числовий номер порту (наприклад, 80) на сервісі. Це взаємозаперечне налаштування з "Name".
IngressStatus
IngressStatus описує поточний стан Ingress.
loadBalancer (IngressLoadBalancerStatus)
loadBalancer містить поточний статус балансувальника навантаження.
IngressLoadBalancerStatus представляє статус балансувальника навантаження.
loadBalancer.ingress ([]IngressLoadBalancerIngress)
Atomic: буде замінено під час злиття
ingress — це список точок входу для балансувальника навантаження.
IngressLoadBalancerIngress представляє статус точки входу балансувальника навантаження.
loadBalancer.ingress.hostname (string)
hostname встановлюється для точок входу балансувальника навантаження, які базуються на DNS.
loadBalancer.ingress.ip (string)
ip встановлюється для точок входу балансувальника навантаження, які базуються на IP.
loadBalancer.ingress.ports ([]IngressPortStatus)
Atomic: буде замінено під час злиття
ports надає інформацію про порти, які відкриті цим балансувальником навантаження.
IngressPortStatus представляє стан помилки порту сервісу.
loadBalancer.ingress.ports.port (int32), обовʼязкове
port — це номер порту точки входу.
loadBalancer.ingress.ports.protocol (string), обовʼязкове
protocol — це протокол порту точки входу. Підтримувані значення: "TCP", "UDP", "SCTP".
loadBalancer.ingress.ports.error (string)
error використовується для запису проблеми з портом сервісу. Формат помилки має відповідати наступним правилам:
- вбудовані значення помилок повинні бути зазначені в цьому файлі та повинні використовувати CamelCase імена;
- значення помилок, специфічні для хмарного провайдера, повинні мати імена, які відповідають формату foo.example.com/CamelCase.
IngressList
IngressList — це колекція Ingress.
items ([]Ingress), обовʼязкове
items — це список Ingress.
apiVersion (string)
APIVersion визначає версійну схему цього представлення обʼєкта. Сервери повинні конвертувати розпізнані схеми до останнього внутрішнього значення і можуть відхилити нерозпізнані значення. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
Kind — це рядкове значення, що представляє REST-ресурс, який представляє цей обʼєкт. Сервери можуть визначити це з точки доступу, до якої клієнт подає запити. Не можна оновлювати. У CamelCase. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata (ListMeta)
Стандартні метадані обʼєкта. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
Операції
get
отримати вказаний Ingress
HTTP запит
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
Параметри
name (в шляху): string, обовʼязковий
назва Ingress
namespace (в шляху): string, обовʼязковий
pretty (в запиті): string
Відповідь
200 (Ingress): OK
401: Unauthorized
get
отримати статус вказаного Ingress
HTTP запит
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status
Параметри
name (в шляху): string, обовʼязковий
назва Ingress
namespace (в шляху): string, обовʼязковий
pretty (в запиті): string
Відповідь
200 (Ingress): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу Ingress
HTTP запит
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses
Параметри
namespace (в шляху): string, обовʼязковий
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (IngressList): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу Ingress
HTTP запит
GET /apis/networking.k8s.io/v1/ingresses
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (IngressList): OK
401: Unauthorized
create
створення Ingress
HTTP запит
POST /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses
Параметри
namespace (в шляху): string, обовʼязковий
body: Ingress, обовʼязковий
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Ingress): OK
201 (Ingress): Created
202 (Ingress): Accepted
401: Unauthorized
update
заміна вказаного Ingress
HTTP запит
PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
Параметри
name (в шляху): string, обовʼязковий
назва Ingress
namespace (в шляху): string, обовʼязковий
body: Ingress, обовʼязковий
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Ingress): OK
201 (Ingress): Created
401: Unauthorized
update
заміна статусу вказаного Ingress
HTTP запит
PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status
Параметри
name (в шляху): string, обовʼязковий
назва Ingress
namespace (в шляху): string, обовʼязковий
body: Ingress, обовʼязковий
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (Ingress): OK
201 (Ingress): Created
401: Unauthorized
patch
часткове оновлення вказаного Ingress
HTTP запит
PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
Параметри
name (в шляху): string, обовʼязковий
назва Ingress
namespace (в шляху): string, обовʼязковий
body: Ingress, обовʼязковий
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (Ingress): OK
201 (Ingress): Created
401: Unauthorized
patch
часткове оновлення статусу вказаного Ingress
HTTP запит
PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status
Параметри
name (в шляху): string, обовʼязковий
назва Ingress
namespace (в шляху): string, обовʼязковий
body: Ingress, обовʼязковий
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (Ingress): OK
201 (Ingress): Created
401: Unauthorized
delete
видалення Ingress
HTTP запит
DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
Параметри
name (в шляху): string, обовʼязковий
назва Ingress
namespace (в шляху): string, обовʼязковий
body: Ingress, обовʼязковий
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції Ingress
HTTP запит
DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses
Параметри
namespace (в шляху): string, обовʼязковий
body: Ingress, обовʼязковий
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
5 - IngressClass
apiVersion: networking.k8s.io/v1
import "k8s.io/api/networking/v1"
IngressClass
IngressClass представляє клас Ingress, на який посилається Ingress Spec. Анотацію ingressclass.kubernetes.io/is-default-class
можна використовувати, щоб вказати, що IngressClass слід вважати стандартним класом. Коли для одного ресурсу IngressClass ця анотація має значення true, новим ресурсам Ingress без вказаного класу буде присвоєно цей клас.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata (ObjectMeta)
Стандартний обʼєкт метаданих. Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (IngressClassSpec)
spec — є бажаним станом IngressClass. Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
IngressClassSpec
IngressClassSpec надає інформацію про клас Ingress.
controller (string)
controller вказує на імʼя контролера, який має обробляти цей клас. Це дозволяє використовувати різні "різновиди", керовані тим самим контролером. Наприклад, для одного імплементованого контролера можуть існувати різні параметри. Це повинно бути вказане як шлях з префіксом домену, не довше ніж 250 символів, наприклад, "acme.io/ingress-controller". Це поле є незмінним.
parameters (IngressClassParametersReference)
parameters це посилання на спеціалізований ресурс, що містить додаткову конфігурацію для контролера. Це необовʼязково, якщо контролер не вимагає додаткових параметрів.
IngressClassParametersReference ідентифікує обʼєкт API. Це може бути використано для вказівки на обʼєкт, що належить кластеру або області простору імен.
parameters.kind (string), обовʼязково
kind це тип ресурсу, на який вказується посилання.
parameters.name (string), обовʼязково
name це імʼя ресурсу, на який вказується посилання.
parameters.apiGroup (string)
apiGroup це група для ресурсу, на який вказується посилання. Якщо apiGroup не вказано, вказаний Kind повинен бути в основній групі API. Для будь-яких інших типів сторонніх ресурсів apiGroup є обовʼязковим.
parameters.namespace (string)
namespace це простір імен для ресурсу, на який вказується посилання. Це поле обовʼязкове, коли scope встановлено на "Namespace", і його не слід встановлювати, коли scope встановлено у "Cluster".
parameters.scope (string)
scope вказує на те, чи відноситься ресурс до кластера або простору імен. Цей параметр може мати значення "Cluster" (типово) або "Namespace".
IngressClassSpec
IngressClassSpec надає інформацію про клас Ingress.
controller (string)
controller вказує на імʼя контролера, який повинен обробляти цей клас. Це дозволяє використовувати різні "різновиди", які контролюються тим самим контролером. Наприклад, у вас можуть бути різні параметри для одного й того ж імплементаційного контролера. Це повинно бути вказано як шлях з префіксом домену довжиною не більше 250 символів, наприклад, "acme.io/ingress-controller". Це поле є незмінним.
parameters (IngressClassParametersReference)
parameters це посилання на власний ресурс, що містить додаткову конфігурацію для контролера. Це необовʼязково, якщо контролер не потребує додаткових параметрів.
IngressClassParametersReference ідентифікує обʼєкт API. Це може бути використано для {#list-list-or-watch-objects-of-kind-ingressclass}вказівки на ресурс, обмежений кластером або простором імен. {#http-request-1}
parameters.kind (string), обовʼязково
kind це тип ресурсу, на який вказується посилання. {#parameters-1}
parameters.name (string), обовʼязково
name це імʼя ресурсу, на який вказується посилання.
parameters.apiGroup (string)
apiGroup це група для ресурсу, на який вказується посилання. Якщо apiGroup не вказано, вказаний Kind повинен належати до основної групи API. Для будь-яких інших типів сторонніх ресурсів apiGroup є обовʼязковим.
parameters.namespace (string)
namespace це простір імен для ресурсу, на який вказується посилання. Це поле є обовʼязковим, коли scope встановлено на "Namespace", і його не слід встановлювати, коли scope встановлено на "Cluster".
parameters.scope (string)
scope вказує, чи це посилання на ресурс, обмежений кластером або простором імен. Це може бути встановлено на "Cluster" (стандартно) або "Namespace".
IngressClassList
IngressClassList є колекцією IngressClasses.
apiVersion: networking.k8s.io/v1
kind: IngressClassList
metadata (ListMeta)
Стандартні метадані списку.
items ([]IngressClass), обовʼязково
items це список IngressClasses.
Операції
get
отримати вказаний IngressClass
HTTP запит
GET /apis/networking.k8s.io/v1/ingressclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя IngressClass
pretty (в запиті): string
Відповідь
200 (IngressClass): ОК
401: Unauthorized
list
перелік або перегляд обʼєктів типу IngressClass
HTTP запит
GET /apis/networking.k8s.io/v1/ingressclasses
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (IngressClassList): ОК
401: Unauthorized
create
створення IngressClass
HTTP запит
POST /apis/networking.k8s.io/v1/ingressclasses
Параметри
body: IngressClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (IngressClass): ОК
201 (IngressClass): Created
202 (IngressClass): Accepted
401: Unauthorized
update
заміна вказаного IngressClass
HTTP запит
PUT /apis/networking.k8s.io/v1/ingressclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя IngressClass
body: IngressClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (IngressClass): ОК
201 (IngressClass): Created
401: Unauthorized
patch
часткове оновлення вказаного IngressClass
HTTP запит
PATCH /apis/networking.k8s.io/v1/ingressclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя IngressClass
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (IngressClass): ОК
201 (IngressClass): Created
401: Unauthorized
delete
видалення IngressClass
HTTP запит
DELETE /apis/networking.k8s.io/v1/ingressclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя IngressClass
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): ОК
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції IngressClass
HTTP запит
DELETE /apis/networking.k8s.io/v1/ingressclasses
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): ОК
401: Unauthorized