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.
Ekstensi perutean aplikasi mendukung dua cara untuk mengonfigurasi pengontrol masuk dan objek masuk.
- Konfigurasi pengontrol ingress NGINX seperti membuat beberapa pengontrol, mengonfigurasi load balancer privat, dan mengatur alamat IP statis.
- Konfigurasi per sumber daya masuk melalui anotasi.
Prasyarat
Kluster AKS dengan tambahan perutean aplikasi.
Hubungkan ke kluster AKS Anda
Untuk menyambungkan ke kluster Kubernetes dari komputer lokal, Anda menggunakan kubectl
, klien baris perintah Kubernetes. Anda dapat menginstalnya secara lokal menggunakan perintah az aks install-cli . Jika Anda menggunakan Azure Cloud Shell, kubectl
sudah terpasang.
Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials
.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
Konfigurasi pengendali ingress NGINX
Add-on perutean aplikasi menggunakan definisi sumber daya kustom (CRD) Kubernetes yang dipanggil NginxIngressController
untuk mengonfigurasi pengontrol ingress NGINX. Anda dapat membuat lebih banyak pengontrol ingress atau memodifikasi konfigurasi yang ada.
Tabel ini memperlihatkan referensi ke properti yang bisa Anda atur untuk mengonfigurasi NginxIngressController
.
Bidang | Tipe | Deskripsi | Diperlukan | Bawaan |
---|---|---|---|---|
controllerNamePrefix |
benang | Nama sumber daya untuk Pengontrol Ingress NGINX yang dikelola. | Ya | nginx |
customHTTPErrors |
rangkaian | Array kode kesalahan yang akan dikirim ke backend default jika terjadi kesalahan. | Tidak. | |
defaultBackendService |
obyek | Layanan untuk merutekan lalu lintas HTTP yang tidak cocok. Berisi properti berlapis: | Tidak. | |
name |
benang | Nama layanan. | Ya | |
namespace |
benang | Namespace layanan. | Ya | |
defaultSSLCertificate |
obyek | Berisi sertifikat default untuk mengakses layanan backend default. Berisi properti berlapis: | Tidak. | |
forceSSLRedirect |
Boolean | Memaksa pengalihan HTTPS saat sertifikat diatur. | Tidak. | false |
keyVaultURI |
benang | URI untuk rahasia Key Vault yang menyimpan sertifikat. | Tidak. | |
secret |
obyek | Menyimpan informasi rahasia untuk sertifikat SSL default. Berisi properti berlapis: | Tidak. | |
name |
benang | Nama rahasia. | Ya | |
namespace |
benang | Namespace rahasia. | Ya | |
httpDisabled |
Boolean | Bendera untuk menonaktifkan lalu lintas HTTP ke pengontrol. | Tidak. | |
ingressClassName |
benang | Nama IngressClass yang digunakan oleh pengontrol. | Ya | nginx.approuting.kubernetes.azure.com |
loadBalancerAnnotations |
obyek | Peta anotasi untuk mengontrol perilaku layanan pengontrol ingress NGINX dengan mengatur anotasi load balancer. | Tidak. | |
scaling |
obyek | Konfigurasi untuk menskalakan pengontrol. Berisi properti berlapis: | Tidak. | |
maxReplicas |
bilangan bulat | Batas atas untuk replika. | Tidak. | 100 |
minReplicas |
bilangan bulat | Batas minimal untuk replika. | Tidak. | 2 |
threshold |
benang | Menskalakan ambang batas yang menentukan seberapa agresif untuk menskalakan.
rapid menskalakan dengan cepat untuk lonjakan tiba-tiba, steady mendukung efektivitas biaya, dan balanced merupakan campuran. |
Tidak. | balanced |
Konfigurasi umum
Mengontrol konfigurasi pengontrol ingress NGINX default
Saat Anda mengaktifkan add-on perutean aplikasi dengan NGINX, itu membuat pengontrol ingress bernama default
di app-routing-namespace
yang dikonfigurasi dengan load balancer Azure yang menghadap publik. Pengontrol ingress itu menggunakan nama kelas ingress webapprouting.kubernetes.azure.com
.
Anda juga dapat mengontrol apakah default mendapatkan IP publik atau internal, atau jika dibuat sama sekali saat mengaktifkan add-on.
Berikut adalah opsi konfigurasi yang mungkin:
-
None
: Pengontrol ingress Nginx default tidak dibuat dan tidak akan dihapus jika sudah ada. Pengguna harus menghapus sumber daya kustom defaultNginxIngressController
secara manual jika diinginkan. -
Internal
: Pengontrol ingress Nginx default dibuat dengan load balancer internal. Perubahan anotasi apapun padaNginxIngressController
sumber daya kustom untuk membuatnya eksternal akan ditimpa. -
External
: Pengontrol ingress Nginx default yang dibuat dengan load balancer eksternal. Setiap perubahan anotasi padaNginxIngressController
sumber daya kustom yang bertujuan untuk menjadikannya internal akan ditimpa. -
AnnotationControlled
(default): Pengontrol ingress Nginx default dibuat dengan load balancer eksternal. Pengguna dapat mengedit sumber daya kustom defaultNginxIngressController
untuk mengonfigurasi anotasi load balancer.
Mengontrol konfigurasi kontroler masuk default saat membuat kluster
Untuk mengaktifkan perutean aplikasi pada kluster baru, gunakan perintah az aks create
dengan menentukan bendera --enable-app-routing
dan --app-routing-default-nginx-controller
. Anda perlu mengatur <DefaultIngressControllerType>
ke salah satu opsi konfigurasi yang dijelaskan sebelumnya.
az aks create \
--resource-group <ResourceGroupName> \
--name <ClusterName> \
--location <Location> \
--enable-app-routing \
--app-routing-default-nginx-controller <DefaultIngressControllerType>
Memperbarui konfigurasi pengontrol ingress default pada kluster yang ada
Untuk memperbarui konfigurasi pengontrol ingress default perutean aplikasi pada kluster yang ada, gunakan perintah az aks approuting update
dengan menentukan parameter --nginx
. Anda perlu mengatur <DefaultIngressControllerType>
ke salah satu opsi konfigurasi yang dijelaskan sebelumnya.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --nginx <DefaultIngressControllerType>
Buat pengontrol ingress NGINX untuk penggunaan publik tambahan
Untuk membuat pengontrol ingress NGINX lain dengan Azure Load Balancer yang dapat diakses oleh publik:
Salin manifes YAML berikut ke dalam file baru bernama nginx-public-controller.yaml dan simpan file ke komputer lokal Anda.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-public spec: ingressClassName: nginx-public controllerNamePrefix: nginx-public
Buat sumber daya pengontrol ingress NGINX menggunakan
kubectl apply
perintah .kubectl apply -f nginx-public-controller.yaml
Contoh output berikut menunjukkan sumber daya yang dibuat:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-public created
Membuat pengontrol ingress NGINX internal dengan alamat IP privat
Untuk membuat pengontrol ingress NGINX dengan Azure Load Balancer yang menghadap ke dalam dan memiliki alamat IP privat:
Salin manifes YAML berikut ke dalam file baru bernama nginx-internal-controller.yaml dan simpan file ke komputer lokal Anda.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-internal spec: ingressClassName: nginx-internal controllerNamePrefix: nginx-internal loadBalancerAnnotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Buat sumber daya pengontrol ingress NGINX menggunakan
kubectl apply
perintah .kubectl apply -f nginx-internal-controller.yaml
Contoh output berikut menunjukkan sumber daya yang dibuat:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Membuat pengontrol ingress NGINX dengan alamat IP statis
Untuk membuat pengontrol ingress NGINX dengan alamat IP statis di Azure Load Balancer:
Buat grup sumber daya Azure menggunakan
az group create
perintah .az group create --name myNetworkResourceGroup --location eastus
Buat alamat IP publik statis menggunakan
az network public ip create
perintah .az network public-ip create \ --resource-group myNetworkResourceGroup \ --name myIngressPublicIP \ --sku Standard \ --allocation-method static
Nota
Jika Anda menggunakan load balancer SKU Dasar di kluster AKS Anda, gunakan Dasar untuk
--sku
parameter saat menentukan IP publik. Hanya IP SKU Dasar yang berfungsi dengan load balancer SKU Dasar dan hanya IP SKU Standar yang berfungsi dengan load balancer SKU Standar.Pastikan identitas kluster yang digunakan oleh kluster AKS memiliki izin yang didelegasikan ke grup sumber daya IP publik menggunakan
az role assignment create
perintah .Nota
Perbarui
<ClusterName>
dan<ClusterResourceGroup>
dengan nama kluster AKS dan nama grup sumber daya Anda.CLIENT_ID=$(az aks show --name <ClusterName> --resource-group <ClusterResourceGroup> --query identity.principalId -o tsv) RG_SCOPE=$(az group show --name myNetworkResourceGroup --query id -o tsv) az role assignment create \ --assignee ${CLIENT_ID} \ --role "Network Contributor" \ --scope ${RG_SCOPE}
Salin manifes YAML berikut ke dalam file baru bernama nginx-staticip-controller.yaml dan simpan file ke komputer lokal Anda.
Nota
Anda dapat menggunakan
service.beta.kubernetes.io/azure-pip-name
untuk nama IP publik, atau menggunakanservice.beta.kubernetes.io/azure-load-balancer-ipv4
untuk alamat IPv4 danservice.beta.kubernetes.io/azure-load-balancer-ipv6
untuk alamat IPv6, seperti yang ditunjukkan dalam contoh YAML. Menambahkan anotasiservice.beta.kubernetes.io/azure-pip-name
memastikan pembuatan LoadBalancer yang paling efisien dan sangat disarankan untuk menghindari potensi pengurangan kecepatan.apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-static spec: ingressClassName: nginx-static controllerNamePrefix: nginx-static loadBalancerAnnotations: service.beta.kubernetes.io/azure-pip-name: "myIngressPublicIP" service.beta.kubernetes.io/azure-load-balancer-resource-group: "myNetworkResourceGroup"
Buat sumber daya pengontrol ingress NGINX menggunakan
kubectl apply
perintah .kubectl apply -f nginx-staticip-controller.yaml
Contoh output berikut menunjukkan sumber daya yang dibuat:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-static created
Cek bahwa pengontrol ingress telah dibuat
Anda dapat memverifikasi status pengontrol ingress NGINX menggunakan kubectl get nginxingresscontroller
perintah .
Nota
Perbarui <IngressControllerName>
dengan nama yang Anda gunakan saat membuat 'NginxIngressController''.
kubectl get nginxingresscontroller -n <IngressControllerName>
Contoh output berikut menunjukkan sumber daya yang dibuat. Mungkin perlu waktu beberapa menit agar pengontrol tersedia:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE
nginx-public nginx-public nginx True
Anda juga dapat melihat kondisi untuk memecahkan masalah apa pun:
kubectl get nginxingresscontroller -n <IngressControllerName> -o jsonpath='{range .items[*].status.conditions[*]}{.lastTransitionTime}{"\t"}{.status}{"\t"}{.type}{"\t"}{.message}{"\n"}{end}'
Contoh output berikut menunjukkan kondisi pengontrol ingress yang sehat:
2023-11-29T19:59:24Z True IngressClassReady Ingress Class is up-to-date
2023-11-29T19:59:50Z True Available Controller Deployment has minimum availability and IngressClass is up-to-date
2023-11-29T19:59:50Z True ControllerAvailable Controller Deployment is available
2023-11-29T19:59:25Z True Progressing Controller Deployment has successfully progressed
Gunakan pengontrol masuk dalam ingress
Salin manifes YAML berikut ke dalam file baru bernama ingress.yaml dan simpan file ke komputer lokal Anda.
Nota
Perbarui
<Hostname>
dengan nama host DNS Anda.<IngressClassName>
adalah salah satu yang Anda tentukan saat membuatNginxIngressController
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: <IngressClassName> rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix
Buat sumber daya kluster menggunakan
kubectl apply
perintah .kubectl apply -f ingress.yaml -n hello-web-app-routing
Contoh output berikut menunjukkan sumber daya yang dibuat:
ingress.networking.k8s.io/aks-helloworld created
Verifikasi bahwa Ingress terkelola telah dibuat
Anda dapat memverifikasi bahwa Ingress yang dikelola dibuat menggunakan perintah kubectl get ingress
.
kubectl get ingress -n hello-web-app-routing
Contoh output berikut menunjukkan Ingress terkelola yang dibuat. Kelas ingress, host, dan alamat IP mungkin berbeda:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Pembersihan pengendali ingress
Anda dapat menghapus pengontrol ingress NGINX menggunakan kubectl delete nginxingresscontroller
perintah .
Nota
Perbarui <IngressControllerName>
dengan nama yang Anda gunakan saat membuat NginxIngressController
.
kubectl delete nginxingresscontroller -n <IngressControllerName>
Konfigurasi per sumber daya ingress melalui anotasi
Pengontrol ingress NGINX mendukung penambahan anotasi ke objek Ingress tertentu untuk menyesuaikan perilaku mereka.
Anda dapat membuat anotasi objek ingress dengan menambahkan anotasi masing-masing di metadata.annotations
bidang .
Nota
Kunci dan nilai anotasi hanya dapat berupa string. Jenis lain, seperti nilai boolean atau numerik harus dikutip, yaitu "true"
, , "false"
"100"
.
Berikut adalah beberapa contoh anotasi untuk konfigurasi umum. Untuk daftar lengkap, tinjau dokumentasi anotasi ingress NGINX.
Ukuran maksimum isi kustom
Untuk NGINX, kesalahan 413 dikembalikan ke klien ketika ukuran dalam permintaan melebihi ukuran maksimum yang diizinkan dari isi permintaan klien. Untuk mengambil alih nilai default, gunakan anotasi:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
Berikut adalah contoh konfigurasi ingress menggunakan anotasi ini:
Nota
Perbarui <Hostname>
dengan nama host DNS Anda.
<IngressClassName>
adalah salah satu yang Anda tentukan saat membuat NginxIngressController
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
spec:
ingressClassName: <IngressClassName>
rules:
- host: <Hostname>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Waktu koneksi kustom habis
Anda dapat mengubah batas waktu yang ditunggu oleh pengontrol ingress NGINX untuk menutup koneksi dengan beban kerja Anda. Semua nilai waktu habis tidak memiliki satuan dan dinyatakan dalam detik. Untuk mengganti waktu habis default, gunakan anotasi berikut untuk mengatur waktu baca proksi 120 detik yang valid:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
Tinjau batas waktu kustom untuk opsi konfigurasi lainnya.
Berikut adalah contoh konfigurasi ingress menggunakan anotasi ini:
Nota
Perbarui <Hostname>
dengan nama host DNS Anda.
<IngressClassName>
adalah salah satu yang Anda tentukan saat membuat NginxIngressController
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <Hostname>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Backend Protokol
Secara default, pengontrol ingress NGINX menggunakan HTTP
untuk menjangkau layanan. Untuk mengonfigurasi protokol backend alternatif seperti HTTPS
atau GRPC
, gunakan anotasi:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
atau
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
Tinjau protokol backend untuk opsi konfigurasi lainnya.
Berikut adalah contoh konfigurasi ingress menggunakan anotasi ini:
Nota
Perbarui <Hostname>
dengan nama host DNS Anda.
<IngressClassName>
adalah salah satu yang Anda tentukan saat membuat NginxIngressController
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <Hostname>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Berbagi Sumber Daya Antar-Asal (CORS)
Untuk mengaktifkan Berbagi Sumber Daya Lintas Asal (CORS) dalam aturan Ingress, gunakan anotasi:
nginx.ingress.kubernetes.io/enable-cors: "true"
Tinjau mengaktifkan CORS untuk opsi konfigurasi lainnya.
Berikut adalah contoh konfigurasi ingress menggunakan anotasi ini:
Nota
Perbarui <Hostname>
dengan nama host DNS Anda.
<IngressClassName>
adalah salah satu yang Anda tentukan saat membuat NginxIngressController
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <Hostname>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Menonaktifkan pengalihan SSL
Secara default, pengontrol mengalihkan (308) ke HTTPS jika TLS diaktifkan untuk ingress. Untuk menonaktifkan fitur ini untuk sumber daya ingress tertentu, gunakan anotasi:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
Tinjau penerapan HTTPS sisi server melalui pengalihan untuk opsi konfigurasi lainnya.
Berikut adalah contoh konfigurasi ingress menggunakan anotasi ini:
Nota
Perbarui <Hostname>
dengan nama host DNS Anda.
<IngressClassName>
adalah salah satu yang Anda tentukan saat membuat NginxIngressController
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <Hostname>
http:
paths:
- backend:
service:
name: aks-helloworld
port:
number: 80
path: /
pathType: Prefix
Penulisan ulang URL
Dalam beberapa skenario, URL yang diekspos dalam layanan backend berbeda dari jalur yang ditentukan dalam aturan Ingress. Jika tidak ada pengaturan ulang, setiap permintaan mengembalikan 404. Konfigurasi ini berguna dengan perutean berbasis jalur di mana Anda dapat melayani dua aplikasi web yang berbeda di bawah domain yang sama. Anda dapat mengatur jalur yang diharapkan oleh layanan menggunakan anotasi:
nginx.ingress.kubernetes.io/rewrite-target": /$2
Berikut adalah contoh konfigurasi ingress menggunakan anotasi ini:
Nota
Perbarui <Hostname>
dengan nama host DNS Anda.
<IngressClassName>
adalah salah satu yang Anda tentukan saat membuat NginxIngressController
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aks-helloworld
namespace: hello-web-app-routing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: <IngressClassName>
rules:
- host: <Hostname>
http:
paths:
- path: /app-one(/|$)(.*)
pathType: Prefix
backend:
service:
name: app-one
port:
number: 80
- path: /app-two(/|$)(.*)
pathType: Prefix
backend:
service:
name: app-two
port:
number: 80
Langkah selanjutnya
Pelajari cara memantau metrik pengontrol ingress-nginx yang disertakan dengan add-on perutean aplikasi menggunakan Prometheus di Grafana sebagai bagian dari analisis performa dan penggunaan aplikasi Anda.
Azure Kubernetes Service