Uygulama yönlendirme eklentisiyle gelişmiş NGINX giriş denetleyicisi ve giriş yapılandırmaları
Uygulama yönlendirme eklentisi, giriş denetleyicilerini ve giriş nesnelerini yapılandırmanın iki yolunu destekler:
- NGINX giriş denetleyicisinin birden çok denetleyici oluşturma, özel yük dengeleyicileri yapılandırma ve statik IP adreslerini ayarlama gibi yapılandırması.
- Ek açıklamalar aracılığıyla giriş kaynağı başına yapılandırma.
Önkoşullar
Uygulama yönlendirme eklentisine sahip bir AKS kümesi.
AKS kümenize bağlanma
Yerel bilgisayarınızdan Kubernetes kümesine bağlanmak için Kubernetes komut satırı istemcisini kullanırsınız kubectl
. az aks install-cli komutunu kullanarak yerel olarak yükleyebilirsiniz. Azure Cloud Shell'i kullanıyorsanız kubectl
zaten yüklüdür.
komutunu kullanarak kubectl'yi Kubernetes kümenize bağlanacak şekilde az aks get-credentials
yapılandırın.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
NGINX giriş denetleyicisinin yapılandırması
Uygulama yönlendirme eklentisi, NGINX giriş denetleyicilerini yapılandırmak için adlı NginxIngressController
bir Kubernetes özel kaynak tanımı (CRD) kullanır. Daha fazla giriş denetleyicisi oluşturabilir veya mevcut yapılandırmayı değiştirebilirsiniz.
Burada, yapılandırmak için ayarlayabileceğiniz özelliklere yönelik bir NginxIngressController
başvuru bulabilirsiniz.
Özellik | Açıklama |
---|---|
ingressClassName | NGINX Giriş Denetleyicisi için kullanılan adı IngressClass . Belirtilmezse, varsayılan olarak öğesinin NginxIngressController adını kullanır. |
controllerNamePrefix | Yönetilen NGINX giriş denetleyicisi kaynaklarına ön ek eklemek için kullanılan ad. varsayılan değeridir nginx . |
loadBalancerAnnotations | Yük dengeleyici ek açıklamalarını ayarlayarak NGINX giriş denetleyicisinin hizmetinin davranışını denetlemek için bir dizi ek açıklama |
Ölçekleme | NGINX Giriş Denetleyicisinin ölçeklendirilmesi için yapılandırma seçenekleri. |
scaling.minReplicas | Giriş Denetleyicisi çoğaltmalarının sayısı için alt sınır. Varsayılan olarak 2 pod olur. |
scaling.maxReplicas | Giriş Denetleyicisi çoğaltmalarının sayısı için üst sınır. Varsayılan olarak 100 pod olur. |
scaling.threshold | NGINX Giriş Denetleyicisi podlarının iş yüküne göre ne kadar hızlı ölçeklendirilmesi gerektiğini tanımlar.
Rapid Giriş Denetleyicisinin ani ve önemli trafik artışlarını işlemek için hızlı ve agresif bir şekilde ölçeklendirilmesi anlamına gelir.
Steady daha az sayıda çoğaltmanın daha fazla işi işlemesiyle maliyet verimliliğini önceliklendirir.
Balanced , çoğu kullanım örneğinde çalışan ikisi arasında iyi bir karışımdır. Belirtilmezse, bu alan varsayılan olarak olur Balanced . |
defaultSSLCertificate | Bu özellik tarafından başvurulan gizli dizi, varsayılan arka uç hizmetine erişirken kullanılacak varsayılan sertifikayı içerir. Bu özellik sağlanmazsa NGINX otomatik olarak imzalanan bir sertifika kullanır.
tls: Bölüm girişte ayarlanmadıysa, NGINX varsayılan sertifikayı sağlar ancak HTTPS yeniden yönlendirmesini zorlamaz. |
defaultSSLCertificate.forceSSLRedirect | Bölüm belirtmeyen Girişler için yeniden tls: yönlendirmeyi zorlar. |
defaultSSLCertificate.keyVaultURI | Varsayılan SSL sertifikasının bulunabildiği Azure Key Vault URI'si. Eklentinin anahtar kasasını kullanacak şekilde yapılandırılması gerekir. |
defaultSSLCertificate.secret | Varsayılan SSL gizli dizisinin kümede olduğu adı ve ad alanını yapılandırılır. |
defaultSSLCertificate.secret.name | Gizli dizinin adı. |
defaultSSLCertificate.secret.namespace | Gizli dizinin ad alanı. |
Ortak yapılandırmalar
Varsayılan NGINX giriş denetleyicisi yapılandırmasını denetleme (önizleme)
Not
Eklentiyi etkinleştirirken NGINX giriş denetleyicisi yapılandırmasını denetleme , Kubernetes sürüm 1.30 veya üzeri ile aks-preview Azure CLI uzantısı veya sonraki sürümlerinde 7.0.0b5
kullanılabilirAPI 2024-06-02-preview
. AKS kümesi sürümünüzü denetlemek için bkz . Kullanılabilir AKS kümesi yükseltmelerini denetleme.
NGINX ile uygulama yönlendirme eklentisini etkinleştirdiğinizde, genel kullanıma yönelik Bir Azure yük dengeleyici ile yapılandırılmış içinde app-routing-namespace
adlı default
bir giriş denetleyicisi oluşturur. Bu giriş denetleyicisi giriş sınıfı adını webapprouting.kubernetes.azure.com
kullanır.
Ayrıca, varsayılanın genel ip mi yoksa iç IP mi aldığını veya eklentiyi etkinleştirirken oluşturulup oluşturulmayabileceğini de denetleyebilirsiniz.
Olası yapılandırma seçenekleri şunlardır:
-
None
: Varsayılan Nginx giriş denetleyicisi oluşturulmaz ve zaten varsa silinmez. Kullanıcılar, istenirse varsayılanNginxIngressController
özel kaynağı el ile silmelidir. -
Internal
: Varsayılan Nginx giriş denetleyicisi bir iç yük dengeleyici ile oluşturulur. Özel kaynakta dış kaynak yapmak için yapılan tüm ek açıklamalarınNginxIngressController
üzerine yazılır. -
External
: Dış yük dengeleyici ile oluşturulan varsayılan Nginx giriş denetleyicisi. Özel kaynakta yapılan tüm ek açıklamalarınNginxIngressController
dahili hale getirilecek değişikliklerinin üzerine yazılır. -
AnnotationControlled
(varsayılan): Varsayılan Nginx giriş denetleyicisi bir dış yük dengeleyici ile oluşturulur. Kullanıcılar yük dengeleyici ek açıklamalarını yapılandırmak için varsayılanNginxIngressController
özel kaynağı düzenleyebilir.
Kümeyi oluştururken varsayılan giriş denetleyicisi yapılandırmasını denetleme
Yeni bir kümede uygulama yönlendirmeyi az aks create
etkinleştirmek için ve --app-routing-default-nginx-controller
bayraklarını belirterek --enable-app-routing
komutunu kullanın. öğesini <DefaultIngressControllerType>
daha önce açıklanan yapılandırma seçeneklerinden birine ayarlamanız gerekir.
az aks create \
--resource-group <ResourceGroupName> \
--name <ClusterName> \
--location <Location> \
--enable-app-routing \
--app-routing-default-nginx-controller <DefaultIngressControllerType>
Mevcut bir kümede varsayılan giriş denetleyicisi yapılandırmasını güncelleştirme
Mevcut bir kümede uygulama yönlendirme varsayılan giriş denetleyicisi yapılandırmasını güncelleştirmek için bayrağını az aks approuting update
--nginx
belirterek komutunu kullanın. öğesini <DefaultIngressControllerType>
daha önce açıklanan yapılandırma seçeneklerinden birine ayarlamanız gerekir.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --nginx <DefaultIngressControllerType>
Başka bir genel kullanıma yönelik NGINX giriş denetleyicisi oluşturma
Genel kullanıma yönelik Azure Load Balancer ile başka bir NGINX giriş denetleyicisi oluşturmak için:
Aşağıdaki YAML bildirimini nginx-public-controller.yaml adlı yeni bir dosyaya kopyalayın ve dosyayı yerel bilgisayarınıza kaydedin.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-public spec: ingressClassName: nginx-public controllerNamePrefix: nginx-public
komutunu kullanarak
kubectl apply
NGINX giriş denetleyicisi kaynaklarını oluşturun.kubectl apply -f nginx-public-controller.yaml
Aşağıdaki örnek çıktı, oluşturulan kaynağı gösterir:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-public created
Özel IP adresi olan bir iç NGINX giriş denetleyicisi oluşturma
Özel IP adresine sahip iç kullanıma yönelik Azure Load Balancer ile NGINX giriş denetleyicisi oluşturmak için:
Aşağıdaki YAML bildirimini nginx-internal-controller.yaml adlı yeni bir dosyaya kopyalayın ve dosyayı yerel bilgisayarınıza kaydedin.
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"
komutunu kullanarak
kubectl apply
NGINX giriş denetleyicisi kaynaklarını oluşturun.kubectl apply -f nginx-internal-controller.yaml
Aşağıdaki örnek çıktı, oluşturulan kaynağı gösterir:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Statik IP adresiyle NGINX giriş denetleyicisi oluşturma
Azure Load Balancer'da statik IP adresine sahip bir NGINX giriş denetleyicisi oluşturmak için:
komutunu kullanarak
az group create
bir Azure kaynak grubu oluşturun.az group create --name myNetworkResourceGroup --location eastus
komutunu kullanarak
az network public ip create
statik bir genel IP adresi oluşturun.az network public-ip create \ --resource-group myNetworkResourceGroup \ --name myIngressPublicIP \ --sku Standard \ --allocation-method static
Not
AKS kümenizde Temel SKU yük dengeleyici kullanıyorsanız genel IP tanımlarken parametresi için
--sku
Basic kullanın. Yalnızca Temel SKU IP'leri Temel SKU yük dengeleyici ile ve yalnızca Standart SKU IP'leri Standart SKU yük dengeleyicilerle çalışır.AKS kümesi tarafından kullanılan küme kimliğinin komutunu kullanarak
az role assignment create
genel IP'nin kaynak grubuna temsilci izinleri olduğundan emin olun.Not
VE'yi
<ClusterResourceGroup>
AKS kümenizin adı ve kaynak grubu adıyla güncelleştirin<ClusterName>
.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}
Aşağıdaki YAML bildirimini nginx-staticip-controller.yaml adlı yeni bir dosyaya kopyalayın ve dosyayı yerel bilgisayarınıza kaydedin.
Not
Genel IP adı için veya
service.beta.kubernetes.io/azure-pip-name
örnek YAML'de gösterildiği gibi bir IPv4 adresi veservice.beta.kubernetes.io/azure-load-balancer-ipv6
bir IPv6 adresi için kullanabilirsinizservice.beta.kubernetes.io/azure-load-balancer-ipv4
. Ek açıklamanınservice.beta.kubernetes.io/azure-pip-name
eklenmesi en verimli LoadBalancer oluşturma işlemini sağlar ve olası azaltmayı önlemek için kesinlikle önerilir.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"
komutunu kullanarak
kubectl apply
NGINX giriş denetleyicisi kaynaklarını oluşturun.kubectl apply -f nginx-staticip-controller.yaml
Aşağıdaki örnek çıktı, oluşturulan kaynağı gösterir:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-static created
Giriş denetleyicisinin oluşturulduğunu doğrulayın
komutunu kullanarak kubectl get nginxingresscontroller
NGINX giriş denetleyicisinin durumunu doğrulayabilirsiniz.
Not
'NginxIngressController' oluştururken kullandığınız adla güncelleştirin <IngressControllerName>
.
kubectl get nginxingresscontroller -n <IngressControllerName>
Aşağıdaki örnek çıktı, oluşturulan kaynağı gösterir. Denetleyicinin kullanılabilir olması birkaç dakika sürebilir:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE
nginx-public nginx-public nginx True
Sorunları gidermek için koşulları da görüntüleyebilirsiniz:
kubectl get nginxingresscontroller -n <IngressControllerName> -o jsonpath='{range .items[*].status.conditions[*]}{.lastTransitionTime}{"\t"}{.status}{"\t"}{.type}{"\t"}{.message}{"\n"}{end}'
Aşağıdaki örnek çıktı, iyi durumdaki bir giriş denetleyicisinin koşullarını gösterir:
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
Giriş denetleyicisini girişte kullanma
Aşağıdaki YAML bildirimini ingress.yaml adlı yeni bir dosyaya kopyalayın ve dosyayı yerel bilgisayarınıza kaydedin.
Not
DNS ana bilgisayar adınızla güncelleştirin
<Hostname>
.<IngressClassName>
, oluştururken tanımladığınızdırNginxIngressController
.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
komutunu kullanarak
kubectl apply
küme kaynaklarını oluşturun.kubectl apply -f ingress.yaml -n hello-web-app-routing
Aşağıdaki örnek çıktı, oluşturulan kaynağı gösterir:
ingress.networking.k8s.io/aks-helloworld created
Yönetilen Girişin oluşturulduğunu doğrulama
komutunu kullanarak yönetilen Girişin oluşturulduğunu kubectl get ingress
doğrulayabilirsiniz.
kubectl get ingress -n hello-web-app-routing
Aşağıdaki örnek çıktıda, oluşturulan yönetilen Giriş gösterilmektedir. Giriş sınıfı, ana bilgisayar ve IP adresi farklı olabilir:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Giriş denetleyicilerini temizleme
komutunu kullanarak NGINX giriş denetleyicisini kubectl delete nginxingresscontroller
kaldırabilirsiniz.
Not
öğesini oluştururken kullandığınız adla güncelleştirin <IngressControllerName>
NginxIngressController
.
kubectl delete nginxingresscontroller -n <IngressControllerName>
Ek açıklamalar aracılığıyla giriş kaynağı başına yapılandırma
NGINX giriş denetleyicisi, davranışlarını özelleştirmek için belirli Giriş nesnelerine ek açıklamalar eklemeyi destekler.
Alana ilgili ek açıklamayı ekleyerek giriş nesnesine metadata.annotations
açıklama ekleyebilirsiniz.
Not
Ek açıklama anahtarları ve değerleri yalnızca dizeler olabilir. Boole veya sayısal değerler gibi diğer türler tırnak içine alınmalıdır; örneğin "true"
, , "false"
, "100"
.
Yaygın yapılandırmalar için bazı örnek ek açıklamalar aşağıda verilmiştir. Tam liste için NGINX giriş ek açıklamaları belgelerini gözden geçirin.
Özel maksimum gövde boyutu
NGINX için, bir istekteki boyut istemci istek gövdesinin izin verilen en büyük boyutunu aştığında istemciye 413 hatası döndürülür. Varsayılan değeri geçersiz kılmak için ek açıklamayı kullanın:
nginx.ingress.kubernetes.io/proxy-body-size: 4m
Aşağıda bu ek açıklamayı kullanan bir giriş yapılandırması örneği verilmişti:
Not
DNS ana bilgisayar adınızla güncelleştirin <Hostname>
.
<IngressClassName>
, oluştururken tanımladığınızdırNginxIngressController
.
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
Özel bağlantı zaman aşımı
NGINX giriş denetleyicisinin iş yükünüzle bağlantıyı kapatmak için beklediği zaman aşımını değiştirebilirsiniz. Tüm zaman aşımı değerleri birimsizdir ve saniyeler içinde olur. Varsayılan zaman aşımını geçersiz kılmak için, geçerli bir 120 saniyelik ara sunucu okuma zaman aşımı ayarlamak için aşağıdaki ek açıklamayı kullanın:
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
Diğer yapılandırma seçenekleri için özel zaman aşımlarını gözden geçirin.
Aşağıda bu ek açıklamayı kullanan bir giriş yapılandırması örneği verilmişti:
Not
DNS ana bilgisayar adınızla güncelleştirin <Hostname>
.
<IngressClassName>
, oluştururken tanımladığınızdırNginxIngressController
.
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
Arka uç protokolü
Varsayılan olarak NGINX giriş denetleyicisi hizmetlere ulaşmak için kullanır HTTP
. veya GRPC
gibi HTTPS
alternatif arka uç protokollerini yapılandırmak için ek açıklamayı kullanın:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
veya
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
Diğer yapılandırma seçenekleri için arka uç protokollerini gözden geçirin.
Aşağıda bu ek açıklamayı kullanan bir giriş yapılandırması örneği verilmişti:
Not
DNS ana bilgisayar adınızla güncelleştirin <Hostname>
.
<IngressClassName>
, oluştururken tanımladığınızdırNginxIngressController
.
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
Çıkış Noktaları Arası Kaynak Paylaşma (CORS)
Giriş kuralında Çıkış Noktaları Arası Kaynak Paylaşımı'nı (CORS) etkinleştirmek için ek açıklamayı kullanın:
nginx.ingress.kubernetes.io/enable-cors: "true"
Diğer yapılandırma seçenekleri için CORS'yi etkinleştirme'yi gözden geçirin.
Aşağıda bu ek açıklamayı kullanan bir giriş yapılandırması örneği verilmişti:
Not
DNS ana bilgisayar adınızla güncelleştirin <Hostname>
.
<IngressClassName>
, oluştururken tanımladığınızdırNginxIngressController
.
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
SSL yeniden yönlendirmesini devre dışı bırakma
Varsayılan olarak, TLS giriş için etkinleştirildiyse denetleyici (308) HTTPS'ye yönlendirir. Belirli giriş kaynakları için bu özelliği devre dışı bırakmak için ek açıklamayı kullanın:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
Diğer yapılandırma seçenekleri için yeniden yönlendirme aracılığıyla sunucu tarafı HTTPS zorlamasını gözden geçirin.
Aşağıda bu ek açıklamayı kullanan bir giriş yapılandırması örneği verilmişti:
Not
DNS ana bilgisayar adınızla güncelleştirin <Hostname>
.
<IngressClassName>
, oluştururken tanımladığınızdırNginxIngressController
.
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
URL yeniden yazma
Bazı senaryolarda, arka uç hizmetindeki kullanıma sunulan URL, Giriş kuralında belirtilen yoldan farklıdır. Yeniden yazma olmadan herhangi bir istek 404 döndürür. Bu yapılandırma, aynı etki alanı altında iki farklı web uygulamasına hizmet kullanabileceğiniz yol tabanlı yönlendirmede kullanışlıdır. Ek açıklamayı kullanarak hizmet tarafından beklenen yolu ayarlayabilirsiniz:
nginx.ingress.kubernetes.io/rewrite-target": /$2
Aşağıda bu ek açıklamayı kullanan bir giriş yapılandırması örneği verilmişti:
Not
DNS ana bilgisayar adınızla güncelleştirin <Hostname>
.
<IngressClassName>
, oluştururken tanımladığınızdırNginxIngressController
.
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
Sonraki adımlar
Uygulamanızın performansını ve kullanımını analiz etme kapsamında Grafana'da Prometheus ile uygulama yönlendirme eklentisine dahil edilen giriş-nginx denetleyicisi ölçümlerini izleme hakkında bilgi edinin.
Azure Kubernetes Service