Dela via


Anteckningar för Application Gateway-ingresskontrollant

Du kan kommentera Kubernetes-ingressresursen med godtyckliga nyckel/värde-par. Application Gateway Ingress Controller (AGIC) förlitar sig på anteckningar för att programmera Azure Application Gateway-funktioner som inte kan konfigureras via inkommande YAML. Ingressanteckningar tillämpas på alla HTTP-inställningar, serverdelspooler och lyssnare som härleds från en ingressresurs.

Lista över anteckningar som stöds

För att AGIC ska kunna observera en ingressresurs måste resursen kommenteras med kubernetes.io/ingress.class: azure/application-gateway.

Anteckningsnyckel Värdetyp Standardvärde Tillåtna värden
appgw.ingress.kubernetes.io/backend-path-prefix string nil
appgw.ingress.kubernetes.io/backend-hostname string nil
appgw.ingress.kubernetes.io/health-probe-hostname string 127.0.0.1
appgw.ingress.kubernetes.io/health-probe-port int32 80
appgw.ingress.kubernetes.io/health-probe-path string /
appgw.ingress.kubernetes.io/health-probe-status-code string 200-399
appgw.ingress.kubernetes.io/health-probe-interval int32 30 (sekunder)
appgw.ingress.kubernetes.io/health-probe-timeout int32 30 (sekunder)
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold int32 3
appgw.ingress.kubernetes.io/ssl-redirect bool false
appgw.ingress.kubernetes.io/connection-draining bool false
appgw.ingress.kubernetes.io/connection-draining-timeout int32 (sekunder) 30
appgw.ingress.kubernetes.io/use-private-ip bool false
appgw.ingress.kubernetes.io/override-frontend-port bool false
appgw.ingress.kubernetes.io/cookie-based-affinity bool false
appgw.ingress.kubernetes.io/request-timeout int32 (sekunder) 30
appgw.ingress.kubernetes.io/use-private-ip bool false
appgw.ingress.kubernetes.io/backend-protocol string http http, https
appgw.ingress.kubernetes.io/hostname-extension string nil
appgw.ingress.kubernetes.io/waf-policy-for-path string nil
appgw.ingress.kubernetes.io/appgw-ssl-certificate string nil
appgw.ingress.kubernetes.io/appgw-ssl-profile string nil
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate string nil
appgw.ingress.kubernetes.io/rewrite-rule-set string nil
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
appgw.ingress.kubernetes.io/rule-priority int32 nil

Serverdelssökvägsprefix

Med följande kommentar kan den serverdelssökväg som anges i en ingressresurs skrivas om med det angivna prefixet. Använd den för att exponera tjänster vars slutpunkter skiljer sig från de slutpunktsnamn som du använder för att exponera en tjänst i en ingressresurs.

Förbrukning

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

Exempel

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

I föregående exempel definieras en ingressresurs med namnet go-server-ingress-bkprefix med en anteckning med namnet appgw.ingress.kubernetes.io/backend-path-prefix: "/test/". Kommentaren instruerar Application Gateway att skapa en HTTP-inställning som har en åsidosättning av sökvägsprefixet för sökvägen /hello till /test/.

Exemplet definierar bara en regel. Anteckningarna gäller dock för hela ingressresursen. Så om du definierar flera regler konfigurerar du serverdelssökvägsprefixet för var och en av de angivna sökvägarna. Om du vill ha olika regler med olika sökvägsprefix (även för samma tjänst) måste du definiera olika ingressresurser.

Värdnamn för serverdel

Använd följande kommentar för att ange det värdnamn som Application Gateway ska använda när du pratar med poddarna.

Förbrukning

appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"

Exempel

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

Anpassad hälsoavsökning

Du kan konfigurera Application Gateway för att skicka anpassade hälsoavsökningar till serverdelsadresspoolen. När följande anteckningar finns skapar Kubernetes-ingresskontrollanten en anpassad avsökning för att övervaka serverdelsprogrammet. Kontrollanten tillämpar sedan ändringarna på Application Gateway.

  • health-probe-hostname: Den här kommentaren tillåter ett anpassat värdnamn för hälsoavsökningen.
  • health-probe-port: Den här anteckningen konfigurerar en anpassad port för hälsoavsökningen.
  • health-probe-path: Den här kommentaren definierar en sökväg för hälsoavsökningen.
  • health-probe-status-code: Med den här kommentaren kan hälsoavsökningen acceptera olika HTTP-statuskoder.
  • health-probe-interval: Den här kommentaren definierar det intervall med vilket hälsoavsökningen körs.
  • health-probe-timeout: Den här kommentaren definierar hur länge hälsoavsökningen väntar på ett svar innan avsökningen misslyckas.
  • health-probe-unhealthy-threshold: Den här kommentaren definierar hur många hälsoavsökningar som måste misslyckas för att serverdelen ska markeras som inte felfri.

