Adnotacje dla kontrolera ruchu przychodzącego usługi Application Gateway

Zasób ruchu przychodzącego Kubernetes może być dodawać adnotacje do dowolnych par klucz/wartość. Program AGIC opiera się na adnotacjach do programowania funkcji usługi Application Gateway, które nie można konfigurować przy użyciu kodu YAML ruchu przychodzącego. Adnotacje ruchu przychodzącego są stosowane do wszystkich ustawień protokołu HTTP, pul zaplecza i odbiorników pochodzących z zasobu ruchu przychodzącego.

Lista obsługiwanych adnotacji

Aby zasób ruchu przychodzącego był obserwowany przez AGIC, musi być oznaczony adnotacjąkubernetes.io/ingress.class: azure/application-gateway. Dopiero wtedy AGIC współpracuje z danym zasobem Ruchu przychodzącego.

Klucz adnotacji Typ wartości Wartość domyślna Dozwolone wartości
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 (sekundy) 30
appgw.ingress.kubernetes.io/cookie-based-affinity bool false
appgw.ingress.kubernetes.io/request-timeout int32 (sekundy) 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

Prefiks ścieżki zaplecza

Poniższa adnotacja umożliwia przepisanie ścieżki zaplecza określonej w zasobie ruchu przychodzącego z prefiksem określonym w tej adnotacji. Umożliwia użytkownikom uwidacznienie usług, których punkty końcowe są inne niż nazwy punktów końcowych używanych do uwidaczniania usługi w zasobie ruchu przychodzącego.

Użycie

appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>

Przykład

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

W poprzednim przykładzie zdefiniowano zasób ruchu przychodzącego o nazwie go-server-ingress-bkprefix z adnotacją appgw.ingress.kubernetes.io/backend-path-prefix: "/test/". Adnotacja informuje bramę aplikacji o utworzeniu ustawienia HTTP, które ma zastępowanie prefiksu ścieżki dla ścieżki /hello do /test/.

Uwaga

W powyższym przykładzie zdefiniowano tylko jedną regułę. Jednak adnotacje mają zastosowanie do całego zasobu ruchu przychodzącego, więc jeśli użytkownik zdefiniował wiele reguł, prefiks ścieżki zaplecza zostanie skonfigurowany dla każdej z określonych ścieżek. Jeśli użytkownik chce różnych reguł z różnymi prefiksami ścieżki (nawet dla tej samej usługi), musi zdefiniować różne zasoby ruchu przychodzącego.

Przekierowanie PROTOKOŁU TLS

Usługę Application Gateway można skonfigurować tak, aby automatycznie przekierowywała adresy URL HTTP do swoich odpowiedników HTTPS. Gdy ta adnotacja jest obecna i protokół TLS jest prawidłowo skonfigurowany, kontroler ruchu przychodzącego Kubernetes tworzy regułę routingu z konfiguracją przekierowania i stosuje zmiany w usłudze Application Gateway. Utworzone przekierowanie będzie adresem HTTP 301 Moved Permanently.

Użycie

appgw.ingress.kubernetes.io/ssl-redirect: "true"

Przykład

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

Opróżnianie Połączenie jonów

connection-draining: Ta adnotacja pozwala określić, czy włączyć opróżnianie połączeń. connection-draining-timeout: Ta adnotacja umożliwia określenie limitu czasu, po którym usługa Application Gateway kończy żądania do punktu końcowego opróżniania zaplecza.

Użycie

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

Przykład

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

Poniższa adnotacja umożliwia określenie, czy włączyć koligację opartą na plikach cookie.

Użycie

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

Przykład

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

Limit czasu żądania

Poniższa adnotacja umożliwia określenie limitu czasu żądania w sekundach, po którym usługa Application Gateway zakończy się niepowodzeniem żądania, jeśli odpowiedź nie zostanie odebrana.

Użycie

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

Przykład

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

Korzystanie z prywatnego adresu IP

Poniższa adnotacja umożliwia określenie, czy uwidocznić ten punkt końcowy w prywatnym adresie IP usługi Application Gateway.

Uwaga

  • Usługa Application Gateway nie obsługuje wielu adresów IP na tym samym porcie (na przykład: 80/443). Ruch przychodzący z adnotacją appgw.ingress.kubernetes.io/use-private-ip: "false" , a inny element appgw.ingress.kubernetes.io/use-private-ip: "true" z HTTP włączonym spowoduje niepowodzenie usługi AGIC podczas aktualizowania usługi Application Gateway.
  • W przypadku usługi Application Gateway, która nie ma prywatnego adresu IP, ruch przychodzący z usługą appgw.ingress.kubernetes.io/use-private-ip: "true" jest ignorowany. Jest to odzwierciedlone w dziennikach kontrolera i zdarzeniach ruchu przychodzącego dla tych ruchu przychodzącego z NoPrivateIP ostrzeżeniem.

Użycie

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

Przykład

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

Protokół zaplecza

Poniższa adnotacja umożliwia określenie protokołu, którego usługa Application Gateway powinna używać podczas komunikowania się z zasobnikami. Obsługiwane protokoły to http i https.

Uwaga

Certyfikaty z podpisem własnym są obsługiwane w usłudze Application Gateway, ale obecnie program AGIC obsługuje https tylko wtedy, gdy zasobniki korzystają z certyfikatu podpisanego przez dobrze znany urząd certyfikacji.

Nie używaj portu 80 z protokołem HTTPS i portem 443 z protokołem HTTP w zasobnikach.

Użycie

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

Przykład

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

Ponowne zapisywanie zestawu reguł

Poniższa adnotacja umożliwia przypisanie istniejącej reguły ponownego zapisywania do odpowiedniej reguły routingu żądań.

Użycie

appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>

Przykład

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