Bagikan melalui


Pemisahan lalu lintas dengan Application Gateway untuk Kontainer - GATEWAY API

Dokumen ini membantu menyiapkan aplikasi contoh yang menggunakan sumber daya berikut dari Gateway API:

  • Gateway - membuat gateway dengan satu pendengar http
  • HTTPRoute - membuat rute HTTP yang mereferensikan dua layanan backend memiliki bobot yang berbeda

Latar belakang

Application Gateway untuk Kontainer memungkinkan Anda mengatur bobot dan mengalihkan lalu lintas antara target backend yang berbeda. Lihat contoh skenario berikut:

A figure showing traffic splitting with Application Gateway for Containers.

Prasyarat

  1. Jika mengikuti strategi penyebaran BYO, pastikan Anda menyiapkan Application Gateway untuk sumber daya Kontainer dan Pengontrol ALB.

  2. 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.

  3. Sebarkan contoh aplikasi HTTP:
    Terapkan file deployment.yaml berikut pada kluster Anda untuk membuat contoh aplikasi web untuk menunjukkan dukungan round robin pemisahan/pembobotan lalu lintas.

    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 dan backend-v2 di test-infra namespace layanan
    • Dua penyebaran yang dipanggil backend-v1 dan backend-v2 di test-infra namespace

Menyebarkan sumber daya API Gateway yang diperlukan

Membuat gateway:

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

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: gateway-01-http
    supportedKinds:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute

Setelah gateway dibuat, buat 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

Setelah sumber daya HTTPRoute dibuat, pastikan rute Diterima dan sumber daya Application Gateway for Containers diprogram.

kubectl get httproute traffic-split-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}')

Curling FQDN ini harus mengembalikan respons dari backend/pod seperti yang dikonfigurasi pada 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

Selamat, Anda telah menginstal Pengontrol ALB, menyebarkan aplikasi backend dan merutekan lalu lintas ke aplikasi melalui ingress di Application Gateway untuk Kontainer.