Заметки для контроллера объекта ingress Шлюза приложений

Введение

Ресурс входящего трафика Kubernetes можно снабдить заметками произвольными парами "ключ-значение". AGIC полагается на заметки для программирования функций Шлюза приложений, которые невозможно настроить с помощью входящих данных YAML. Заметки входящих данных применяются ко всем параметрам 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/backend-path-prefix: <path prefix>

Пример

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 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: extensions/v1beta1
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:
          serviceName: websocket-repeater
          servicePort: 80

Сток подключений

connection-draining: эта заметка позволяет пользователям указать, следует ли включить сток подключений. connection-draining-timeout: эта заметка позволяет пользователям указать время ожидания, по истечении которого Шлюз приложений будет завершать запросы конечной точки серверной части стока.

Использование

appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"

Пример

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Эта заметка позволяет указать, следует ли включить сходство на основе файлов cookie.

Использование

appgw.ingress.kubernetes.io/cookie-based-affinity: "true"

Пример

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Истекло время ожидания запроса

Эта заметка позволяет указать время ожидания запроса в секундах, по истечении которого Шлюз приложений не сможет выполнить запрос, если ответ не получен.

Использование

appgw.ingress.kubernetes.io/request-timeout: "20"

Пример

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 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-адреса, объекты ingress с appgw.ingress.kubernetes.io/use-private-ip: "true" будут игнорироваться. Это будет отражено в журналах контроллера и входящих событий для этих объектов ingress с предупреждением NoPrivateIP.

Использование

appgw.ingress.kubernetes.io/use-private-ip: "true"

Пример

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Серверный протокол

Эта заметка позволяет указать протокол, который должен использоваться Шлюзом приложений при взаимодействии с модулями Pod. Поддерживаемые протоколы: http, https

Примечание

  • Несмотря на то, что самозаверяющие сертификаты поддерживаются в Шлюзе приложений, в настоящее время AGIC поддерживается только https, когда в модулях Pod используется сертификат, подписанный известным центром сертификации.
  • Не следует использовать порт 80 с протоколом HTTPS и порт 443 с HTTP для модулей Pod.

Использование

appgw.ingress.kubernetes.io/backend-protocol: "https"

Пример

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 443