Förbrukning

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

Exempel

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

Omdirigering av TLS

Du kan konfigurera Application Gateway för att automatiskt omdirigera HTTP-URL:er till deras HTTPS-motsvarigheter. När den här anteckningen finns och TLS är korrekt konfigurerad skapar Kubernetes ingresskontrollant en routningsregel med en omdirigeringskonfiguration. Kontrollanten tillämpar sedan ändringarna på din Application Gateway-instans. Den skapade omdirigeringen är HTTP 301 Moved Permanently.

Förbrukning

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

Exempel

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

Anslutningsdränering

Använd följande anteckningar om du vill använda anslutningsdränering:

  • connection-draining: Den här kommentaren anger om anslutningen ska tömmas.
  • connection-draining-timeout: Den här kommentaren anger en tidsgräns, varefter Application Gateway avslutar begäranden till den tömande serverdelsslutpunkten.

Förbrukning

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

Exempel

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

Använd följande kommentar för att aktivera cookiebaserad tillhörighet.

Förbrukning

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

Exempel

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

Tidsgräns för förfrågan

Använd följande kommentar för att ange tidsgränsen för begäran i sekunder. Efter tidsgränsen misslyckas Application Gateway med en begäran om svaret inte tas emot.

Förbrukning

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

Exempel

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

Använda privat IP

Använd följande kommentar för att ange om den här slutpunkten ska exponeras på en privat IP-adress för Application Gateway.

För en Application Gateway-instans som inte har en privat IP-adress ignoreras ingresser med appgw.ingress.kubernetes.io/use-private-ip: "true" . Kontrollantloggarna och ingresshändelserna för dessa ingresser visar en NoPrivateIP varning.

Förbrukning

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

Exempel

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

Åsidosätt klientdelsport

Använd följande kommentar för att konfigurera en klientdelslyssnare för att använda andra portar än 80 för HTTP och 443 för HTTPS.

Om porten ligger inom det auktoriserade intervallet för Application Gateway (1 till 64999) skapas lyssnaren på den här specifika porten. Om du anger en ogiltig port eller ingen port i anteckningen använder konfigurationen standardvärdet 80 eller 443.

Förbrukning

appgw.ingress.kubernetes.io/override-frontend-port: "port"

Exempel

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

Kommentar

Externa begäranden måste riktas http://somehost:8080 i stället för http://somehost.

Serverdelsprotokoll

Använd följande för att ange det protokoll som Application Gateway ska använda när den kommunicerar med poddarna. Protokoll som stöds är HTTP och HTTPS.

Även om självsignerade certifikat stöds på Application Gateway stöder AGIC för närvarande endast HTTPS när poddar använder ett certifikat som signerats av en välkänd certifikatutfärdare.

Använd inte port 80 med HTTPS och port 443 med HTTP på poddarna.

Förbrukning

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

Exempel

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

Värdnamnstillägg

Du kan konfigurera Application Gateway att acceptera flera värdnamn. Använd kommentaren hostname-extension för att definiera flera värdnamn, inklusive värdnamn för jokertecken. Den här åtgärden lägger till värdnamnen i det FQDN som definieras i ingressinformationen spec.rules.host på klientdelslyssnaren, så att den konfigureras som en lyssnare för flera platser.

Förbrukning

appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"

Exempel

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

I föregående exempel konfigureras lyssnaren att acceptera trafik för värdnamnen hostname1.contoso.com och hostname2.contoso.com.

WAF-princip för sökväg

Använd följande kommentar för att koppla en befintlig brandväggsprincip för webbprogram (WAF) till listsökvägarna för en värd i en Kubernetes-ingressresurs som kommenteras. WAF-principen tillämpas på både /ad-server url:er och /auth url:er.

Förbrukning

appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"

Exempel

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

Application Gateway SSL-certifikat

