Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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. Jsou poskytovány kroky pro:
- 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.
Background
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.yamlTento příkaz vytvoří v clusteru následující:
- Obor názvů s názvem
test-infra - Dvě služby nazvané
backend-v1abackend-v2v oboru názvůtest-infra - Dvě nasazení nazvaná
backend-v1abackend-v2v oboru názvůtest-infra
- Obor názvů s názvem
Nasadit požadované prostředky rozhraní Gateway API
- 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 Azure Resource Manageru, použije pro front-endový prostředek následující zásady vytváření názvů: fe-<eight randomly generated characters>
Pokud chcete změnit název front-endového prostředku vytvořeného v Azure, zvažte použití vlastní strategie nasazení.
Po vytvoření prostředku brány se ujistěte, že stav je platný, naslouchací modul je naprogramován 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
Nyní jsme připraveni směrovat provoz do naší ukázkové aplikace prostřednictvím plně kvalifikovaného názvu domény přiřazeného k frontendu. 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.