Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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. Podano kroki, aby:
- Utwórz zasób Gateway 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ć
matchestę trasę na podstawie ścieżki, nagłówka i ciągu zapytania.
Kontekst
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 stosujesz strategię wdrażania BYO, upewnij się, że skonfigurowałeś usługę Application Gateway dla zasobów kontenerowych i kontroler ALB
Jeśli wykonujesz strategię zarządzanego wdrażania ALB, upewnij się, że zapewniłeś kontroler ALB i zapewniłeś zasoby 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.yamlTo polecenie tworzy w klastrze następujące elementy:
- przestrzeń nazw o nazwie
test-infra - dwie usługi o nazwie
backend-v1ibackend-v2wtest-infraprzestrzeni nazw - dwa wdrożenia o nazwie
backend-v1ibackend-v2wtest-infraprzestrzeni nazw
- przestrzeń nazw o nazwie
Wdróż wymagane zasoby Gateway API
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 / Notatka
Gdy kontroler usługi ALB tworzy zasoby usługi Application Gateway for Containers w usłudze Azure Resource Manager, używa następującej konwencji nazewnictwa dla zasobu frontonu: fe-<eight randomly generated characters>.
Jeśli chcesz zmienić nazwę zasobu interfejsu frontowego utworzonego w Azure, rozważ zastosowanie strategii wdrożenia 'bring-your-own'.
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ładowy wynik pomyślnie utworzonej 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ści foo, adres URL zawiera ciąg zapytania definiujący nazwę great z wartością example, a ścieżka to /some/thing, żądanie jest wysyłane do backend-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
Wskazówka
Usługa Application Gateway for Containers obsługuje dopasowywanie wyrażeń regularnych dla reguł headers, queryParams i path przy użyciu składni Regular Expression 2 (RE2). Więcej informacji można znaleźć w specyfikacji Gateway API.
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 jesteśmy gotowi wysłać ruch do naszej przykładowej aplikacji za pośrednictwem FQDN przypisanego do frontend. Użyj następującego polecenia, aby uzyskać pełną nazwę domeny (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 jest kierowane do backend-v2.
Uruchom następujące polecenie:
curl http://$fqdn/bar
Zwróć uwagę, że kontener obsługujący żądanie to backend-v2.
Routing ciągu zapytania + nagłówka + ścieżki
W tym scenariuszu żądanie klienta wysyłane do http://frontend-fqdn/some/thing?great=example z nagłówkiem o kluczu/wartoś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 ALB, wdrożono aplikację zaplecza i przekierowano ruch do aplikacji za pośrednictwem Gateway API na bramie aplikacji dla kontenerów.