Aracılığıyla paylaş


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:

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.

  1. 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>"
    
  2. 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.

  1. 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.

  1. 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)
    
  2. 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.

  1. 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
    
  2. 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çermelidir https://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şit keyvault- olduğundan emin olun. Örnek YAML'de değerine secretName eşit keyvault-<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>
    
  3. 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.