Заметки для контроллера объекта ingress Шлюза приложений
Вы можете замечать ресурс входящего трафика Kubernetes с произвольными парами ключей и значений. Шлюз приложений контроллер входящего трафика (AGIC) полагается на заметки для программных Шлюз приложений Azure функций, которые не настраиваются с помощью yamL входящего трафика. Заметки входящего трафика применяются ко всем параметрам HTTP, серверным пулам и прослушивателям, производным от ресурса входящего трафика.
Совет
См. также раздел "Что такое Шлюз приложений для контейнеров".
Список поддерживаемых заметок
Чтобы группа доступности наблюдала за ресурсом входящего трафика, ресурс должен быть аннотирован с kubernetes.io/ingress.class: azure/application-gateway
.
Префикс пути к серверной части
Следующая заметка позволяет переписать внутренний путь, указанный в ресурсе входящего трафика с указанным префиксом. Используйте его для предоставления служб, конечные точки которых отличаются от имен конечных точек, которые используются для предоставления службы в ресурсе входящего трафика.
Использование
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/
.
В примере определяется только одно правило. Однако заметки применяются ко всему ресурсу входящего трафика. Поэтому при определении нескольких правил необходимо настроить префикс внутреннего пути для каждого из указанных путей. Если требуется разные правила с различными префиксами пути (даже для одной службы), необходимо определить различные ресурсы входящего трафика.
Имя узла серверной части
Используйте следующую заметку, чтобы указать имя узла, которое Шлюз приложений следует использовать при разговоре с модулями pod.
Использование
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
Пример
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-hostname: "internal.example.com"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Настраиваемая проба работоспособности
Вы можете настроить Шлюз приложений для отправки пользовательских проб работоспособности в серверный пул адресов. При наличии приведенных ниже заметок контроллер входящего трафика Kubernetes создает пользовательскую пробу для мониторинга серверного приложения. Затем контроллер применяет изменения к Шлюз приложений.
health-probe-hostname
: эта заметка разрешает пользовательское имя узла в пробе работоспособности.health-probe-port
: эта заметка настраивает пользовательский порт для пробы работоспособности.health-probe-path
: эта заметка определяет путь для пробы работоспособности.health-probe-status-code
: эта заметка позволяет пробе работоспособности принимать различные коды состояния HTTP.health-probe-interval
: эта заметка определяет интервал, с помощью которого выполняется проба работоспособности.health-probe-timeout
: эта заметка определяет время ожидания пробы работоспособности до сбоя пробы работоспособности.health-probe-unhealthy-threshold
: эта заметка определяет, сколько проб работоспособности должно завершиться ошибкой, чтобы серверная часть была помечена как неработоспособная.
Использование
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 80
appgw.ingress.kubernetes.io/health-probe-path: "/"
appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 30
appgw.ingress.kubernetes.io/health-probe-timeout: 30
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 81
appgw.ingress.kubernetes.io/health-probe-path: "/probepath"
appgw.ingress.kubernetes.io/health-probe-status-code: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 31
appgw.ingress.kubernetes.io/health-probe-timeout: 31
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Перенаправление 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-адреса, входящий 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-privateip
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Переопределение внешнего порта
Используйте следующую заметку, чтобы настроить внешний прослушиватель для использования портов, отличных от 80 для HTTP и 443 для HTTPS.
Если порт находится в пределах Шлюз приложений авторизованного диапазона (от 1 до 64999), прослушиватель создается на этом конкретном порту. Если в заметке задан недопустимый порт или нет порта, конфигурация использует значение по умолчанию 80 или 443.
Использование
appgw.ingress.kubernetes.io/override-frontend-port: "port"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-overridefrontendport
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/override-frontend-port: "8080"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Примечание.
Внешние запросы должны быть целевыми http://somehost:8080
вместо http://somehost
.
Серверный протокол
Используйте следующую команду, чтобы указать протокол, который Шлюз приложений должен использоваться при обмене данными с модулями 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: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Расширение имени узла
Вы можете настроить Шлюз приложений для принятия нескольких имен узлов. Используйте заметку hostname-extension
для определения нескольких имен узлов, включая подстановочные имена узлов. Это действие добавляет имена узлов в полное доменное имя, определенное в сведениях о входящего spec.rules.host
трафика на интерфейсном прослушивателе, поэтому он настроен в качестве многосайтового прослушивателя.
Использование
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-multisite
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
spec:
rules:
- host: contoso.com
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
В предыдущем примере прослушиватель настраивает прием трафика для имен hostname1.contoso.com
узлов и hostname2.contoso.com
.
Политика WAF для пути
Используйте следующую заметку, чтобы подключить существующую политику брандмауэра веб-приложения (WAF) к путям списка для узла в ресурсе входящего трафика Kubernetes, который заносится в заметки. Политика WAF применяется как к URL-адресам, так /ad-server
и /auth
к URL-адресам.
Использование
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/aaaa0000-bb11-2222-33cc-444444dddddd/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ad-server-ingress
namespace: commerce
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
spec:
rules:
- http:
paths:
- path: /ad-server
backend:
service:
name: ad-server
port:
number: 80
pathType: Exact
- path: /auth
backend:
service:
name: auth-server
port:
number: 80
pathType: Exact
SSL-сертификат Шлюз приложений
Ssl-сертификат можно настроить для Шлюз приложений из локального файла сертификата PFX или ссылки на неверизованный секретный идентификатор Azure Key Vault. Если заметка присутствует с именем сертификата и сертификат предварительно установлен в Шлюз приложений, контроллер входящего трафика Kubernetes создает правило маршрутизации с прослушивателем HTTPS и применяет изменения к экземпляру Шлюз приложений. Вы также можете использовать заметку appgw-ssl-certificate
вместе с заметкой ssl-redirect
в случае перенаправления SSL.
Примечание.
appgw-ssl-certificate
Заметка игнорируется, если спецификация TLS определена входящего трафика одновременно. Если требуется разные сертификаты с разными узлами (завершение нескольких сертификатов TLS), необходимо определить различные ресурсы входящего трафика.
Использование
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
профиль SSL Шлюз приложений
Профиль SSL можно настроить на экземпляре Шлюз приложений на прослушиватель. Когда заметка присутствует с именем профиля и профиль предварительно установлен в Шлюз приложений, контроллер входящего трафика Kubernetes создает правило маршрутизации с прослушивателем HTTPS и применяет изменения к экземпляру Шлюз приложений.
Использование
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Шлюз приложений доверенный корневой сертификат
Теперь вы можете настроить собственные корневые сертификаты, чтобы Шлюз приложений быть доверенными с помощью AGIC. Вы можете использовать заметку appgw-trusted-root-certificate
вместе с заметкой backend-protocol
, чтобы указать сквозное шифрование SSL. Если указать несколько корневых сертификатов, разделите их запятыми; например, name-of-my-root-cert1,name-of-my-root-cert2
.
Использование
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Переопределение набора правил
Используйте следующую заметку, чтобы назначить существующее правило перезаписи соответствующему правилу маршрутизации запросов.
Использование
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
Переопределение настраиваемого ресурса набора правил
Примечание.
В выпуске Шлюз приложений для контейнеров представлено множество изменений производительности, устойчивости и функций. Рассмотрите возможность использования Шлюз приложений для контейнеров для следующего развертывания.
Правила перезаписи URL-адресов для Шлюз приложений для контейнеров см. в этой статье об API шлюза и этой статье об API входящего трафика. Правила перезаписи заголовков для Шлюз приложений для контейнеров см. в этой статье об API шлюза.
Шлюз приложений позволяет переписать выбранное содержимое запросов и ответов. С помощью этой функции можно преобразовать URL-адреса, изменить параметры строки запроса и изменить заголовки запросов и ответов. Эту функцию можно также использовать для добавления условий, чтобы убедиться, что URL-адрес или указанные заголовки перезаписываются только при выполнении определенных условий. Перезапись настраиваемого ресурса набора правил приводит эту функцию к AGIC.
HTTP-заголовки позволяют клиенту и серверу передавать дополнительную информацию вместе с запросом или ответом. Перезаписав эти заголовки, можно выполнить важные задачи, такие как добавление полей заголовков, связанных с безопасностью (например, HSTS
или X-XSS-Protection
), удаление полей заголовков ответа, которые могут отображать конфиденциальную информацию и удалять сведения о портах из X-Forwarded-For
заголовков.
С помощью возможности перезаписи URL-адресов можно:
- Переопределите имя узла, путь и строку запроса URL-адреса запроса.
- Выберите переписать URL-адрес всех запросов или только запросов, которые соответствуют одному или нескольким заданным условиям. Эти условия основаны на свойствах запроса и ответа (заголовок запроса, заголовок ответа и переменные сервера).
- Выберите маршрутизировать запрос на основе исходного URL-адреса или URL-адреса перезаписи.
Примечание.
Эта функция поддерживается с версии 1.6.0-rc1. Использованиеappgw.ingress.kubernetes.io/rewrite-rule-set
, позволяющее использовать существующий набор правил перезаписи в Шлюз приложений.
Использование
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
Пример
apiVersion: appgw.ingress.azure.io/v1beta1
kind: AzureApplicationGatewayRewrite
metadata:
name: my-rewrite-rule-set-custom-resource
spec:
rewriteRules:
- name: rule1
ruleSequence: 21
conditions:
- ignoreCase: false
negate: false
variable: http_req_Host
pattern: example.com
actions:
requestHeaderConfigurations:
- actionType: set
headerName: incoming-test-header
headerValue: incoming-test-value
responseHeaderConfigurations:
- actionType: set
headerName: outgoing-test-header
headerValue: outgoing-test-value
urlConfiguration:
modifiedPath: "/api/"
modifiedQueryString: "query=test-value"
reroute: false
Приоритет правил
Следующая заметка позволяет контроллеру входящего трафика Шлюз приложений явно задать приоритет связанных правил маршрутизации запросов.
Использование
appgw.ingress.kubernetes.io/rule-priority:
Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-rulepriority
namespace: test-ag
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/rule-priority: 10
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 8080
В предыдущем примере задан приоритет 10 для правила маршрутизации запросов.