Заметки для контроллера объекта ingress Шлюза приложений
Ресурс входящего трафика Kubernetes можно снабдить заметками произвольными парами "ключ-значение". AGIC использует заметки для программных Шлюз приложений функций, которые не настраиваются с помощью YAML Ingress. Заметки входящего трафика применяются ко всем параметрам HTTP, серверным пулам и прослушивателям, производным от ресурса входящего трафика.
Список поддерживаемых заметок
Чтобы быть проанализированным AGIC, ресурс входящего трафика должен быть снабжен заметкамиkubernetes.io/ingress.class: azure/application-gateway
. Только тогда AGIC работает с ресурсом входящего трафика.
Ключ заметки | Тип значения | Значение по умолчанию | Допустимые значения |
---|---|---|---|
appgw.ingress.kubernetes.io/backend-path-prefix | string |
nil |
|
appgw.ingress.kubernetes.io/ssl-redirect | bool |
false |
|
appgw.ingress.kubernetes.io/connection-draining | bool |
false |
|
appgw.ingress.kubernetes.io/connection-draining-timeout | int32 (секунд) |
30 |
|
appgw.ingress.kubernetes.io/cookie-based-affinity | bool |
false |
|
appgw.ingress.kubernetes.io/request-timeout | int32 (секунд) |
30 |
|
appgw.ingress.kubernetes.io/use-private-ip | bool |
false |
|
appgw.ingress.kubernetes.io/backend-protocol | string |
http |
http , https |
appgw.ingress.kubernetes.io/rewrite-rule-set | string |
nil |
Префикс пути к серверной части
Следующая заметка позволяет переписать внутренний путь, указанный в ресурсе входящего трафика, с префиксом, указанным в этой заметке. Он позволяет пользователям предоставлять службы, конечные точки которых отличаются от имен конечных точек, используемых для предоставления службы в ресурсе входящего трафика.
Использование
appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-bkprefix
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
В предыдущем примере вы определили ресурс входящего трафика с заметкой go-server-ingress-bkprefix
appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. Примечания сообщает шлюзу приложений создать параметр HTTP, который имеет префикс пути, переопределенный для пути /hello
/test/
.
Примечание.
В приведенном выше примере определяется только одно правило. Однако заметки применимы ко всему ресурсу входящего трафика, поэтому если пользователь определил несколько правил, префикс пути серверной части будет настроен для каждого из указанных путей. Если пользователь хочет, чтобы разные правила с различными префиксами пути (даже для одной службы), им потребуется определить различные ресурсы входящего трафика.
Перенаправление TLS
Шлюз приложений можно настроить для автоматического перенаправления URL-адресов HTTP к их аналогам HTTPS. При наличии этой заметки и правильной настройке TLS контроллер входящего трафика Kubernetes создает правило маршрутизации с конфигурацией перенаправления и применяет изменения к Шлюз приложений. Созданное перенаправление будет HTTP 301 Moved Permanently
.
Использование
appgw.ingress.kubernetes.io/ssl-redirect: "true"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-redirect
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- www.contoso.com
secretName: testsecret-tls
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Сток подключений
connection-draining
: эта заметка позволяет указать, следует ли включить очистку подключений.
connection-draining-timeout
: эта заметка позволяет указать время ожидания, после чего Шлюз приложений завершает запросы к осушившей серверной конечной точке.
Использование
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-drain
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Сходство на основе файлов cookie
Следующая заметка позволяет указать, следует ли включить сходство на основе файлов cookie.
Использование
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-affinity
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Истекло время ожидания запроса
Следующая заметка позволяет указать время ожидания запроса в секундах, после чего Шлюз приложений завершает запрос ошибкой, если ответ не получен.
Использование
appgw.ingress.kubernetes.io/request-timeout: "20"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/request-timeout: "20"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Использование частного IP-адреса
Следующая заметка позволяет указать, следует ли предоставлять эту конечную точку на частном IP-адресе Шлюз приложений.
Примечание.
- Шлюз приложений не поддерживает несколько IP-адресов на одном порту (например: 80/443). Входящий трафик с заметками
appgw.ingress.kubernetes.io/use-private-ip: "false"
и другой с нейappgw.ingress.kubernetes.io/use-private-ip: "true"
HTTP
приведет к сбою AGIC при обновлении Шлюз приложений. - Для Шлюз приложений, у которых нет частного IP-адреса, входящий
appgw.ingress.kubernetes.io/use-private-ip: "true"
трафик игнорируется. Это отражается в журналах контроллера и событиях входящего трафика для этих входящего трафика сNoPrivateIP
предупреждением.
Использование
appgw.ingress.kubernetes.io/use-private-ip: "true"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Серверный протокол
Следующая заметка позволяет указать протокол, который Шлюз приложений должен использоваться при взаимодействии с модулями pod. Поддерживаются http
протоколы и https
.
Примечание.
Хотя самозаверяемые сертификаты поддерживаются в Шлюз приложений, в настоящее время AGIC поддерживается https
только в том случае, если модули pod используют сертификат, подписанный хорошо известным ЦС.
Не используйте порт 80 с HTTPS и портом 443 с HTTP на модулях pod.
Использование
appgw.ingress.kubernetes.io/backend-protocol: "https"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
spec:
rules:
- http:
paths:
- path: /hello/
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Переопределение набора правил
Следующая заметка позволяет назначить существующее правило перезаписи соответствующему правилу маршрутизации запросов.
Использование
appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-bkprefix
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/rewrite-rule-set: add-custom-response-header
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 8080