Bagikan melalui


Anotasi untuk Pengontrol Ingress Application Gateway

Sumber daya Ingress Kubernetes dapat dianotasikan dengan pasangan kunci/nilai arbitrer. AGIC mengandalkan anotasi untuk memprogram fitur Application Gateway, yang tidak dapat dikonfigurasi menggunakan YAML Ingress. Anotasi masuk diterapkan ke semua pengaturan HTTP, kumpulan backend, dan pendengar yang berasal dari sumber daya ingress.

Daftar anotasi yang didukung

Agar sumber daya Ingress diamati oleh AGIC, sumber daya Ingress harus dianotasikan dengan kubernetes.io/ingress.class: azure/application-gateway. Hanya kemudian AGIC bekerja dengan sumber daya Ingress yang dimaksud.

Kunci Anotasi Jenis Nilai Nilai Default Nilai yang diizinkan
appgw.ingress.kubernetes.io/backend-path-prefix string nil
appgw.ingress.kubernetes.io/ssl-redirect bool false
appgw.ingress.kubernetes.io/connection-draining bool false
appgw.ingress.kubernetes.io/connection-draining-timeout int32 (detik) 30
appgw.ingress.kubernetes.io/cookie-based-affinity bool false
appgw.ingress.kubernetes.io/request-timeout int32 (detik) 30
appgw.ingress.kubernetes.io/use-private-ip bool false
appgw.ingress.kubernetes.io/backend-protocol string http http, https
appgw.ingress.kubernetes.io/rewrite-rule-set string nil

Prefiks Jalur ujung belakang

Anotasi berikut memungkinkan jalur backend yang ditentukan dalam sumber daya ingress untuk ditulis ulang dengan awalan yang ditentukan dalam anotasi ini. Ini memungkinkan pengguna untuk mengekspos layanan yang titik akhirnya berbeda dari nama titik akhir yang digunakan untuk mengekspos layanan dalam sumber daya ingress.

Penggunaan

appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-bkprefix
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 80

Dalam contoh sebelumnya, Anda telah menentukan sumber daya ingress bernama go-server-ingress-bkprefix dengan anotasi appgw.ingress.kubernetes.io/backend-path-prefix: "/test/". Anotasi memberi tahu gateway aplikasi untuk membuat pengaturan HTTP, yang memiliki penimpaan awalan jalur untuk jalur /hello ke /test/.

Catatan

Dalam contoh di atas, hanya satu aturan yang ditentukan. Namun, anotasi berlaku untuk seluruh sumber daya ingress, jadi jika pengguna menentukan beberapa aturan, awalan jalur backend akan disiapkan untuk setiap jalur yang ditentukan. Jika pengguna menginginkan aturan yang berbeda dengan awalan jalur yang berbeda (bahkan untuk layanan yang sama), mereka harus menentukan sumber daya ingress yang berbeda.

Pengalihan TLS

Application Gateway dapat dikonfigurasi untuk mengalihkan URL HTTP secara otomatis ke pasangan HTTPS mereka. Ketika anotasi ini ada dan TLS dikonfigurasi dengan benar, pengontrol Kubernetes Ingress membuat aturan perutean dengan konfigurasi pengalihan dan menerapkan perubahan pada Application Gateway Anda. Pengalihan yang dibuat akan berupa HTTP 301 Moved Permanently.

Penggunaan

appgw.ingress.kubernetes.io/ssl-redirect: "true"

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-redirect
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
   - hosts:
     - www.contoso.com
     secretName: testsecret-tls
  rules:
  - host: www.contoso.com
    http:
      paths:
      - backend:
          service:
            name: websocket-repeater
            port:
              number: 80

Pengosongan Koneksi

connection-draining: Anotasi ini memungkinkan kami menentukan apakah akan mengaktifkan pengurasan koneksi. connection-draining-timeout: Anotasi ini memungkinkan kami menentukan batas waktu, setelah itu Application Gateway mengakhiri permintaan ke titik akhir backend yang menguras.

Penggunaan

appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-drain
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/connection-draining: "true"
    appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 80

Anotasi berikut memungkinkan Anda menentukan apakah akan mengaktifkan afinitas berbasis cookie.

Penggunaan

appgw.ingress.kubernetes.io/cookie-based-affinity: "true"

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-affinity
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 80

Waktu permintaan habis

Anotasi berikut memungkinkan Anda menentukan batas waktu permintaan dalam hitung detik, setelah itu Application Gateway gagal meminta jika respons tidak diterima.

Penggunaan

appgw.ingress.kubernetes.io/request-timeout: "20"

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-timeout
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/request-timeout: "20"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 80

Gunakan IP Pribadi

Anotasi berikut memungkinkan Anda menentukan apakah akan mengekspos titik akhir ini pada IP Privat Application Gateway.

Catatan

  • Untuk Application Gateway yang tidak memiliki IP privat, Ingress dengan appgw.ingress.kubernetes.io/use-private-ip: "true" diabaikan. Ini tercermin dalam log pengontrol dan peristiwa ingress untuk ingress tersebut dengan NoPrivateIP peringatan.

Penggunaan

appgw.ingress.kubernetes.io/use-private-ip: "true"

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-timeout
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 80

Protokol ujung belakang

Anotasi berikut memungkinkan Anda menentukan protokol yang harus digunakan Application Gateway saat berkomunikasi dengan pod. Protokol yang didukung adalah http dan https.

Catatan

Meskipun sertifikat yang ditandatangani sendiri didukung di Application Gateway, saat ini AGIC hanya mendukung https ketika pod menggunakan sertifikat yang ditandatangani oleh CA terkenal.

Jangan gunakan port 80 dengan HTTPS dan port 443 dengan HTTP pada pod.

Penggunaan

appgw.ingress.kubernetes.io/backend-protocol: "https"

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-timeout
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/backend-protocol: "https"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 443

Refrite Seperangkat Aturan

Anotasi berikut memungkinkan Anda menetapkan aturan penulisan ulang yang ada yang diatur ke aturan perutean permintaan yang sesuai.

Penggunaan

appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>

Contoh

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-bkprefix
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/rewrite-rule-set: add-custom-response-header
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 8080