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:
- Skapa en ingressresurs med två värdar.
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:
Förutsättningar
Om du använde BYO-distributionsstrategin kontrollerar du att du har konfigurerat application gateway för containrar och ALB-styrenhet.
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.
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://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/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
ochbackend-v2
itest-infra
namnområdet - Två distributioner anropas
backend-v1
ochbackend-v2
itest-infra
namnområdet
- Ett namnområde med namnet
Distribuera den nödvändiga ingressresursen
- 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/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"},"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.