Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dokumen ini membantu Anda menyiapkan aplikasi contoh yang menggunakan sumber daya dari Gateway API untuk menunjukkan perutean lalu lintas berdasarkan jalur URL, string kueri, dan header. Langkah-langkah disediakan untuk:
- Buat sumber daya Gateway dengan satu pendengar HTTPS.
- Buat sumber daya HTTPRoute yang mereferensikan layanan backend.
- Gunakan HTTPRouteMatch untuk melakukan
matches
rute tersebut berdasarkan string jalur, header, dan kueri.
Latar belakang
Application Gateway untuk Kontainer memungkinkan perutean lalu lintas berdasarkan jalur URL, string kueri, dan header. Lihat contoh skenario berikut:
Prasyarat
Jika mengikuti strategi penyebaran BYO, pastikan Anda telah menyiapkan Application Gateway untuk sumber daya Kontainer dan Pengontrol ALB
Jika mengikuti strategi penyebaran terkelola ALB, pastikan Anda telah memprovisikan Pengontrol ALB dan menyediakan application Gateway untuk sumber daya Kontainer melalui sumber daya kustom ApplicationLoadBalancer.
Terapkan contoh aplikasi HTTP Terapkan file deployment.yaml berikut pada kluster Anda untuk membuat aplikasi web sampel untuk menunjukkan perutean berbasis jalur, kueri, dan header.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yaml
Perintah ini membuat yang berikut ini pada kluster Anda:
- namespace yang dipanggil
test-infra
- dua layanan yang dipanggil
backend-v1
danbackend-v2
ditest-infra
namespace layanan - dua penyebaran yang dipanggil
backend-v1
danbackend-v2
ditest-infra
namespace
- namespace yang dipanggil
Menyebarkan sumber daya API Gateway yang diperlukan
Membuat gateway:
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
Catatan
Saat Pengontrol ALB membuat Application Gateway untuk sumber daya Kontainer di ARM, pengontrol tersebut akan menggunakan konvensi penamaan berikut untuk sumber daya frontend: fe-8< karakter yang dihasilkan secara acak>
Jika Anda ingin mengubah nama frontend yang dibuat di Azure, pertimbangkan untuk mengikuti strategi bawa penyebaran Anda sendiri.
Setelah sumber daya gateway dibuat, pastikan statusnya valid, pendengar diprogram, dan alamat ditetapkan ke gateway.
kubectl get gateway gateway-01 -n test-infra -o yaml
Contoh output pembuatan gateway yang berhasil.
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
Setelah gateway dibuat, buat HTTPRoute untuk menentukan dua kecocokan yang berbeda dan layanan default untuk merutekan lalu lintas.
Cara membaca aturan berikut adalah sebagai berikut:
- Jika jalur adalah /bar, lalu lintas dirutekan ke layanan backend-v2 pada port 8080 OR
- Jika permintaan berisi header HTTP dengan nama magic dan nilai foo, URL berisi string kueri yang menentukan nama hebat dengan nilai contoh, DAN jalurnya adalah /some/thing, permintaan dikirim ke backend-v2 pada port 8080.
- Jika tidak, semua permintaan lainnya dirutekan ke layanan backend-v1 pada port 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
Setelah sumber daya HTTPRoute dibuat, pastikan rute telah Diterima dan sumber daya Application Gateway for Containers telah Diprogram.
kubectl get httproute http-route -n test-infra -o yaml
Verifikasi status sumber daya Application Gateway for Containers telah berhasil diperbarui.
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
Menguji akses ke aplikasi
Sekarang kami siap untuk mengirim beberapa lalu lintas ke aplikasi sampel kami, melalui FQDN yang ditetapkan ke frontend. Gunakan perintah berikut untuk mendapatkan FQDN.
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Dengan menggunakan perintah curl, kita dapat memvalidasi tiga skenario berbeda:
Perutean berbasis jalur
Dalam skenario ini, permintaan klien yang dikirim ke http://frontend-fqdn/bar dirutekan ke layanan backend-v2.
Jalankan perintah berikut:
curl http://$fqdn/bar
Perhatikan bahwa kontainer yang melayani permintaan adalah backend-v2.
String kueri + header + perutean jalur
Dalam skenario ini, permintaan klien yang dikirim ke http://frontend-fqdn/some/thing?great=example dengan kunci header/nilai bagian dari "magic: foo" dirutekan ke layanan backend-v2.
Jalankan perintah berikut:
curl http://$fqdn/some/thing?great=example -H "magic: foo"
Perhatikan bahwa kontainer yang melayani permintaan adalah backend-v2.
Rute default
Jika tidak satu pun dari dua skenario pertama terpenuhi, Application Gateway untuk Kontainer merutekan semua permintaan lain ke layanan backend-v1.
Jalankan perintah berikut:
curl http://$fqdn/
Perhatikan bahwa kontainer yang melayani permintaan adalah backend-v1.
Selamat, Anda telah menginstal Pengontrol ALB, menyebarkan aplikasi backend dan merutekan lalu lintas ke aplikasi melalui GATEWAY API di Application Gateway untuk Kontainer.