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.
Anda dapat membuat anotasi sumber daya ingress Kubernetes dengan pasangan kunci/nilai arbitrer. Application Gateway Ingress Controller (AGIC) bergantung pada anotasi untuk memprogram fitur Azure Application Gateway yang tidak dapat dikonfigurasi melalui YAML ingress. Anotasi ingress diterapkan ke semua pengaturan HTTP, kumpulan backend, dan listener yang berasal dari sumber daya ingress.
Petunjuk
Pertimbangkan Application Gateway for Containers sebagai solusi pintu masuk Kubernetes Anda. Untuk informasi lebih lanjut, lihat Quickstart: Deploy Application Gateway for Containers ALB Controller.
Daftar anotasi yang didukung
Agar AGIC mengamati sumber daya ingress, sumber daya harus dianotasi dengan kubernetes.io/ingress.class: azure/application-gateway
.
Prefiks Jalur ujung belakang
Anotasi berikut memungkinkan jalur backend yang ditentukan dalam sumber daya ingress untuk ditulis ulang dengan awalan yang ditentukan. Gunakan untuk mengekspos layanan yang titik akhirnya berbeda dari nama titik akhir yang Anda gunakan 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
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
Contoh sebelumnya mendefinisikan sumber daya ingress bernama go-server-ingress-bkprefix
dengan anotasi bernama appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
. Anotasi memberi tahu Application Gateway untuk membuat pengaturan HTTP dengan penggantian awalan jalur dari jalur /hello
ke /test/
.
Contoh hanya mendefinisikan satu aturan. Namun, anotasi berlaku untuk seluruh sumber daya ingress. Jadi, jika Anda menentukan beberapa aturan, Anda menyiapkan awalan jalur backend untuk setiap jalur yang ditentukan. Jika Anda menginginkan aturan yang berbeda dengan awalan jalur yang berbeda (bahkan untuk layanan yang sama), Anda perlu menentukan sumber daya ingress yang berbeda.
Nama Host Backend
Gunakan anotasi berikut untuk menentukan nama host yang harus digunakan Application Gateway saat berbicara dengan pod.
Penggunaan
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-timeout
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-hostname: "internal.example.com"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Uji Kesehatan Khusus
Anda dapat mengonfigurasi Application Gateway untuk mengirim pemeriksaan kesehatan kustom ke kumpulan alamat backend. Ketika anotasi berikut ada, pengontrol ingress Kubernetes membuat probe kustom untuk memantau aplikasi backend. Pengontrol kemudian menerapkan perubahan pada Application Gateway.
-
health-probe-hostname
: Anotasi ini memungkinkan nama host kustom pada deteksi status kesehatan. -
health-probe-port
: Anotasi ini mengonfigurasi port kustom untuk pengujian kesehatan. -
health-probe-path
: Anotasi ini mendefinisikan jalur untuk pemeriksaan kesehatan. -
health-probe-status-codes
: Anotasi ini memungkinkan pengecekan kesehatan untuk menerima kode status HTTP yang berbeda. -
health-probe-interval
: Anotasi ini mendefinisikan interval di mana pemeriksaan kesehatan dilakukan. -
health-probe-timeout
: Anotasi ini mendefinisikan berapa lama probe kesehatan menunggu respons sebelum gagal. -
health-probe-unhealthy-threshold
: Anotasi ini mendefinisikan berapa banyak probe kesehatan yang harus gagal agar backend ditandai sebagai tidak sehat.
Penggunaan
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 80
appgw.ingress.kubernetes.io/health-probe-path: "/"
appgw.ingress.kubernetes.io/health-probe-status-codes: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 30
appgw.ingress.kubernetes.io/health-probe-timeout: 30
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/health-probe-hostname: "contoso.com"
appgw.ingress.kubernetes.io/health-probe-port: 81
appgw.ingress.kubernetes.io/health-probe-path: "/probepath"
appgw.ingress.kubernetes.io/health-probe-status-codes: "100-599"
appgw.ingress.kubernetes.io/health-probe-interval: 31
appgw.ingress.kubernetes.io/health-probe-timeout: 31
appgw.ingress.kubernetes.io/health-probe-unhealthy-threshold: 2
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Pengalihan TLS
Anda dapat mengonfigurasi Application Gateway untuk mengalihkan URL HTTP secara otomatis ke mitra HTTPS mereka. Ketika anotasi ini ada dan TLS dikonfigurasi dengan benar, controller ingress Kubernetes membuat aturan perutean dengan konfigurasi pengalihan. Pengontrol kemudian menerapkan perubahan pada instans Application Gateway Anda. Pengalihan yang dibuat adalah 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
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
Pengurasan Koneksi
Gunakan anotasi berikut jika Anda ingin menggunakan pengurasan koneksi:
-
connection-draining
: Anotasi ini menentukan apakah akan mengaktifkan pengurasan koneksi. -
connection-draining-timeout
: Anotasi ini 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
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
Afinitas Berbasis Cookie
Gunakan anotasi berikut untuk 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
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
Permintaan Kedaluwarsa
Gunakan anotasi berikut untuk menentukan batas waktu permintaan dalam detik. Setelah batas waktu berakhir, Application Gateway gagal memproses permintaan 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
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
Gunakan anotasi berikut untuk menentukan apakah akan mengekspos titik akhir ini pada alamat IP privat Application Gateway.
Untuk instans Application Gateway yang tidak memiliki IP privat, ingress dengan appgw.ingress.kubernetes.io/use-private-ip: "true"
diabaikan. Log pengendali dan peristiwa masuk untuk ingress tersebut menunjukkan peringatan NoPrivateIP
.
Penggunaan
appgw.ingress.kubernetes.io/use-private-ip: "true"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-privateip
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 80
Mengganti Port Frontend
Gunakan anotasi berikut untuk mengonfigurasi pendengar frontend untuk menggunakan port selain 80 untuk HTTP dan 443 untuk HTTPS.
Jika port berada dalam rentang resmi Application Gateway (1 hingga 64999), pendengar dibuat pada port tertentu ini. Jika Anda mengatur port yang tidak valid atau tidak ada port dalam anotasi, konfigurasi menggunakan default 80 atau 443.
Penggunaan
appgw.ingress.kubernetes.io/override-frontend-port: "port"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-overridefrontendport
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/override-frontend-port: "8080"
spec:
rules:
- http:
paths:
- path: /hello/
backend:
service:
name: store-service
port:
number: 80
pathType: Exact
Catatan
Permintaan eksternal perlu menargetkan http://somehost:8080
alih-alih http://somehost
.
Protokol ujung belakang
Gunakan hal berikut untuk menentukan protokol yang harus digunakan Application Gateway saat berkomunikasi dengan pod. Protokol yang didukung adalah HTTP dan HTTPS.
Meskipun sertifikat yang ditandatangani sendiri didukung di Application Gateway, AGIC saat ini hanya mendukung HTTPS ketika pod menggunakan sertifikat yang ditandatangani oleh otoritas sertifikat 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
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Ekstensi Nama Host
Anda dapat mengonfigurasi Application Gateway untuk menerima beberapa nama host.
hostname-extension
Gunakan anotasi untuk menentukan beberapa nama host, termasuk nama host kartubebas. Tindakan ini menambahkan nama host ke FQDN yang ditentukan dalam informasi masuk spec.rules.host
pada pendengar frontend, sehingga dikonfigurasi sebagai pendengar multisitus.
Penggunaan
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-multisite
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/hostname-extension: "hostname1, hostname2"
spec:
rules:
- host: contoso.com
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 443
Contoh sebelumnya mengonfigurasi pendengar untuk menerima lalu lintas untuk nama hostname1.contoso.com
host dan hostname2.contoso.com
.
Kebijakan WAF untuk Rute
Gunakan anotasi berikut untuk melampirkan kebijakan firewall aplikasi web (WAF) yang ada ke daftar jalur untuk host dalam sumber daya ingress Kubernetes yang sedang diannotasi. Kebijakan WAF diterapkan pada /ad-server
URL dan /auth
.
Penggunaan
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SampleRG/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/AGICWAFPolcy"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ad-server-ingress
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
spec:
rules:
- http:
paths:
- path: /ad-server
backend:
service:
name: ad-server
port:
number: 80
pathType: Exact
- path: /auth
backend:
service:
name: auth-server
port:
number: 80
pathType: Exact
Sertifikat SSL Application Gateway
Anda dapat mengonfigurasi sertifikat SSL untuk Application Gateway dari file sertifikat PFX lokal atau referensi ke ID rahasia tanpa versi di Azure Key Vault. Ketika terdapat catatan dengan nama sertifikat dan sertifikat tersebut sudah dipasang di Application Gateway, pengontrol ingress Kubernetes kemudian membuat aturan perutean dengan pendengar HTTPS dan menerapkan perubahan tersebut pada instans Application Gateway Anda. Anda juga dapat menggunakan appgw-ssl-certificate
anotasi bersama dengan anotasi ssl-redirect
dalam kasus pengalihan SSL.
Catatan
Anotasi appgw-ssl-certificate
diabaikan ketika spesifikasi TLS didefinisikan dalam ingress secara bersamaan. Jika Anda menginginkan sertifikat yang berbeda dengan host yang berbeda (penghentian beberapa sertifikat TLS), Anda perlu menentukan sumber daya ingress yang berbeda.
Penggunaan
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Profil SSL Gerbang Aplikasi
Anda dapat mengonfigurasi profil SSL pada instans Application Gateway per pendengar. Ketika anotasi ada dengan nama profil dan profil telah diinstal sebelumnya di Application Gateway, pengontrol ingress Kubernetes membuat aturan penelusuran dengan penerima HTTPS, lalu menerapkan perubahan pada instans Application Gateway Anda.
Penggunaan
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "name-of-appgw-installed-certificate"
appgw.ingress.kubernetes.io/appgw-ssl-profile: "SampleSSLProfile"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Sertifikat Root Tepercaya Application Gateway
Anda sekarang dapat mengonfigurasi sertifikat akar Anda sendiri ke Application Gateway untuk dipercaya melalui AGIC. Anda dapat menggunakan appgw-trusted-root-certificate
anotasi bersama dengan backend-protocol
anotasi untuk menunjukkan enkripsi SSL end-to-end. Jika Anda menentukan beberapa sertifikat akar, pisahkan dengan koma; misalnya, name-of-my-root-cert1,name-of-my-root-cert2
.
Penggunaan
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-certificate
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-protocol: "https"
appgw.ingress.kubernetes.io/appgw-trusted-root-certificate: "name-of-my-root-cert1"
spec:
rules:
- host: www.contoso.com
http:
paths:
- backend:
service:
name: websocket-repeater
port:
number: 80
Menulis Ulang Set Aturan
Gunakan anotasi berikut untuk menetapkan aturan penulisan ulang yang sudah ada 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
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
Menulis ulang Sumber Daya Kustom Seperangkat Aturan
Catatan
Rilis Application Gateway untuk Kontainer memperkenalkan banyak performa, ketahanan, dan perubahan fitur. Pertimbangkan menggunakan Application Gateway untuk Containers bagi penyebaran Anda selanjutnya.
Anda dapat menemukan aturan penulisan ulang URL untuk Application Gateway untuk Kontainer dalam artikel ini tentang API Gateway dan artikel ini tentang API Ingress. Anda dapat menemukan aturan penulisan ulang header untuk Application Gateway untuk Kontainer dalam artikel ini tentang Gateway API.
Application Gateway memungkinkan Anda menulis ulang konten permintaan dan respons yang dipilih. Dengan fitur ini, Anda dapat menerjemahkan URL, mengubah parameter string kueri, dan mengubah header permintaan dan respons. Anda juga dapat menggunakan fitur ini untuk menambahkan kondisi untuk memastikan bahwa URL atau header yang ditentukan ditulis ulang hanya ketika kondisi tertentu terpenuhi. Menulis ulang Sumber Daya Kustom Seperangkat Aturan membawa fitur ini ke AGIC.
Header HTTP memungkinkan klien dan server untuk meneruskan informasi tambahan dengan permintaan atau respons. Dengan menulis ulang header ini, Anda dapat menyelesaikan tugas penting seperti menambahkan bidang header terkait keamanan (misalnya, HSTS
atau X-XSS-Protection
), menghapus bidang header respons yang mungkin mengungkapkan informasi sensitif, dan menghapus informasi port dari X-Forwarded-For
header.
Dengan kemampuan penulisan ulang URL, Anda dapat:
- Tulis ulang nama host, jalur, dan string kueri URL permintaan.
- Pilih untuk menulis ulang URL semua permintaan atau hanya permintaan yang cocok dengan satu atau beberapa kondisi yang Anda tetapkan. Kondisi ini didasarkan pada properti permintaan dan respons (header permintaan, header respons, dan variabel server).
- Pilih untuk merutekan permintaan berdasarkan URL asli atau URL yang ditulis ulang.
Catatan
Fitur ini didukung sejak 1.6.0-rc1. Gunakan appgw.ingress.kubernetes.io/rewrite-rule-set
, yang memungkinkan penggunaan seperangkat aturan penulisan ulang yang ada di Application Gateway.
Penggunaan
appgw.ingress.kubernetes.io/rewrite-rule-set-custom-resource
Contoh
apiVersion: appgw.ingress.azure.io/v1beta1
kind: AzureApplicationGatewayRewrite
metadata:
name: my-rewrite-rule-set-custom-resource
spec:
rewriteRules:
- name: rule1
ruleSequence: 21
conditions:
- ignoreCase: false
negate: false
variable: http_req_Host
pattern: example.com
actions:
requestHeaderConfigurations:
- actionType: set
headerName: incoming-test-header
headerValue: incoming-test-value
responseHeaderConfigurations:
- actionType: set
headerName: outgoing-test-header
headerValue: outgoing-test-value
urlConfiguration:
modifiedPath: "/api/"
modifiedQueryString: "query=test-value"
reroute: false
Prioritas Aturan
Anotasi berikut memungkinkan pengontrol masuk Application Gateway secara eksplisit mengatur prioritas aturan perutean permintaan terkait.
Penggunaan
appgw.ingress.kubernetes.io/rule-priority:
Contoh
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-server-ingress-rulepriority
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/rule-priority: 10
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: go-server-service
port:
number: 8080
Contoh sebelumnya menetapkan prioritas 10 untuk aturan pengalihan permintaan.