Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten dokument ułatwia skonfigurowanie przykładowej aplikacji korzystającej z zasobów z interfejsu API bramy w celu zademonstrowania routingu ruchu na podstawie ścieżki adresu URL, ciągu zapytania i nagłówka. Dostępne są następujące kroki:
- Utwórz zasób bramy z jednym odbiornikiem HTTPS.
- Utwórz zasób HTTPRoute, który odwołuje się do usługi zaplecza.
- Użyj protokołu HTTPRouteMatch , aby wykonać
matches
tę trasę na podstawie ścieżki, nagłówka i ciągu zapytania.
Tło
Usługa Application Gateway dla kontenerów umożliwia routing ruchu na podstawie ścieżki adresu URL, ciągu zapytania i nagłówka. Zobacz następujący przykładowy scenariusz:
Wymagania wstępne
Jeśli wykonasz strategię wdrażania byo, upewnij się, że skonfigurowaliśmy usługę Application Gateway dla zasobów kontenerów i kontroler usługi ALB
Jeśli wykonano strategię wdrażania zarządzanego usługi ALB, upewnij się, że aprowizowaliśmy kontroler usługi ALB i aprowizowaliśmy zasoby usługi Application Gateway for Containers za pośrednictwem zasobu niestandardowego ApplicationLoadBalancer.
Wdróż przykładową aplikację HTTP Zastosuj następujący plik deployment.yaml w klastrze, aby utworzyć przykładową aplikację internetową w celu zademonstrowania routingu opartego na ścieżkach, zapytaniach i nagłówkach.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yaml
To polecenie tworzy następujące polecenie w klastrze:
- przestrzeń nazw o nazwie
test-infra
- dwie usługi o nazwie
backend-v1
ibackend-v2
wtest-infra
przestrzeni nazw - dwa wdrożenia o nazwie
backend-v1
ibackend-v2
wtest-infra
przestrzeni nazw
- przestrzeń nazw o nazwie
Wdrażanie wymaganych zasobów interfejsu API bramy
Utwórz bramę:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1beta1
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
Uwaga
Gdy kontroler usługi ALB tworzy bramę Application Gateway dla zasobów kontenerów w usłudze ARM, użyje następującej konwencji nazewnictwa dla zasobu frontonu: fe-8< losowo wygenerowanych znaków>
Jeśli chcesz zmienić nazwę frontonu utworzonego na platformie Azure, rozważ zastosowanie własnej strategii wdrażania.
Po utworzeniu zasobu bramy upewnij się, że stan jest prawidłowy, odbiornik jest zaprogramowany, a adres jest przypisany do bramy.
kubectl get gateway gateway-01 -n test-infra -o yaml
Przykładowe dane wyjściowe pomyślnego utworzenia bramy.
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 utworzeniu bramy utwórz usługę HTTPRoute, aby zdefiniować dwa różne dopasowania i domyślną usługę do kierowania ruchu do.
Sposób odczytywania następujących reguł jest następujący:
- Jeśli ścieżka to /bar, ruch jest kierowany do usługi backend-v2 na porcie 8080 LUB
- Jeśli żądanie zawiera nagłówek HTTP o nazwie magic i wartość foo, adres URL zawiera ciąg zapytania definiujący nazwę świetnie z wartością przykładu, a ścieżka to /some/thing, żądanie jest wysyłane do zaplecza-v2 na porcie 8080.
- W przeciwnym razie wszystkie inne żądania są kierowane do usługi backend-v1 na porcie 8080.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: http-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
namespace: test-infra
rules:
- matches:
- path:
type: PathPrefix
value: /bar
backendRefs:
- name: backend-v2
port: 8080
- matches:
- headers:
- type: Exact
name: magic
value: foo
queryParams:
- type: Exact
name: great
value: example
path:
type: PathPrefix
value: /some/thing
method: GET
backendRefs:
- name: backend-v2
port: 8080
- backendRefs:
- name: backend-v1
port: 8080
EOF
Po utworzeniu zasobu usługi HTTPRoute upewnij się, że trasa została zaakceptowana , a zasób Application Gateway for Containers został zaprogramowany.
kubectl get httproute http-route -n test-infra -o yaml
Sprawdź, czy stan zasobu usługi Application Gateway dla kontenerów został pomyślnie zaktualizowany.
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
Testowanie dostępu do aplikacji
Teraz możemy wysłać jakiś ruch do naszej przykładowej aplikacji za pośrednictwem nazwy FQDN przypisanej do frontonu. Użyj następującego polecenia, aby uzyskać nazwę FQDN.
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Za pomocą polecenia curl możemy zweryfikować trzy różne scenariusze:
Routing oparty na ścieżkach
W tym scenariuszu żądanie klienta wysłane do http://frontend-fqdn/bar usługi jest kierowane do usługi backend-v2.
Uruchom następujące polecenie:
curl http://$fqdn/bar
Zwróć uwagę, że kontener obsługujący żądanie to backend-v2.
Ciąg zapytania + nagłówek i routing ścieżki
W tym scenariuszu żądanie klienta wysyłane do http://frontend-fqdn/some/thing?great=example usługi z częścią "magic: foo" jest kierowane do usługi backend-v2.
Uruchom następujące polecenie:
curl http://$fqdn/some/thing?great=example -H "magic: foo"
Zwróć uwagę, że kontener obsługujący żądanie to backend-v2.
Trasa domyślna
Jeśli żaden z pierwszych dwóch scenariuszy nie jest spełniony, usługa Application Gateway dla kontenerów kieruje wszystkie pozostałe żądania do usługi backend-v1.
Uruchom następujące polecenie:
curl http://$fqdn/
Zwróć uwagę, że kontener obsługujący żądanie to backend-v1.
Gratulacje, zainstalowano kontroler usługi ALB, wdrożono aplikację zaplecza i przekierowano ruch do aplikacji za pośrednictwem interfejsu API bramy w usłudze Application Gateway for Containers.