Dzielenie ruchu za pomocą usługi Application Gateway dla kontenerów — interfejs API bramy
Ten dokument ułatwia skonfigurowanie przykładowej aplikacji korzystającej z następujących zasobów z interfejsu API bramy:
- Brama — tworzenie bramy z jednym odbiornikiem http
- HTTPRoute — tworzenie trasy HTTP odwołującej się do dwóch usług zaplecza o różnych wagach
Tło
Usługa Application Gateway dla kontenerów umożliwia ustawianie wag i przenoszenie ruchu między różnymi obiektami docelowymi zaplecza. 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 obsługi działania okrężnego podziału ruchu/ważonego.kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/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/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
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: gateway-01-http
supportedKinds:
- group: gateway.networking.k8s.io
kind: HTTPRoute
Po utworzeniu bramy utwórz usługę HTTPRoute
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: traffic-split-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
rules:
- backendRefs:
- name: backend-v1
port: 8080
weight: 50
- name: backend-v2
port: 8080
weight: 50
EOF
Po utworzeniu zasobu usługi HTTPRoute upewnij się, że trasa jest zaakceptowana , a zasób Application Gateway for Containers jest zaprogramowany.
kubectl get httproute traffic-split-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}')
Ograniczenie tej nazwy FQDN powinno zwracać odpowiedzi z zapleczy/zasobników zgodnie z konfiguracją w usłudze HTTPRoute.
# this curl command will return 50% of the responses from backend-v1
# and the remaining 50% of the responses from backend-v2
watch -n 1 curl http://$fqdn
Gratulacje, zainstalowano kontroler usługi ALB, wdrożono aplikację zaplecza i przekierowano ruch do aplikacji za pośrednictwem ruchu przychodzącego w usłudze Application Gateway for Containers.