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.
NginxIngressController
CRD, yük dengeleyici ek açıklamalarını ayarlayarak NGINX giriş denetleyicisinin hizmetinin davranışını denetlemeye yönelik bir loadBalancerAnnotations
alana sahiptir.
Varsayılan NGINX giriş denetleyicisi
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.
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 birimsiz ve saniyeler içindedir. Varsayılan zaman aşımını geçersiz kılmak için, geçerli bir 120 saniyelik proxy 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, özellikle aynı etki alanı altında iki farklı web uygulamasına hizmet vereebileceğ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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin