Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med Application Gateway för containrar kan du skriva om HTTP-huvuden för klientbegäranden och svar från serverdelsmål.
Användningsinformation
Sidhuvudomskrivningar drar nytta av Application Gateway för containerns anpassade resurs IngressExtension.
Background
Med sidhuvudomskrivningar kan du ändra begärande- och svarshuvudena till och från dina serverdelsmål.
Följande bild illustrerar ett exempel på en begäran med en specifik användaragent som skrivs om till ett förenklat värde som anropas rewritten-user-agent när begäran initieras till serverdelsmålet av Application Gateway för containrar:
Prerequisites
Om du följer BYO-distributionsstrategin, se till att du har ställt in resurserna för Application Gateway for Containers och ALB-styrenhet
Om du följer den hanterade distributionsstrategin för ALB kontrollerar du att du har etablerat ALB-styrenheten och etablerat Application Gateway for Containers-resurserna via den anpassade resursen ApplicationLoadBalancer.
Distribuera HTTP-exempelprogrammet Använd följande deployment.yaml-fil i klustret för att skapa ett exempelwebbprogram för att demonstrera sidhuvudomskrivningen.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yamlDet här kommandot skapar följande i klustret:
- ett namnområde med namnet 
test-infra - två tjänster som heter 
backend-v1ochbackend-v2itest-infranamnrymden - två distributioner kallade 
backend-v1ochbackend-v2i namnområdettest-infra 
- ett namnområde med namnet 
 
Distribuera nödvändiga INGRESS API-resurser
Skapa en ingressresurs för att lyssna efter begäranden till contoso.com:
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-01
  namespace: test-infra
  annotations:
    alb.networking.azure.io/alb-name: alb-test
    alb.networking.azure.io/alb-namespace: alb-test-infra
    alb.networking.azure.io/alb-ingress-extension: header-rewrite
spec:
  ingressClassName: azure-alb-external
  rules:
    - host: contoso.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-v1
                port:
                  number: 8080
EOF
Note
När ALB-styrenheten skapar Application Gateway for Containers-resurser i Azure Resource Manager använder den följande namngivningskonvention för en klientdelsresurs: fe-<eight randomly generated characters>.
Om du vill ändra namnet på den klientdelsresurs som skapats i Azure kan du överväga att följa distributionsstrategin bring-your-own.
När ingressresursen har skapats kontrollerar du att statusen visar värdnamnet för lastbalanseraren och att båda portarna lyssnar efter begäranden.
kubectl get ingress ingress-01 -n test-infra -o yaml
Exempelutdata från ett lyckat skapande av Ingress.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.networking.azure.io/alb-frontend: FRONTEND_NAME
    alb.networking.azure.io/alb-id: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"networking.k8s.io/v1","kind":"Ingress","metadata":{"annotations":{"alb.networking.azure.io/alb-frontend":"FRONTEND_NAME","alb.networking.azure.io/alb-id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz", "alb.networking.azure.io/alb-ingress-extension":"header-rewrite"},"name"
:"ingress-01","namespace":"test-infra"},"spec":{"ingressClassName":"azure-alb-external","rules":[{"host":"contoso.com","http":{"paths":[{"backend":{"service":{"name":"backend-v1","port":{"number":8080}}},"path":"/","pathType":"Prefix"}]}}]}}
  creationTimestamp: "2023-07-22T18:02:13Z"
  generation: 2
  name: ingress-01
  namespace: test-infra
  resourceVersion: "278238"
  uid: 17c34774-1d92-413e-85ec-c5a8da45989d
spec:
  ingressClassName: azure-alb-external
  rules:
    - host: contoso.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-v1
                port:
                  number: 8080
status:
  loadBalancer:
    ingress:
    - hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
      ports:
      - port: 80
        protocol: TCP
När ingressen har skapats måste vi sedan definiera en IngressExtension med omskrivningsreglerna för huvudet.
I det här exemplet anger vi en statisk användaragent med värdet rewritten-user-agent.
Det här exemplet visar också tillägg av en ny rubrik med AGC-Header-Add namnet med värdet AGC-value och tar bort en begäranderubrik med namnet client-custom-header.
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: IngressExtension
metadata:
  name: header-rewrite
  namespace: test-infra
