Dela via


Värd för flera platser med Application Gateway för containrar – API för inkommande

Det här dokumentet hjälper dig att konfigurera ett exempelprogram som använder ingress-API:et för att demonstrera värd för flera platser på samma Kubernetes-ingressresurs/Application Gateway för containrars klientdel. Steg tillhandahålls för att:

Bakgrund

Application Gateway för containrar möjliggör värdtjänster för flera platser genom att du kan konfigurera fler än ett webbprogram på samma port. Två eller flera unika webbplatser kan hanteras med hjälp av unika serverdelstjänster. Se följande exempelscenario:

A diagram showing multisite hosting with Application Gateway for Containers.

Förutsättningar

  1. Om du använde BYO-distributionsstrategin kontrollerar du att du har konfigurerat application gateway för containrar och ALB-styrenhet.

  2. Om du använde den hanterade distributionsstrategin för ALB kontrollerar du etableringen av ALB-styrenheten och application gatewayen för containrar via den anpassade resursen ApplicationLoadBalancer.

  3. Distribuera HTTP-exempelprogram:
    Använd följande deployment.yaml-fil i klustret för att skapa ett exempelwebbprogram för att demonstrera sökväg, fråga och rubrikbaserad routning.

    kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/traffic-split-scenario/deployment.yaml
    

    Det här kommandot skapar följande i klustret:

    • Ett namnområde med namnet test-infra
    • Två tjänster anropas backend-v1 och backend-v2 i test-infra namnområdet
    • Två distributioner anropas backend-v1 och backend-v2 i test-infra namnområdet

Distribuera den nödvändiga ingressresursen

  1. Skapa en ingress
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
spec:
  ingressClassName: azure-alb-external
  rules:
    - host: contoso.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-v1
                port:
                  number: 8080
    - host: fabrikam.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-v2
                port:
                  number: 8080
EOF

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

Exempel på utdata från skapande av inkommande.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.networking.azure.io/alb-frontend: FRONTEND_NAME
    alb.networking.azure.io/alb-id: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/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/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz"},"name"
:"ingress-01","namespace":"test-infra"},"spec":{"ingressClassName":"azure-alb-external","rules":[{"host":"example.com","http":{"paths":[{"backend":{"service":{"name":"echo","port":{"number":80}}},"path":"/","pathType":"Prefix"}]}}],"tls":[{"hosts":["example.com"],"secretName":"listener-tls-secret"}]}}
  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
    - host: fabrikam.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-v2
                port:
                  number: 8080
status:
  loadBalancer:
    ingress:
    - hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
      ports:
      - port: 80
        protocol: TCP

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}'')

Ange sedan servernamnindikatorn med hjälp av curl-kommandot. contoso.com För klientdels-FQDN bör du returnera ett svar från backend-v1-tjänsten.

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"
}

Ange sedan servernamnindikatorn med hjälp av curl-kommandot, fabrikam.com för klientdelens FQDN ska returnera ett svar från backend-v1-tjänsten.

fqdnIp=$(dig +short $fqdn)
curl -k --resolve fabrikam.com:80:$fqdnIp http://fabrikam.com

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-v2-594bd59865-ppv9w"
}

Grattis, du har installerat ALB Controller, distribuerat ett serverdelsprogram och dirigerat trafik till två olika serverdelstjänster med olika värdnamn med ingress-API:et på Application Gateway för containrar.