Anotasi untuk Pengontrol Ingress Application Gateway

Pengenalan

Sumber daya Ingress Kubernetes dapat dianotasikan dengan pasangan kunci/nilai arbitrer. AGIC mengandalkan anotasi untuk memprogram fitur Application Gateway yang tidak dapat dikonfigurasi melalui Ingress YAML. Anotasi Ingress diterapkan ke semua pengaturan HTTP, kumpulan ujung belakang, dan listener turunan 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. Setelah itu, AGIC akan bekerja dengan sumber daya Ingress tersebut.

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 ini memungkinkan penulisan ulang jalur ujung belakang yang ditentukan di sumber daya ingress dengan prefiks yang ditentukan di anotasi ini. Hal ini memungkinkan pengguna untuk mengekspos layanan yang titik akhirnya berbeda dari nama titik akhir yang digunakan untuk mengekspos layanan di sumber daya ingress.

Penggunaan

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

Contoh

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Pada contoh di atas, kita telah mendefinisikan 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 akan memiliki awalan jalur yang mengambil alih jalur /hello ke /test/.

Catatan

Pada contoh di atas kita hanya memiliki satu aturan yang didefinisikan. Namun, anotasi berlaku untuk seluruh sumber daya ingress, jadi jika pengguna telah menentukan beberapa aturan, prefiks jalur ujung belakang akan diatur untuk setiap jalur yang ditentukan. Jadi, jika pengguna ingin aturan yang berbeda dengan prefiks jalur yang berbeda (bahkan untuk layanan yang sama) pengguna perlu menentukan sumber daya ingress yang berbeda.

Pengalihan TLS

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

Penggunaan

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

Contoh

apiVersion: extensions/v1beta1
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:
          serviceName: websocket-repeater
          servicePort: 80

Pengosongan Koneksi

connection-draining: Anotasi ini memungkinkan pengguna untuk menentukan pengaktifan pengosongan koneksi. connection-draining-timeout: Anotasi ini memungkinkan pengguna untuk menentukan waktu habis sehingga Application Gateway akan mengakhiri permintaan ke titik akhir ujung belakang yang dikosongkan.

Penggunaan

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

Contoh

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Anotasi ini memungkinkan penentuan pengaktifan afinitas berbasis cookie.

Penggunaan

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

Contoh

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Waktu permintaan habis

Anotasi ini memungkinkan penentuan waktu permintaan habis dalam hitungan detik sehingga Application Gateway akan menggagalkan permintaan jika respons tidak diterima.

Penggunaan

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

Contoh

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Gunakan IP Pribadi

Anotasi ini memungkinkan kita untuk menentukan mengekspos titik akhir ini pada IP Pribadi Application Gateway.

Catatan

  • Application Gateway tidak mendukung beberapa IP pada port yang sama (misalnya: 80/443). Ingress dengan anotasi appgw.ingress.kubernetes.io/use-private-ip: "false" dan anotasi appgw.ingress.kubernetes.io/use-private-ip: "true" pada HTTP akan mengakibatkan AGIC gagal memperbarui Application Gateway.
  • Pada Application Gateway yang tidak memiliki IP pribadi, Ingress dengan appgw.ingress.kubernetes.io/use-private-ip: "true" akan diabaikan. Hal ini akan terlihat di log pengontrol dan kejadian ingress untuk ingress dengan peringatan NoPrivateIP.

Penggunaan

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

Contoh

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 80

Protokol ujung belakang

Anotasi ini memungkinkan penentuan protokol yang harus digunakan Application Gateway saat berbicara dengan Pod. Protokol yang Didukung: http, https

Catatan

  • Walau sertifikat yang ditandatangani sendiri didukung di Application Gateway, saat ini, AGIC hanya mendukung https jika Pod menggunakan sertifikat yang ditandatangani oleh OS terkenal.
  • Pastikan untuk tidak menggunakan port 80 dengan HTTPS dan port 443 dengan HTTP pada Pod.

Penggunaan

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

Contoh

apiVersion: extensions/v1beta1
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/
        backend:
          serviceName: go-server-service
          servicePort: 443

Menulis ulang Seperangkat Aturan

Anotasi ini 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