Заметки для контроллера объекта 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-bkprefixappgw.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.

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

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