Hostování více webů se službou Application Gateway pro kontejnery – rozhraní API pro příchozí přenos dat
Tento dokument vám pomůže nastavit ukázkovou aplikaci, která používá rozhraní API příchozího přenosu dat k předvedení hostování více lokalit ve stejném prostředku příchozího přenosu dat Kubernetes / front-endu služby Application Gateway pro kontejnery. K dispozici jsou následující kroky:
- Vytvořte prostředek příchozího přenosu dat se dvěma hostiteli.
Pozadí
Služba Application Gateway pro kontejnery umožňuje hostování více webů tím, že umožňuje nakonfigurovat více než jednu webovou aplikaci na stejném portu. Dva nebo více jedinečných webů je možné hostovat pomocí jedinečných back-endových služeb. Podívejte se na následující ukázkový scénář:
Požadavky
Pokud jste použili strategii nasazení BYO, ujistěte se, že jste nastavili prostředky služby Application Gateway pro kontejnery a kontroler ALB.
Pokud jste použili strategii nasazení spravovaného ALB, ujistěte se, že prostřednictvím vlastního prostředku ApplicationLoadBalancer zřídíte kontroler ALB a službu Application Gateway for Containers.
Nasazení ukázkové aplikace HTTP:
Pomocí následujícího souboru deployment.yaml v clusteru vytvořte ukázkovou webovou aplikaci pro předvedení cesty, dotazu a směrování na základě hlaviček.kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/traffic-split-scenario/deployment.yaml
Tento příkaz vytvoří v clusteru následující:
- Obor názvů s názvem
test-infra
- Dvě volané
backend-v1
služby abackend-v2
vtest-infra
oboru názvů - Volali
backend-v1
se dvě nasazení abackend-v2
vtest-infra
oboru názvů
- Obor názvů s názvem
Nasazení požadovaného prostředku příchozího přenosu dat
- Vytvoření objektu 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
Po vytvoření prostředku příchozího přenosu dat se ujistěte, že stav zobrazuje název hostitele vašeho nástroje pro vyrovnávání zatížení a že oba porty naslouchají požadavkům.
kubectl get ingress ingress-01 -n test-infra -o yaml
Příklad výstupu úspěšného vytvoření příchozího přenosu dat
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
Otestování přístupu k aplikaci
Teď jsme připraveni odeslat nějaký provoz do ukázkové aplikace prostřednictvím plně kvalifikovaného názvu domény přiřazeného front-endu. K získání plně kvalifikovaného názvu domény použijte následující příkaz.
fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Dále pomocí příkazu curl zadejte indikátor názvu serveru, contoso.com
pro front-endový plně kvalifikovaný název domény by měl vrátit odpověď ze služby back-end-v1.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com
Prostřednictvím odpovědi bychom měli vidět:
{
"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"
}
Dále pomocí příkazu curl zadejte indikátor názvu serveru, fabrikam.com
pro front-endový plně kvalifikovaný název domény by měl vrátit odpověď ze služby back-end-v1.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve fabrikam.com:80:$fqdnIp http://fabrikam.com
Prostřednictvím odpovědi bychom měli vidět:
{
"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"
}
Blahopřejeme, nainstalovali jste kontroler ALB, nasadili back-endovou aplikaci a směrovali provoz do dvou různých back-endových služeb pomocí různých názvů hostitelů s rozhraním API příchozího přenosu dat ve službě Application Gateway for Containers.