Hostování více webů se službou Application Gateway pro kontejnery – rozhraní API brány
Tento dokument vám pomůže nastavit ukázkovou aplikaci, která používá prostředky z rozhraní API brány k předvedení hostování více lokalit ve stejném prostředku brány Kubernetes Gateway / front-endu služby Application Gateway pro kontejnery. K dispozici jsou následující kroky:
- Vytvořte prostředek brány pomocí jednoho naslouchacího procesu HTTP.
- Vytvořte dva prostředky HTTPRoute , které každý odkazuje na jedinečnou back-endovou službu.
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 řadič 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://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/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ých prostředků rozhraní API brány
- Vytvoření brány
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gateway-01
namespace: test-infra
annotations:
alb.networking.azure.io/alb-namespace: alb-test-infra
alb.networking.azure.io/alb-name: alb-test
spec:
gatewayClassName: azure-alb-external
listeners:
- name: http-listener
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Same
EOF
Poznámka:
Když kontroler ALB vytvoří prostředky Application Gateway pro kontejnery v ARM, použije pro front-endový prostředek následující zásady vytváření názvů: fe-8< náhodně vygenerované znaky.>
Pokud chcete změnit název front-endu vytvořeného v Azure, zvažte použití vlastní strategie nasazení.
Po vytvoření prostředku brány se ujistěte, že je stav platný, naprogramuje se naslouchací proces a brána má přiřazenou adresu.
kubectl get gateway gateway-01 -n test-infra -o yaml
Příklad výstupu úspěšného vytvoření brány
status:
addresses:
- type: Hostname
value: xxxx.yyyy.alb.azure.com
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Valid Gateway
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
listeners:
- attachedRoutes: 0
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Listener is accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
name: https-listener
supportedKinds:
- group: gateway.networking.k8s.io
kind: HTTPRoute
Po vytvoření brány vytvořte dva prostředky HTTPRoute pro contoso.com
názvy domén a fabrikam.com
názvy domén. Každá doména předává provoz do jiné back-endové služby.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: contoso-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
hostnames:
- "contoso.com"
rules:
- backendRefs:
- name: backend-v1
port: 8080
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: fabrikam-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
hostnames:
- "fabrikam.com"
rules:
- backendRefs:
- name: backend-v2
port: 8080
EOF
Po vytvoření prostředku HTTPRoute se ujistěte, že jsou prostředky HTTPRoute naprogramované a služba Application Gateway for Containers.
kubectl get httproute contoso-route -n test-infra -o yaml
kubectl get httproute fabrikam-route -n test-infra -o yaml
Ověřte, že se pro každý prostředek HTTPRoute úspěšně aktualizoval stav prostředku služby Application Gateway for Containers.
status:
parents:
- conditions:
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Route is Accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
controllerName: alb.networking.azure.io/alb-controller
parentRef:
group: gateway.networking.k8s.io
kind: Gateway
name: gateway-01
namespace: test-infra
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 gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Pokud pomocí příkazu curl zadáte indikátor názvu serveru, contoso.com
vrátí front-endový plně kvalifikovaný název domény 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"
}
Pokud pomocí příkazu curl zadáte indikátor názvu serveru, fabrikam.com
vrátí front-endový plně kvalifikovaný název domény 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 prostřednictvím různých názvů hostitelů prostřednictvím rozhraní API brány ve službě Application Gateway for Containers.