Dela via


Anteckningar för Application Gateway-ingresskontrollant

Kubernetes Ingress-resursen kan kommenteras med godtyckliga nyckel/värde-par. AGIC förlitar sig på anteckningar för att programmera Application Gateway-funktioner, som inte kan konfigureras med hjälp av 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 en ingressresurs ska kunna observeras av AGIC måste den kommenteras med kubernetes.io/ingress.class: azure/application-gateway. Först då fungerar AGIC med den aktuella ingressresursen.

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 prefixet som anges i den här kommentaren. Det gör det möjligt för användare att exponera tjänster vars slutpunkter skiljer sig från slutpunktsnamn som används för att exponera en tjänst i en ingressresurs.

Användning

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 har du definierat en ingressresurs med namnet go-server-ingress-bkprefix med en anteckning 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/.

Kommentar

I exemplet ovan definieras endast en regel. Anteckningarna gäller dock för hela ingressresursen, så om en användare har definierat flera regler konfigureras serverdelssökvägsprefixet för var och en av de angivna sökvägarna. Om en användare vill ha olika regler med olika sökvägsprefix (även för samma tjänst) skulle de behöva definiera olika ingressresurser.

Värdnamn för serverdel

Med den här kommentaren kan vi ange det värdnamn som Application Gateway ska använda när vi pratar med poddarna.

Användning

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

Application Gateway kan konfigureras för att skicka anpassade hälsoavsökningar till serverdelsadresspoolen. När dessa anteckningar finns skapar Kubernetes Ingress-kontrollanten en anpassad avsökning för att övervaka serverdelsprogrammet och tillämpar ändringarna på programgatewayen.

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 hälsoavsökningsport.
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 som hälsoavsökningen körs vid.
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.

Användning

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

Application Gateway kan konfigureras för att automatiskt omdirigera HTTP-URL:er till sina HTTPS-motsvarigheter. När den här kommentaren finns och TLS är korrekt konfigurerad skapar Kubernetes ingresskontrollant en routningsregel med en omdirigeringskonfiguration och tillämpar ändringarna på din Application Gateway. Omdirigeringen som skapas blir HTTP 301 Moved Permanently.

Användning

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

connection-draining: Med den här kommentaren kan vi ange om anslutningen ska tömmas. connection-draining-timeout: Med den här kommentaren kan vi ange en timeout, varefter Application Gateway avslutar begäranden till den tömande serverdelsslutpunkten.

Användning

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

Med följande kommentar kan du ange om cookiebaserad tillhörighet ska aktiveras.

Användning

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

Med följande kommentar kan du ange tidsgränsen för begäran i sekunder, varefter Application Gateway misslyckas med begäran om svaret inte tas emot.

Användning

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

Med följande kommentar kan du ange om den här slutpunkten ska exponeras på den privata IP-adressen för Application Gateway.

Kommentar

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

Användning

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

Med anteckningen kan du konfigurera en klientdelslyssnare att använda andra portar än 80/443 för http/https.

Om porten ligger inom det auktoriserade intervallet App Gw (1–64999) skapas den här lyssnaren på den här specifika porten. Om en ogiltig port eller ingen port anges i anteckningen återgår konfigurationen till standardvärdet 80 eller 443.

Användning

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

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

Serverdelsprotokoll

Med följande kommentar kan du ange det protokoll som Application Gateway ska använda när du kommunicerar med poddarna. Protokoll som stöds är http och https.

Kommentar

Även om självsignerade certifikat stöds på Application Gateway stöder https AGIC för närvarande endast 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.

Användning

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

Application Gateway kan konfigureras för att acceptera flera värdnamn. Med anteckningen hostname-extention kan du definiera flera värdnamn, inklusive värdnamn med jokertecken. Då läggs värdnamnen till i det FQDN som definieras i ingress spec.rules.host på klientdelslyssnaren så att den konfigureras som en lyssnare för flera platser.

Användning

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

Kommentar

I exemplet ovan konfigureras lyssnaren för att acceptera trafik för värdnamnen "hostname1.contoso.com" och "hostname2.contoso.com"

WAF-princip för sökväg

Med den här kommentaren kan du koppla en waf-princip som redan har skapats till listsökvägarna för en värd i en Kubernetes Ingress-resurs som kommenteras.

Användning

appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/00000000-0000-0000-0000-000000000000/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

Kommentar

WAF-principen tillämpas på både /ad-server- och /auth-URL:er.

Application Gateway SSL-certifikat

SSL-certifikatet kan konfigureras till Application Gateway antingen från en lokal PFX-certifikatfil eller en referens till ett icke-konfigurerat hemligt ID för Azure Key Vault. När anteckningen finns med ett certifikatnamn och certifikatet är förinstallerat i Application Gateway skapar Kubernetes ingresskontrollant en routningsregel med en HTTPS-lyssnare och tillämpar ändringarna på din App Gateway. appgw-ssl-certificate-annotation kan också användas tillsammans med ssl-redirect-anteckningar vid SSL-omdirigering.

Mer information finns i appgw-ssl-certificate-funktionen.

Kommentar

Kommentaren "appgw-ssl-certificate" ignoreras när TLS-specifikationen definieras som ingress samtidigt. Om en användare vill ha olika certifikat med olika värdar (avslutning av flera tls-certifikat) skulle de behöva definiera olika ingressresurser.

Användning

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

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

Användning

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

Användare kan nu konfigurera sina egna rotcertifikat till Application Gateway så att de är betrodda via AGIC. Anteckningsappen-trusted-root-certificate kan användas tillsammans med antecknings-backend-protocol för att indikera SSL-kryptering från slutpunkt till slutpunkt, flera rotcertifikat, avgränsade med kommatecken, om det anges, till exempel "name-of-my-root-cert1,name-of-my-root-certificate2".

Användning

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

Med följande kommentar kan du tilldela en befintlig omskrivningsregel inställd på motsvarande routningsregel för begäranden.

Användning

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

Application Gateway för containrar har släppts, vilket ger många prestanda-, återhämtnings- och funktionsändringar. Överväg att använda Application Gateway för containrar för nästa distribution. Url-omskrivningsregler för Application Gateway för containrar kan hittas här för Gateway API och här för Ingress API. Regler för omskrivning av huvuden för Application Gateway för containrar finns här för Gateway-API:et.

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.

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, frågesträngsparametrar samt ändra begärande- och svarshuvuden. Du kan också lägga till villkor för att se till att URL:en eller de angivna rubrikerna skrivs om endast när vissa villkor uppfylls. Dessa villkor baseras på informationen för begäran och svar. 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, till exempel att lägga till säkerhetsrelaterade rubrikfält som HSTS/X-XSS-Protection, ta bort fält för svarshuvud som kan avslöja känslig information och ta bort portinformation från X-Forwarded-For-huvuden.

Med funktionen FÖR 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 de 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

Användning

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

Med den här anteckningen kan application gateway-ingresskontrollanten uttryckligen ange prioriteten för de associerade reglerna för routning av begäranden.

Användning

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 exemplet ovan skulle routningsregeln för begäran ha en prioritet på 10 angivna.