Ingress
Kubernetes v1.19 [stable]
Обʼєкт API, який управляє зовнішнім доступом до служб в кластері, зазвичай HTTP.
Ingress може надавати балансування навантаження, розшифровування SSL-трафіку та віртуальний хостинг на основі імен.
Примітка:
Ingress заморожений. Нові функції додаються до Gateway API.Термінологія
Для ясності цей посібник визначає наступні терміни:
- Вузол: Робоча машина в Kubernetes, що є частиною кластера.
- Кластер: Набір вузлів, на яких виконуються контейнеризовані застосунки, керовані Kubernetes. У прикладі та в більшості типових розгортань Kubernetes вузли кластера не є частиною відкритої мережі Інтернет.
- Edge маршрутизатор: Маршрутизатор, який застосовує політику брандмауера для вашого кластера. Це може бути шлюз, керований хмарним постачальником, або фізичний пристрій.
- Кластерна мережа: Набір зʼєднань, логічних або фізичних, які сприяють комунікації в межах кластера згідно з мережевою моделлю Kubernetes.
- Service: Service Kubernetes, що ідентифікує набір Podʼів за допомогою селекторів label. Якщо не вказано інше, припускається, що служби мають віртуальні IP-адреси, які можна маршрутизувати лише в межах кластерної мережі.
Що таке Ingress?
Ingress відкриває маршрути HTTP та HTTPS із зовні кластера до Services всередині кластера. Маршрутизацію трафіку контролюють правила, визначені в ресурсі Ingress.
Ось простий приклад, де Ingress спрямовує весь свій трафік на один Service:Схема. Ingress
Ingress може бути налаштований таким чином, щоб надавати Service зовнішньодоступні URL, балансувати трафік, термінувати SSL/TLS та пропонувати іменований віртуальний хостинг. Контролер Ingress відповідає за виконання Ingress, зазвичай з допомогою балансувальника навантаження, хоча він також може конфігурувати ваш edge маршрутизатор або додаткові фронтенди для допомоги в обробці трафіку.
Ingress не відкриває довільні порти або протоколи. Для експозиції служб, відмінних від HTTP та HTTPS, в Інтернет зазвичай використовується служба типу Service.Type=NodePort або Service.Type=LoadBalancer.
Передумови
Вам потрібно мати контролер Ingress, щоб виконувати Ingress. Лише створення ресурсу Ingress не має ефекту.
Можливо, вам доведеться розгорнути контролер Ingress, такий як ingress-nginx. Ви можете вибрати з-поміж контролерів Ingress.
В ідеалі, всі контролери Ingress повинні відповідати вказаній специфікації. На практиці різні контролери Ingress працюють трошки по-різному.
Примітка:
Переконайтеся, що ви ознайомились з документацією вашого контролера Ingress, щоб зрозуміти його особливості.Ресурс Ingress
Мінімальний приклад ресурсу Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: test
port:
number: 80
Для Ingress необхідні поля apiVersion
, kind
, metadata
та spec
.
Назва обʼєкта Ingress повинна бути дійсним DNS-піддоменом. Для загальної інформації щодо роботи з файлами конфігурації дивіться розгортання застосунків, налаштування контейнерів, управління ресурсами. Ingress часто використовує анотації для налаштування деяких параметрів залежно від контролера Ingress, прикладом чого є анотація для перезапису. Різні контролери Ingress підтримують різні анотації. Ознайомтеся з документацією контролера Ingress, який ви вибрали, щоб дізнатися, які анотації підтримуються.
У специфікації Ingress міститься вся інформація, необхідна для налаштування балансувальника навантаження чи проксі-сервера. Важливою є наявність списку правил, які порівнюються з усіма вхідними запитами. Ресурс Ingress підтримує правила тільки для направлення трафіку HTTP(S).
Якщо ingressClassName
відсутній, має бути визначений типовий клас Ingress.
Є контролери Ingress, які працюють без визначення типового IngressClass
. Наприклад, контролер Ingress-NGINX може бути налаштований за допомогою прапора --watch-ingress-without-class
. З усім тим, рекомендується вказати типовий IngressClass
, як показано нижче.
Правила Ingress
Кожне правило HTTP містить наступну інформацію:
- Необовʼязковий хост. У цьому прикладі хост не вказаний, тому правило застосовується до всього вхідного HTTP-трафіку через вказану IP-адресу. Якщо вказано хост (наприклад, foo.bar.com), правила застосовуються до цього хосту.
- Список шляхів (наприклад,
/testpath
), кожен з яких має повʼязаний бекенд, визначений імʼямservice.name
таservice.port.name
абоservice.port.number
. Як хост, так і шлях повинні відповідати вмісту вхідного запиту, перш ніж балансувальник навантаження направить трафік до зазначеного Service. - Бекенд — це комбінація імені Service та порту, як описано в документації Service або ресурсом бекенду користувача за допомогою CRD. HTTP (та HTTPS) запити до Ingress, які відповідають хосту та шляху правила, надсилаються до вказаного бекенду.
Зазвичай в Ingress контролері налаштований defaultBackend
, який обслуговує будь-які запити, які не відповідають шляху в специфікації.
DefaultBackend
Ingress без правил спрямовує весь трафік до єдиного стандартного бекенду, і .spec.defaultBackend
— це бекенд, який повинен обробляти запити в цьому випадку. Зазвичай defaultBackend
— це опція конфігурації контролера Ingress і не вказується в ресурсах вашого Ingress. Якщо не вказано .spec.rules
, то повинен бути вказаний .spec.defaultBackend
. Якщо defaultBackend
не встановлено, обробка запитів, які не відповідають жодному з правил, буде покладена на контролер ingress (звертайтеся до документації свого контролера Ingress, щоб дізнатися, як він обробляє цей випадок).
Якщо жоден із хостів або шляхів не відповідає HTTP-запиту в обʼєктах Ingress, трафік направляється до вашого стандартного бекенду.
Бекенд Resource
Бекенд Resource
— це ObjectRef на інший ресурс Kubernetes всередині того ж простору імен, що й обʼєкт Ingress. Resource
— є несумісним з Service, перевірка налаштувань виявить помилку, якщо вказані обидва. Звичайне використання для бекенду Resource
— це направлення даних в обʼєкт зберігання зі статичними ресурсами.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-resource-backend
spec:
defaultBackend:
resource:
apiGroup: k8s.example.com
kind: StorageBucket
name: static-assets
rules:
- http:
paths:
- path: /icons
pathType: ImplementationSpecific
backend:
resource:
apiGroup: k8s.example.com
kind: StorageBucket
name: icon-assets
Після створення Ingress вище, ви можете переглянути його за допомогою наступної команди:
kubectl describe ingress ingress-resource-backend
Name: ingress-resource-backend
Namespace: default
Address:
Default backend: APIGroup: k8s.example.com, Kind: StorageBucket, Name: static-assets
Rules:
Host Path Backends
---- ---- --------
*
/icons APIGroup: k8s.example.com, Kind: StorageBucket, Name: icon-assets
Annotations: <none>
Events: <none>
Типи шляхів
Для кожного шляху в Ingress обовʼязково повинен бути відповідний тип шляху. Шляхи, які не включають явний pathType
, не пройдуть валідацію. Існує три типи шляхів, що підтримуються:
ImplementationSpecific
: З цим типом шляху визначення відповідності залежить від IngressClass. Реалізації можуть розглядати це як окремийpathType
або обробляти його так само як типи шляхівPrefix
абоExact
.Exact
: Відповідає URL-шляху точно і з урахуванням регістрів.Prefix
: Відповідає на основі префіксу URL-шляху, розділеному/
. Відповідність визначається з урахуванням регістру і виконується поелементно за кожним елементом шляху. Елемент шляху вказує на список міток у шляху, розділених роздільником/
. Запит відповідає шляху p, якщо кожен p є префіксом елемента p запиту.Примітка:
Якщо останній елемент шляху є підрядком останнього елементу в шляху запиту, це не вважається відповідністю (наприклад:/foo/bar
відповідає/foo/bar/baz
, але не відповідає/foo/barbaz
).
Приклади
Тип | Шлях(и) | Шлях запиту | Відповідає? |
---|---|---|---|
Префікс | / | (всі шляхи) | Так |
Точний | /foo | /foo | Так |
Точний | /foo | /bar | Ні |
Точний | /foo | /foo/ | Ні |
Точний | /foo/ | /foo | Ні |
Префікс | /foo | /foo , /foo/ | Так |
Префікс | /foo/ | /foo , /foo/ | Так |
Префікс | /aaa/bb | /aaa/bbb | Ні |
Префікс | /aaa/bbb | /aaa/bbb | Так |
Префікс | /aaa/bbb/ | /aaa/bbb | Так, ігнорує кінцевий слеш |
Префікс | /aaa/bbb | /aaa/bbb/ | Так, співпадає з кінцевим слешем |
Префікс | /aaa/bbb | /aaa/bbb/ccc | Так, співпадає з підшляхом |
Префікс | /aaa/bbb | /aaa/bbbxyz | Ні, не співпадає з префіксом рядка |
Префікс | / , /aaa | /aaa/ccc | Так, співпадає з префіксом /aaa |
Префікс | / , /aaa , /aaa/bbb | /aaa/bbb | Так, співпадає з префіксом /aaa/bbb |
Префікс | / , /aaa , /aaa/bbb | /ccc | Так, співпадає з префіксом / |
Префікс | /aaa | /ccc | Ні, використовується типовий backend |
Змішаний | /foo (Префікс), /foo (Точний) | /foo | Так, віддає перевагу Точному |
Декілька збігів
У деяких випадках одночасно можуть збігатися кілька шляхів в межах Ingress. У цих випадках перевага буде надаватися спочатку найдовшому збігу шляху. Якщо два шляхи все ще однаково збігаються, перевага буде надаватися шляхам із точним типом шляху перед префіксним типом шляху.
Шаблони імен хостів
Хости можуть бути точними збігами (наприклад, "foo.bar.com
") або містити шаблони (наприклад, "*.foo.com
"). Точні збіги вимагають, щоб заголовок HTTP host
відповідав полю host
. Шаблони вимагають, щоб заголовок HTTP host
був рівним суфіксу правила з символами підстановки.
Хост | Заголовок хоста | Збіг? |
---|---|---|
*.foo.com | bar.foo.com | Збіг на основі спільного суфіксу |
*.foo.com | baz.bar.foo.com | Немає збігу, символ підстановки охоплює лише одну DNS-мітку |
*.foo.com | foo.com | Немає збігу, символ підстановки охоплює лише одну DNS-мітку |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-wildcard-host
spec:
rules:
- host: "foo.bar.com"
http:
paths:
- pathType: Prefix
path: "/bar"
backend:
service:
name: service1
port:
number: 80
- host: "*.foo.com"
http:
paths:
- pathType: Prefix
path: "/foo"
backend:
service:
name: service2
port:
number: 80
Клас Ingress
Ingressʼи можуть бути реалізовані різними контролерами, часто з різною конфігурацією. Кожен Ingress повинен вказати клас — посилання на ресурс IngressClass, який містить додаткову конфігурацію, включаючи імʼя контролера, який повинен реалізувати цей клас.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: example.com/ingress-controller
parameters:
apiGroup: k8s.example.com
kind: IngressParameters
name: external-lb
Поле .spec.parameters
класу IngressClass дозволяє посилатися на інший ресурс, який надає конфігурацію, повʼязану з цим класом IngressClass.
Конкретний тип параметрів для використання залежить від контролера Ingress, який ви вказуєте в полі .spec.controller
IngressClass.
Область застосування IngressClass
Залежно від вашого контролера Ingress, ви можете використовувати параметри, які ви встановлюєте на рівні кластера, або лише для одного простору імен.
Стандартна область застосування параметрів IngressClass — це весь кластер.
Якщо ви встановлюєте поле .spec.parameters
і не встановлюєте .spec.parameters.scope
, або ви встановлюєте .spec.parameters.scope
на Cluster
, тоді IngressClass посилається на ресурс, який є на рівні кластера. kind
(в поєднанні з apiGroup
) параметрів вказує на API на рівні кластера (можливо, власний ресурс), і name
параметрів ідентифікує конкретний ресурс на рівні кластера для цього API.
Наприклад:
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb-1
spec:
controller: example.com/ingress-controller
parameters:
# Параметри для цього IngressClass вказані в ClusterIngressParameter
# (API group k8s.example.net) імені "external-config-1".
# Це визначення вказує Kubernetes шукати ресурс параметрів на рівні кластера.
scope: Cluster
apiGroup: k8s.example.net
kind: ClusterIngressParameter
name: external-config-1
Kubernetes v1.23 [stable]
Якщо ви встановлюєте поле .spec.parameters
і встановлюєте .spec.parameters.scope
на Namespace
, тоді IngressClass посилається на ресурс на рівні простору імен. Ви також повинні встановити поле namespace
в межах .spec.parameters
на простір імен, який містить параметри, які ви хочете використовувати.
kind
(в поєднанні з apiGroup
) параметрів вказує на API на рівні простору імен (наприклад: ConfigMap), і name
параметрів ідентифікує конкретний ресурс у просторі імен, який ви вказали в namespace
.
Параметри на рівні простору імен допомагають оператору кластера делегувати контроль над конфігурацією (наприклад: налаштування балансувальника трафіку, визначення шлюзу API) що використовується для робочого навантаження. Якщо ви використовуєте параметр на рівні кластера, то або:
- команда операторів кластера повинна схвалити зміни іншої команди кожен раз, коли застосовується нова конфігураційна зміна.
- оператор кластера повинен визначити конкретні засоби керування доступом, такі як RBAC ролі та привʼязки, що дозволяють команді застосунків вносити зміни в ресурс параметрів на рівні кластера.
Сам API IngressClass завжди має область застосування на рівні кластера.
Ось приклад IngressClass, який посилається на параметри на рівні простору імен:
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb-2
spec:
controller: example.com/ingress-controller
parameters:
# Параметри для цього IngressClass вказані в IngressParameter
# (API group k8s.example.com) імені "external-config",
# що знаходиться в просторі імен "external-configuration".
scope: Namespace
apiGroup: k8s.example.com
kind: IngressParameter
namespace: external-configuration
name: external-config
Застарілі анотації
Перед тим, як в Kubernetes 1.18 були додані ресурс IngressClass та поле ingressClassName
, класи Ingress вказувалися за допомогою анотації kubernetes.io/ingress.class
в Ingress. Ця анотація ніколи не була формально визначена, але отримала широку підтримку контролерами Ingress.
Нове поле ingressClassName
в Ingress — це заміна для цієї анотації, але не є прямим еквівалентом. Хоча анотація, як правило, використовувалася для посилання на імʼя контролера Ingress, який повинен реалізувати Ingress, поле є посиланням на ресурс IngressClass, який містить додаткову конфігурацію Ingress, включаючи
імʼя контролера Ingress.
Стандартний IngressClass
Ви можете визначити певний IngressClass як стандартний для вашого кластера. Встановлення анотації ingressclass.kubernetes.io/is-default-class
зі значенням true
на ресурсі IngressClass забезпечить те, що новим Ingress буде призначений цей типовий IngressClass, якщо в них не вказано поле ingressClassName
.
Увага:
Якщо у вас є більше одного IngressClass, відзначеного як стандартного для вашого кластера, контролер доступу завадить створенню нових обʼєктів Ingress, в яких не вказано полеingressClassName
. Ви можете вирішити це, забезпечивши, те що в вашому кластері визначено не більше 1 типового IngressClass.Є контролери Ingress, які працюють без визначення типового IngressClass
. Наприклад, контролер Ingress-NGINX може бути налаштований з прапорцем
--watch-ingress-without-class
. Однак рекомендується визначати типовий IngressClass
явно:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
labels:
app.kubernetes.io/component: controller
name: nginx-example
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: k8s.io/ingress-nginx
Типи Ingress
Ingress з підтримкою одного Service
Існують концепції в Kubernetes, що дозволяють вам використовувати один Service (див. альтернативи). Ви також можете зробити це за допомогою Ingress, вказавши стандартний бекенд без правил.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
spec:
defaultBackend:
service:
name: test
port:
number: 80
Якщо ви створите його за допомогою kubectl apply -f
, ви повинні мати можливість переглядати стан доданого Ingress:
kubectl get ingress test-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-ingress external-lb * 203.0.113.123 80 59s
Де 203.0.113.123
— це IP-адреса, яку надав контролер Ingress для виконання цього Ingress.
Примітка:
Для контролерів Ingress та балансувальників навантаження це може тривати хвилину або дві для виділення IP-адреси. Тож ви часто можете побачити, що адреса вказана як<pending>
.Простий розподіл
Конфігурація розподілу дозволяє маршрутизувати трафік з одної IP-адреси до більше ніж одного сервісу, виходячи з HTTP URI, що запитується. Ingress дозволяє зберігати кількість балансувальників на мінімальному рівні. Наприклад, налаштування як:
Схема. Ingress Fan Out
Для цього потрібно мати Ingress, наприклад:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple-fanout-example
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: service1
port:
number: 4200
- path: /bar
pathType: Prefix
backend:
service:
name: service2
port:
number: 8080
Коли ви створюєте Ingress за допомогою kubectl apply -f
:
kubectl describe ingress simple-fanout-example
Name: simple-fanout-example
Namespace: default
Address: 178.91.123.132
Default backend: default-http-backend:80 (10.8.2.3:8080)
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/foo service1:4200 (10.8.0.90:4200)
/bar service2:8080 (10.8.0.91:8080)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 22s loadbalancer-controller default/test
Контролер Ingress надає реалізаційно-специфічний балансувальник що влаштовує Ingress, за умови, що існують сервіси (service1
, service2
). Коли це сталося, ви можете побачити адресу балансувальника в полі Address.
Примітка:
Залежно від контролера Ingress, який ви використовуєте, можливо, вам доведеться створити сервіс default-http-backend Service.Віртуальний хостинг на основі імен
Віртуальні хости на основі імен підтримують маршрутизацію HTTP-трафіку до кількох імен хостів за однією IP-адресою.
Схема. Ingress віртуального хостингу на основі імен
Наступний Ingress вказує балансувальнику направляти запити на основі заголовка Host.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: foo.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: bar.foo.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service2
port:
number: 80
Якщо ви створюєте ресурс Ingress без визначених хостів в правилах, то будь-який вебтрафік на IP-адресу вашого контролера Ingress може відповідати без необхідності в імені заснованому віртуальному хості.
Наприклад, наступний Ingress маршрутизує трафік спрямований для first.bar.com
до service1
, second.bar.com
до service2
, і будь-який трафік, який має заголовок запиту хоста, який не відповідає first.bar.com
і second.bar.com
до service3
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress-no-third-host
spec:
rules:
- host: first.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: second.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service2
port:
number: 80
- http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service3
port:
number: 80
TLS
Ви можете захистити Ingress, вказавши Secret, що містить приватний ключ TLS та сертифікат. Ресурс Ingress підтримує лише один TLS-порт, 443, та передбачає термінування TLS на точці входу (трафік до Service та його Podʼів передається у вигляді звичайного тексту). Якщо розділ конфігурації TLS в Ingress вказує різні хости, вони мультиплексуються на одному порту відповідно до імені хоста, вказаного через розширення TLS з SNI (за умови, що контролер Ingress підтримує SNI). TLS-секрет повинен містити ключі з іменами tls.crt
та tls.key
, які містять сертифікат та приватний ключ для використання TLS. Наприклад:
apiVersion: v1
kind: Secret
metadata:
name: testsecret-tls
namespace: default
data:
tls.crt: base64 encoded cert
tls.key: base64 encoded key
type: kubernetes.io/tls
Посилання на цей секрет в Ingress дозволяє контролеру Ingress захистити канал, що йде від клієнта до балансувальника навантаження за допомогою TLS. Вам потрібно переконатися, що TLS-секрет, який ви створили, містить сертифікат, який містить Common Name (CN), також Fully Qualified Domain Name (FQDN) для https-example.foo.com
.
Примітка:
Майте на увазі, що TLS не працюватиме типове для правил, оскільки сертифікати повинні бути видані для всіх можливих піддоменів. Таким чином,hosts
в розділі tls
повинні явно відповідати host
в розділі rules
.apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- https-example.foo.com
secretName: testsecret-tls
rules:
- host: https-example.foo.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
Примітка:
Є різниця між можливостями TLS, які підтримуються різними Ingress контролерами. Будь ласка, зверніться до документації nginx, GCE, або будь-якого іншого платформозалежного контролера Ingress, щоб зрозуміти, як TLS працює в вашому середовищі.Балансування навантаження
Контролер Ingress створюється з певними параметрами політики балансування навантаження, які він застосовує до всіх Ingress, таких як алгоритм балансування навантаження, схема коефіцієнтів ваги бекенду та інші. Більш розширені концепції балансування навантаження (наприклад, постійні сесії, динамічні коефіцієнти ваги) наразі не експонуються через Ingress. Замість цього ви можете отримати ці функції через балансувальник, що використовується для Service.
Також варто зазначити, що навіть якщо перевірки стану не експоновані безпосередньо через Ingress, існують паралельні концепції в Kubernetes, такі як перевірки готовності, що дозволяють досягти того ж самого результату. Будь ласка, ознайомтеся з документацією конкретного контролера, щоб переглянути, як вони обробляють перевірки стану (наприклад: nginx або GCE).
Оновлення Ingress
Щоб оновити існуючий Ingress і додати новий хост, ви можете відредагувати ресурс таким чином:
kubectl describe ingress test
Name: test
Namespace: default
Address: 178.91.123.132
Default backend: default-http-backend:80 (10.8.2.3:8080)
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/foo service1:80 (10.8.0.90:80)
Annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 35s loadbalancer-controller default/test
kubectl edit ingress test
Це відкриє редактор з поточною конфігурацією у форматі YAML. Змініть її, щоб додати новий хост:
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
service:
name: service1
port:
number: 80
path: /foo
pathType: Prefix
- host: bar.baz.com
http:
paths:
- backend:
service:
name: service2
port:
number: 80
path: /foo
pathType: Prefix
..
Після збереження змін, kubectl
оновлює ресурс у API-сервері, що повідомляє Ingress-контролеру переконфігурувати балансувальник.
Перевірте це:
kubectl describe ingress test
Name: test
Namespace: default
Address: 178.91.123.132
Default backend: default-http-backend:80 (10.8.2.3:8080)
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/foo service1:80 (10.8.0.90:80)
bar.baz.com
/foo service2:80 (10.8.0.91:80)
Annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 45s loadbalancer-controller default/test
Ви можете досягти того самого результату, викликавши kubectl replace -f
із зміненим файлом YAML для Ingress.
Збій у різних зонах доступності
Методи розподілу трафіку між доменами відмови відрізняються між хмарними провайдерами. Будь ласка, перевірте документацію відповідного контролера Ingress для отримання деталей.
Альтернативи
Ви можете використовувати різні способи надання доступу до Service, які безпосередньо не стосуються ресурсу Ingress:
- Використовуйте Service.Type=LoadBalancer
- Використовуйте Service.Type=NodePort
Що далі
- Дізнайтеся про API Ingress
- Дізнайтеся про контролери Ingress
- Налаштуйте Ingress на Minikube з контролером NGINX