Hosten van meerdere sites met Application Gateway for Containers - Ingress-API
Dit document helpt u bij het instellen van een voorbeeldtoepassing die gebruikmaakt van de Ingress-API om te demonstreren hoe meerdere sites gehost kunnen worden op dezelfde Kubernetes Ingress-resource / Application Gateway voor Containers-frontend. Er worden stappen gegeven voor:
- Maak een Ingress resource met twee hosts.
Achtergrond
Met Application Gateway for Containers kunt u meerdere sites hosten door meer dan één webtoepassing op dezelfde poort te configureren. Twee of meer unieke sites kunnen worden gehost met behulp van unieke back-endservices. Zie het volgende voorbeeldscenario:
Vereiste voorwaarden
Als u de BYO-implementatiestrategie hebt gebruikt, moet u ervoor zorgen dat u uw Application Gateway for Containers-resources en ALB Controller instelt.
Als u de door ALB beheerde implementatiestrategie hebt gebruikt, moet u ervoor zorgen dat uw ALB-controller en de Application Gateway for Containers-resources worden ingericht via de aangepaste applicationLoadBalancer-resource.
Voorbeeld-HTTP-toepassing implementeren:
Pas het volgende bestand deployment.yaml toe op uw cluster om een voorbeeldwebtoepassing te maken om pad-, query- en headergebaseerde routering te demonstreren.kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yaml
Met deze opdracht maakt u het volgende op uw cluster:
- Een naamruimte met de naam
test-infra
- Twee services genaamd
backend-v1
enbackend-v2
in detest-infra
naamruimte - Twee deployments genaamd
backend-v1
enbackend-v2
in detest-infra
namespace
- Een naamruimte met de naam
De vereiste Ingress-resource implementeren
- Een Ingress aanmaken
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
Zodra de ingress resource is gemaakt, controleert u of de status de hostnaam van uw load balancer weergeeft en of beide poorten op aanvragen wachten.
kubectl get ingress ingress-01 -n test-infra -o yaml
Voorbeeld van een geslaagde uitvoer van het maken van een 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"},"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
Toegang tot de toepassing testen
Nu zijn we klaar om verkeer naar onze voorbeeldtoepassing te verzenden, via de FQDN die is toegewezen aan de front-end. Gebruik de volgende opdracht om de FQDN op te halen.
fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Geef vervolgens de servernaamindicator op met behulp van de curl-opdracht. contoso.com
Voor de front-end-FQDN moet een antwoord worden geretourneerd van de back-end-v1-service.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com
Via het antwoord moeten we het volgende zien:
{
"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"
}
Geef vervolgens de servernaamindicator op met behulp van de curl-opdracht, fabrikam.com
voor de front-end-FQDN moet een antwoord van de back-end-v1-service worden geretourneerd.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve fabrikam.com:80:$fqdnIp http://fabrikam.com
Via het antwoord moeten we het volgende zien:
{
"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"
}
Gefeliciteerd, u hebt de ALB Controller geïnstalleerd, een achterliggende toepassing geïmplementeerd en verkeer doorgestuurd naar twee verschillende achterliggende services door gebruik te maken van verschillende hostnamen via de Ingress API op Application Gateway for Containers.