Poznámky pro kontroler příchozího přenosu dat Application Gateway

Úvody

Prostředek příchozího přenosu dat Kubernetes může být označen libovolnými páry klíč/hodnota. AGIC spoléhá na poznámky k programovým Application Gateway funkcím, které nejsou konfigurovatelné prostřednictvím YAML příchozího přenosu dat. Poznámky příchozího přenosu dat se použijí pro všechna nastavení HTTP, back-endové fondy a naslouchací procesy odvozené z prostředku příchozího přenosu dat.

Seznam podporovaných poznámek

Aby byl prostředek příchozího přenosu dat pozorován nástrojem AGIC, musí být označenýkubernetes.io/ingress.class: azure/application-gateway. Pouze pak AGIC bude pracovat s daným zdrojem příchozího přenosu dat.

Klíč poznámky Typ hodnoty Výchozí hodnota Povolené hodnoty
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

Předpona cesty back-endu

Tato poznámka umožňuje přepsat back-endovou cestu zadanou v prostředku příchozího přenosu dat pomocí předpony zadané v této poznámce. To umožňuje uživatelům zpřístupnit služby, jejichž koncové body se liší od názvů koncových bodů používaných k zveřejnění služby v prostředku příchozího přenosu dat.

Využití

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

Příklad

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

V příkladu výše jsme definovali prostředek příchozího přenosu dat s názvem go-server-ingress-bkprefix anotací appgw.ingress.kubernetes.io/backend-path-prefix: "/test/" . Poznámka říká službě Application Gateway, aby vytvořila nastavení HTTP, které bude mít přepsání předpony cesty pro cestu /hello k /test/.

Poznámka

V předchozím příkladu máme definované jenom jedno pravidlo. Poznámky se ale vztahují na celý prostředek příchozího přenosu dat, takže pokud uživatel definoval více pravidel, nastaví se předpona back-endové cesty pro každou zadanou cestu. Pokud tedy uživatel chce různá pravidla s různými předponami cesty (i pro stejnou službu), bude muset definovat různé prostředky příchozího přenosu dat.

Přesměrování protokolu TLS

Application Gateway je možné nakonfigurovat tak, aby automaticky přesměrovala adresy URL HTTP na jejich protějšky HTTPS. Pokud je tato poznámka k dispozici a protokol TLS je správně nakonfigurovaný, kontroler příchozího přenosu dat Kubernetes vytvoří pravidlo směrování s konfigurací přesměrování a použije změny ve vašem Application Gateway. Vytvořené přesměrování bude HTTP 301 Moved Permanently.

Využití

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

Příklad

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

Vyprazdňování připojení

connection-draining: Tato poznámka umožňuje uživatelům určit, jestli mají povolit vyprazdňování připojení. connection-draining-timeout: Tato poznámka umožňuje uživatelům určit časový limit, po kterém Application Gateway ukončí požadavky na vyprázdnění back-endového koncového bodu.

Využití

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

Příklad

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

Tato poznámka umožňuje určit, jestli se má povolit spřažení na základě souborů cookie.

Využití

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

Příklad

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

Časový limit žádosti

Tato poznámka umožňuje určit časový limit požadavku v sekundách, po kterém Application Gateway požadavek selže, pokud odpověď není přijata.

Využití

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

Příklad

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

Použití privátní IP adresy

Tato poznámka nám umožňuje určit, jestli má být tento koncový bod vystaven na privátní IP adrese Application Gateway.

Poznámka

  • Application Gateway nepodporuje více IP adres na stejném portu (příklad: 80/443). Příchozí přenos dat s poznámkami appgw.ingress.kubernetes.io/use-private-ip: "false" a dalším s appgw.ingress.kubernetes.io/use-private-ip: "true" zapnutým HTTP přenosem dat způsobí selhání AGIC při aktualizaci Application Gateway.
  • Pro Application Gateway, která nemá privátní IP adresu, se příchozí přenos dat appgw.ingress.kubernetes.io/use-private-ip: "true" bude ignorovat. To se projeví v protokolech kontroleru a událostech příchozího přenosu dat pro tyto příchozí přenosy dat s upozorněním NoPrivateIP .

Využití

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

Příklad

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

Back-endový protokol

Tato poznámka nám umožňuje určit protokol, který by měl Application Gateway používat při komunikaci s pody. Podporované protokoly: http, https

Poznámka

  • I když jsou certifikáty podepsané svým držitelem podporovány v Application Gateway, V současné době podporuje https AGIC pouze v případě, že pody používají certifikát podepsaný dobře známou certifikační autoritou.
  • Ujistěte se, že na podech nepoužíváte port 80 s HTTPS a portem 443 s HTTP.

Využití

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

Příklad

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

Přepsání sady pravidel

Tato poznámka umožňuje přiřadit existující pravidlo přepsání nastavené na odpovídající pravidlo směrování požadavků.

Využití

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

Příklad

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