Du kan konfigurera SSL-certifikatet till Application Gateway från antingen en lokal PFX-certifikatfil eller en referens till ett oversionerat hemligt ID för Azure Key Vault. När anteckningen finns med ett certifikatnamn och certifikatet är förinstallerat i Application Gateway skapar Kubernetes-ingresskontrollanten en routningsregel med en HTTPS-lyssnare och tillämpar ändringarna på din Application Gateway-instans. Du kan också använda anteckningen appgw-ssl-certificate tillsammans med en ssl-redirect anteckning vid en SSL-omdirigering.

Kommentar

Kommentaren appgw-ssl-certificate ignoreras när TLS-specifikationen definieras i ingress samtidigt. Om du vill ha olika certifikat med olika värdar (avslutning av flera TLS-certifikat) måste du definiera olika inkommande resurser.

Förbrukning

appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"

Exempel

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

Application Gateway SSL-profil

Du kan konfigurera en SSL-profil på Application Gateway-instansen per lyssnare. När anteckningen finns med ett profilnamn och profilen är förinstallerad i Application Gateway skapar Kubernetes-ingresskontrollanten en routningsregel med en HTTPS-lyssnare och tillämpar ändringarna på din Application Gateway-instans.

Förbrukning

appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"

Exempel

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

Betrott rotcertifikat för Application Gateway

Nu kan du konfigurera dina egna rotcertifikat till Application Gateway så att de är betrodda via AGIC. Du kan använda anteckningen appgw-trusted-root-certificate tillsammans med anteckningen backend-protocol för att ange SSL-kryptering från slutpunkt till slutpunkt. Om du anger flera rotcertifikat separerar du dem med kommatecken. till exempel name-of-my-root-cert1,name-of-my-root-cert2.

Förbrukning

appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"

Exempel

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

Skriv om regeluppsättning

Använd följande kommentar för att tilldela en befintlig omskrivningsregel inställd på motsvarande routningsregel för begäranden.

Förbrukning

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

Exempel

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

Skriv om anpassad resurs för regeluppsättning

Kommentar

Lanseringen av Application Gateway for Containers introducerar många prestanda-, återhämtnings- och funktionsändringar. Överväg att använda Application Gateway för containrar för nästa distribution.

Du hittar URL-omskrivningsregler för Application Gateway för containrar i den här artikeln om Gateway-API :et och den här artikeln om ingress-API:et. Du hittar omskrivningsregler för huvuden för Application Gateway för containrar i den här artikeln om Gateway-API:et.

Med Application Gateway kan du skriva om det valda innehållet i begäranden och svar. Med den här funktionen kan du översätta URL:er, ändra frågesträngsparametrar och ändra begärande- och svarshuvuden. Du kan också använda den här funktionen för att lägga till villkor för att se till att URL:en eller de angivna rubrikerna skrivs om endast när vissa villkor uppfylls. Omskrivning av anpassad resurs för regeluppsättning för den här funktionen till AGIC.

MED HTTP-huvuden kan en klient och server skicka ytterligare information med en begäran eller ett svar. Genom att skriva om dessa rubriker kan du utföra viktiga uppgifter som att lägga till säkerhetsrelaterade rubrikfält (till exempel HSTS eller X-XSS-Protection), ta bort svarshuvudfält som kan avslöja känslig information och ta bort portinformation från X-Forwarded-For rubriker.

Med funktionen URL-omskrivning kan du:

  • Skriv om värdnamnet, sökvägen och frågesträngen för begärande-URL:en.
  • Välj att skriva om URL:en för alla begäranden eller endast begäranden som matchar ett eller flera av de villkor som du anger. Dessa villkor baseras på egenskaperna för begäran och svar (begärandehuvud, svarshuvud och servervariabler).
  • Välj att dirigera begäran baserat på antingen den ursprungliga URL:en eller den omskrivna URL:en.

Kommentar

Den här funktionen stöds sedan 1.6.0-rc1. Använd appgw.ingress.kubernetes.io/rewrite-rule-set, som gör att du kan använda en befintlig omskrivningsregel som har angetts på Application Gateway.

Förbrukning

appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource

Exempel

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

Regelprioritet

Följande kommentar gör det möjligt för Application Gateway-ingresskontrollanten att uttryckligen ange prioriteten för de associerade routningsreglerna för begäranden.

Förbrukning

appgw.ingress.kubernetes.io/rule-priority:

Exempel

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

I föregående exempel anges en prioritet på 10 för routningsregeln för begäranden.