spec:
  rules:
    - host: contoso.com
      rewrites:
        - type: RequestHeaderModifier
          requestHeaderModifier:
            set:
              - name: "user-agent"
                value: "rewritten-user-agent"
            add:
              - name: "AGC-Header-Add"
                value: "AGC-value"
            remove:
              - "client-custom-header"
EOF
Note
Det går inte att ändra Host rubriken med en requestHeaderModifier regel. För att åsidosätta Host-värdet för backendmålet, använd ett URLRewrite-filter.
När Resursen IngressExtension har skapats kontrollerar du att resursen returnerar Inga valideringsfel och är giltig.
kubectl get IngressExtension header-rewrite -n test-infra -o yaml
Kontrollera att statusen för Application Gateway for Containers-resursen har uppdaterats.
Testa åtkomsten till programmet
Nu är vi redo att skicka trafik till vårt exempelprogram via det FQDN som tilldelats klientdelen. Använd följande kommando för att hämta FQDN.
fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Om du anger indikatorn för servernamn med hjälp av curl-kommandot contoso.com returneras ett svar från backend-v1-tjänsten för klientdelens FQDN.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com
Via svaret bör vi se:
{
 "path": "/",
 "host": "contoso.com",
 "method": "GET",
 "proto": "HTTP/1.1",
 "headers": {
  "Accept": [
   "*/*"
  ],
  "User-Agent": [
   "curl/7.81.0"
  ],
  "X-Forwarded-For": [
   "xxx.xxx.xxx.xxx"
  ],
  "X-Forwarded-Proto": [
   "http"
  ],
  "X-Request-Id": [
   "dcd4bcad-ea43-4fb6-948e-a906380dcd6d"
  ]
 },
 "namespace": "test-infra",
 "ingress": "",
 "service": "",
 "pod": "backend-v1-5b8fd96959-f59mm"
}
Om du anger ett användaragenthuvud med värdet my-user-agent ska ett svar returneras från serverdelstjänsten för rewritten-user-agent:
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com -H "user-agent: my-user-agent"
Via svaret bör vi se:
{
 "path": "/",
 "host": "fabrikam.com",
 "method": "GET",
 "proto": "HTTP/1.1",
 "headers": {
  "Accept": [
   "*/*"
  ],
  "User-Agent": [
   "curl/7.81.0"
  ],
  "X-Forwarded-For": [
   "xxx.xxx.xxx.xxx"
  ],
  "X-Forwarded-Proto": [
   "http"
  ],
  "X-Request-Id": [
   "adae8cc1-8030-4d95-9e05-237dd4e3941b"
  ]
 },
 "namespace": "test-infra",
 "ingress": "",
 "service": "",
 "pod": "backend-v1-5b8fd96959-f59mm"
}
Om du anger en client-custom-header rubrik med värdet moo ska du ta bort från begäran när Application Gateway for Containers initierar anslutningen till serverdelstjänsten:
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com -H "client-custom-header: moo"
Via svaret bör vi se:
{
 "path": "/",
 "host": "fabrikam.com",
 "method": "GET",
 "proto": "HTTP/1.1",
 "headers": {
  "Accept": [
   "*/*"
  ],
  "User-Agent": [
   "curl/7.81.0"
  ],
  "X-Forwarded-For": [
   "xxx.xxx.xxx.xxx"
  ],
  "X-Forwarded-Proto": [
   "http"
  ],
  "X-Request-Id": [
   "kd83nc84-4325-5d22-3d23-237dd4e3941b"
  ]
 },
 "namespace": "test-infra",
 "ingress": "",
 "service": "",
 "pod": "backend-v1-5b8fd96959-f59mm"
}
Grattis, du har installerat ALB-styrenheten, distribuerat ett serverdelsprogram och ändrat rubrikvärden via ingress-API på Application Gateway för containrar.