Uygulama yönlendirme eklentisiyle özel etki alanı adı ve SSL sertifikası ayarlama
Giriş, Azure Kubernetes Service (AKS) kümesindeki hizmetlere dış erişim sağlayan kuralları tanımlayan bir API nesnesidir. Uygulama yönlendirme eklentisi nginx Giriş sınıflarını kullanan bir Giriş nesnesi oluşturduğunuzda, eklenti AKS kümenizde bir veya daha fazla Giriş denetleyicisi oluşturur, yapılandırıp yönetir.
Bu makalede, trafiği bir Azure Key Vault'ta depolanan SSL/TLS sertifikalarıyla şifrelemek ve DNS bölgelerini yönetmek için Azure DNS'yi kullanmak için gelişmiş bir Giriş yapılandırmasının nasıl ayarlanacağı gösterilmektedir.
nginx özellikleriyle uygulama yönlendirme eklentisi
nginx ile uygulama yönlendirme eklentisi aşağıdakileri sunar:
- Yönetilen nginx Giriş denetleyicilerinin kolay yapılandırılması.
- Genel ve özel bölge yönetimi için Azure DNS gibi bir dış DNS ile tümleştirme
- Azure Key Vault gibi bir anahtar kasasında depolanan sertifikalarla SSL sonlandırma.
Önkoşullar
- Uygulama yönlendirme eklentisine sahip bir AKS kümesi.
- SSL sonlandırmayı yapılandırmak ve sertifikaları Azure'da barındırılan kasada depolamak istiyorsanız Azure Key Vault.
- Genel ve özel bölge yönetimini yapılandırmak ve bunları Azure'da barındırmak istiyorsanız Azure DNS.
- Azure Key Vault veya Azure DNS Bölgesi eklemek için Azure aboneliğinizde Sahip, Azure hesap yöneticisi veya Azure ortak yönetici rolüne sahip olmanız gerekir.
- Tüm genel DNS Bölgeleri aynı abonelikte ve Kaynak Grubunda olmalıdır.
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>
Azure Key Vault'tan alınan sertifikalarla HTTPS trafiğini sonlandırma
HTTPS trafiği desteğini etkinleştirmek için aşağıdaki önkoşullara bakın:
- Ssl sertifikası. Sertifikanız yoksa bir sertifika oluşturabilirsiniz.
Sertifikayı depolamak için Azure Key Vault oluşturma
Not
Zaten bir Azure Key Vault'nuz varsa bu adımı atlayabilirsiniz.
komutunu kullanarak az keyvault create
bir Azure Key Vault oluşturun.
az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true
Otomatik olarak imzalanan SSL sertifikası oluşturma ve dışarı aktarma
Test için, Sertifika Yetkilisi (CA) imzalı sertifika yerine otomatik olarak imzalanan bir ortak sertifika kullanabilirsiniz. Zaten bir sertifikanız varsa bu adımı atlayabilirsiniz.
Dikkat
Otomatik olarak imzalanan sertifikalar, güvenilir bir üçüncü taraf CA tarafından imzalanmayan dijital sertifikalardır. Otomatik olarak imzalanan sertifikalar, imzalanan web sitesinden veya yazılımdan sorumlu olan şirket veya geliştirici tarafından oluşturulur, verilir ve imzalanır. Bu nedenle otomatik olarak imzalanan sertifikalar genel kullanıma yönelik web siteleri ve uygulamalar için güvenli değildir. Azure Key Vault'un bazı Sertifika Yetkilileri ile güvenilir bir ortaklığı vardır.
komutunu kullanarak
openssl req
Giriş ile kullanmak üzere otomatik olarak imzalanan bir SSL sertifikası oluşturun. yerine<Hostname>
kullandığınız DNS adını eklediğinizden emin olun.openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
SSL sertifikasını dışarı aktarın ve komutunu kullanarak parola istemini
openssl pkcs12 -export
atlayın.openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
Sertifikayı Azure Key Vault'a aktarma
komutunu kullanarak SSL sertifikasını Azure Key Vault'a aktarın az keyvault certificate import
. Sertifikanız parola korumalıysa, parolayı bayrağından --password
geçirebilirsiniz.
az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]
Önemli
Eklentinin, değiştiklerinde Azure Key Vault'tan sertifikaları yeniden yüklemesini sağlamak için gizli dizi deposu CSI sürücüsünün gizli dizi otomatik döndürme özelliğini bağımsız değişkeniyle --enable-secret-rotation
etkinleştirmeniz gerekir. Otomatik döndürme etkinleştirildiğinde, sürücü pod bağlamasını ve Kubernetes gizli dizisini, tanımladığınız döndürme yoklama aralığına göre değişiklikleri düzenli aralıklarla yoklayarak güncelleştirir. Varsayılan döndürme yoklama aralığı iki dakikadır.
Azure Key Vault tümleştirmesini etkinleştirme
Uygulama yönlendirme eklentisinin etkinleştirildiği bir kümede, Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault sağlayıcısını etkinleştirmek ve gerekli rol atamalarını uygulamak için ve --attach-kv
bağımsız değişkenlerini kullanarak --enable-kv
komutunu kullanınaz aks approuting update
.
Azure Key Vault iki yetkilendirme sistemi sunar: Yönetim düzleminde çalışan Azure rol tabanlı erişim denetimi (Azure RBAC) ve hem yönetim düzleminde hem de veri düzleminde çalışan erişim ilkesi modeli. İşlem --attach-kv
, kullanılacak uygun erişim modelini seçer.
Not
komutu, az aks approuting update --attach-kv
Azure Key Vault rol atamasını oluşturmak için komutunu çalıştıran kullanıcının izinlerini kullanır. Bu rol, eklentinin yönetilen kimliğine atanır. AKS yönetilen kimlikleri hakkında daha fazla bilgi için bkz . Yönetilen kimliklerin özeti.
Azure Key Vault kaynak kimliğini alın.
KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
Ardından Azure Key Vault gizli deposu CSI sürücüsünü etkinleştirmek ve rol atamasını uygulamak için uygulama yönlendirme eklentisini güncelleştirin.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}
Azure DNS tümleştirmesini etkinleştirme
DNS bölgeleri desteğini etkinleştirmek için aşağıdaki önkoşulları gözden geçirin:
- Uygulama yönlendirme eklentisi, Giriş kaynaklarında tanımlanan konaklar için bir veya daha fazla Azure genel ve özel DNS bölgesinde kayıtları otomatik olarak oluşturacak şekilde yapılandırılabilir. Tüm genel Azure DNS bölgelerinin aynı kaynak grubunda ve tüm özel Azure DNS bölgelerinin aynı kaynak grubunda olması gerekir. Azure DNS bölgeniz yoksa bir bölge oluşturabilirsiniz.
Genel Azure DNS bölgesi oluşturma
Not
Zaten bir Azure DNS Bölgeniz varsa bu adımı atlayabilirsiniz.
komutunu kullanarak
az network dns zone create
bir Azure DNS bölgesi oluşturun.az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
Uygulama yönlendirme eklentisine Azure DNS bölgesi ekleme
Not
komutu, az aks approuting zone add
Azure DNS Bölgesi rol atamasını oluşturmak için komutunu çalıştıran kullanıcının izinlerini kullanır. Bu rol, eklentinin yönetilen kimliğine atanır. AKS yönetilen kimlikleri hakkında daha fazla bilgi için bkz . Yönetilen kimliklerin özeti.
komutunu kullanarak
az network dns zone show
DNS bölgesinin kaynak kimliğini alın ve çıkışı ZONEID adlı bir değişken olarak ayarlayın.ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
komutunu kullanarak Azure DNS ile tümleştirmeyi etkinleştirmek için eklentiyi güncelleştirin
az aks approuting zone
. DNS bölgesi kaynak kimliklerinin virgülle ayrılmış listesini geçirebilirsiniz.az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
Azure Key Vault'tan konak adı ve sertifika kullanan giriş oluşturma
Uygulama yönlendirme eklentisi, kümede webapprouting.kubernetes.azure.com adlı bir Giriş sınıfı oluşturur. Bu sınıfla bir Giriş nesnesi oluşturduğunuzda eklenti etkinleştirilir.
komutunu kullanarak Azure Key Vault'tan girişte kullanılacak sertifika URI'sini
az keyvault certificate show
alın.az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
Aşağıdaki örnek çıktı, komutundan döndürülen sertifika URI'sini gösterir:
https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
Aşağıdaki YAML bildirimini ingress.yaml adlı yeni bir dosyaya kopyalayın ve dosyayı yerel bilgisayarınıza kaydedin.
Yukarıdaki 1. adımda Azure Key Vault'u sorgulamak için DNS ana bilgisayarınızın adıyla ve
<KeyVaultCertificateUri>
komutundan döndürülen URI ile güncelleştirin<Hostname>
. için*<KeyVaultCertificateUri>*
dize değeri yalnızca içermelidirhttps://yourkeyvault.vault.azure.net/certificates/certname
. Geçerli sürümü almak için URI dizesinin sonundaki Sertifika Sürümü atlanmalıdır.secretName
bölümündeki anahtartls
, bu Giriş kaynağının sertifikasını içeren gizli dizinin adını tanımlar. İstemci anahtarda belirtilen<Hostname>
URL'ye göz attığında bu sertifika tarayıcıda sunulur. değerininsecretName
, giriş kaynağı adının (kimdenmetadata.name
) değerine eşitkeyvault-
olduğundan emin olun. Örnek YAML'de değerinesecretName
eşitkeyvault-<your Ingress name>
olması gerekir.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.azure.com/tls-cert-keyvault-uri: <KeyVaultCertificateUri> name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix tls: - hosts: - <Hostname> secretName: keyvault-<your ingress name>
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:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
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 Ingress-nginx denetleyicisi ölçümlerini izleme hakkında bilgi edinin.
Azure Kubernetes Service