Azure Container Registry ile bağlı kayıt defteri uzantısı için güvenli dağıtım seçenekleri

Bu makalede Arc özellikli kubernetes kümesindeki bağlı kayıt defteri uzantısı için çeşitli dağıtım senaryoları açıklanmaktadır. Bağlı kayıt defteri uzantısını yükledikten sonra, bulut kayıt defterinizdeki görüntüleri şirket içi veya uzak konumlarla eşitleyebilirsiniz.

Dalmadan önce Arc özellikli Kubernetes'in kavramsal olarak nasıl çalıştığını öğrenmek için bir dakikanızı ayırın.

Çeşitli şifreleme yöntemlerini kullanarak bağlı kayıt defterini güvenli bir şekilde dağıtabilirsiniz. Dağıtımın başarılı olduğundan emin olmak için önkoşulları ve diğer ilgili bilgileri gözden geçirmek için hızlı başlangıç kılavuzunu izleyin. Varsayılan olarak, bağlı kayıt defteri HTTPS, ReadOnly modu, Güven Dağıtımı ve Cert Manager hizmetiyle yapılandırılır. Senaryonuza bağlı olarak gerektiğinde daha fazla özelleştirme ve bağımlılık ekleyebilirsiniz.

Cert Manager hizmeti nedir?

Bağlı kayıt defteri sertifika yöneticisi, Azure Arc özellikli kubernetes kümesindeki bağlı kayıt defteri uzantısı için TLS sertifikalarını yöneten bir hizmettir. Sertifikaların oluşturulmasını, yenilenmesini ve dağıtılmasını işleyerek bağlı kayıt defteri ile diğer bileşenler arasında güvenli iletişim sağlar. Bu hizmeti bağlı kayıt defteri dağıtımının bir parçası olarak yükleyebilir veya kümenizde zaten yüklüyse mevcut bir sertifika yöneticisini kullanabilirsiniz.

Cert-Manager , çeşitli kaynaklardan TLS sertifikalarının yönetimini ve verilmesini otomatik hale getiren bir açık kaynak Kubernetes eklentisidir. CA Hizmeti kullanılarak oluşturulan CA havuzları tarafından verilen sertifikaların yaşam döngüsünü yönetir ve süresi dolmadan önce geçerli ve yenilenmesini sağlar.

Güven dağıtımı nedir?

Bağlı kayıt defteri güveni dağıtımı, bağlı kayıt defteri hizmeti ile küme içindeki Kubernetes istemcileri arasında güvenli bir şekilde güven dağıtma işlemini ifade eder. TLS sertifikalarını imzalamak için sertifika yöneticisi gibi bir Sertifika Yetkilisi (CA) kullanarak bu sertifikaları hem kayıt defteri hizmetine hem de istemcilere dağıtabilirsiniz. Bu işlem, kubernetes kümesi içinde güvenli ve güvenilir bir ortam koruyarak tüm varlıkların güvenli bir şekilde birbirlerinin kimliğini doğrulayabilmesini sağlar.

Önceden yüklenmiş cert-manager'ınızı kullanarak bağlı kayıt defteri uzantısını dağıtma

Kümede önceden yüklenmiş bir cert-manager hizmeti kullandığınızda, sertifika yönetimi üzerinde denetiminiz vardır. Sağlanan adımları izleyerek şifreleme ile bağlı kayıt defteri uzantısını dağıtın:

Hızlı başlangıçtaaz-k8s-extension-create komutunu çalıştırın ve ve cert-manager.enabled=true parametrelerini cert-manager hizmetinin yüklü ve etkin olduğunu gösterecek şekilde ayarlayıncert-manager.install=false:

    az k8s-extension create --cluster-name myarck8scluster \ 
    --cluster-type connectedClusters \ 
    --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \ 
    --config service.clusterIP=192.100.100.1 \ 
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json

Kendi sertifikanızı getirin (BYOC) kullanarak bağlı kayıt defteri uzantısını dağıtma

Kendi sertifikanızı getirin (KCG), kendi ortak sertifikanızı ve özel anahtar çiftinizi kullanmanıza olanak tanıyarak sertifika yönetimi üzerinde denetim sahibi olmanıza olanak tanır. Bu kurulum, bağlı kayıt defteri uzantısını şifreleme ile dağıtmanızı sağlar.

Note

BYOC, Kubernetes düğümleri tarafından zaten güvenilir bulunan kendi sertifikalarını getiren müşteriler için kullanışlıdır. Düğümleri sertifikalara güvenecek şekilde el ile güncellemeyin.

Uzantıyı dağıtırken şu adımları izleyerek ortak sertifikayı ve özel anahtar dizesi değişkenini ve değer çiftini ekleyin:

  1. Bağlı kayıt defteri hizmetinin IP'sini SAN olarak kullanan kendi imzaladığı bir SSL sertifikası oluşturun.

    mkdir /certs
    
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext   "subjectAltName = IP:<service IP>"
    
  2. Bu sertifika dosyalarının base64 kodlanmış dizelerini alın:

    export TLS_CRT=$(cat mycert.crt | base64 -w0) 
    export TLS_KEY=$(cat mycert.key | base64 -w0) 
    
  3. Aşağıdaki örneğe benzer şekilde JSON biçiminde gizli dizi içeren korumalı bir ayarlar dosyası oluşturun:

    Note

    Ortak sertifika ve özel anahtar çifti base64 biçiminde kodlanmış ve korumalı ayarlar dosyasına eklenmelidir.

    {
    "connectionString": "[connection string here]",
    "tls.crt": $TLS_CRT,
    "tls.key": $TLS_KEY,
    "tls.cacrt": $TLS_CRT
    } 
    
  4. HTTPS (TLS şifrelemesi) kullanarak ortak sertifika ve özel anahtar çifti yönetimi ile değişkenleri cert-manager.enabled=false ve cert-manager.install=false olarak ayarlayarak Bağlı Kayıt Defteri Uzantısını dağıtın. Şifreleme yerine ortak sertifika ve özel anahtar çifti kullanıldığından, bu parametreler kullanıldığında cert-manager yüklenmez veya etkinleştirilmez.

  5. Korumalı ayarlar dosyasını düzenledikten sonra dağıtım için az-k8s-extension-create komutunu çalıştırın:

    az k8s-extension create --cluster-name myarck8scluster \
    --cluster-type connectedClusters \  
    --extension-type  Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \
    --config service.clusterIP=192.100.100.1 \
    --config cert-manager.enabled=false \
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json 
    

Kubernetes gizli yönetimi ile bağlı kayıt defteri dağıtma

Küme üzerinde bir Kubernetes sır kullanarak, podlar arasında yetkili erişimi güvenli bir şekilde yönetebilirsiniz. Bu kurulum, bağlı kayıt defteri uzantısını şifreleme ile dağıtmanızı sağlar.

Aşağıdaki adımları izleyerek Kubernetes TLS gizli dizi değişkenini ve değer çiftini ekleyin:

  1. SAN olarak bağlı kayıt defteri hizmeti IP'siyle otomatik olarak imzalanan SSL sertifikası oluşturma

    mkdir /certs
    
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext    "subjectAltName = IP:<service IP>"
    
  2. Bu sertifika dosyalarının base64 ile kodlanmış dizelerini alın:

    export TLS_CRT=$(cat mycert.crt | base64 -w0) 
    export TLS_KEY=$(cat mycert.key | base64 -w0) 
    
  3. Kubernetes sırrını oluşturun:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: k8secret
      type: kubernetes.io/tls
    data:
      ca.crt: $TLS_CRT
      tls.crt: $TLS_CRT
      tls.key: $TLS_KEY
    EOF
    
  4. Aşağıdaki örneğe benzer şekilde JSON biçiminde gizli dizi içeren korumalı bir ayarlar dosyası oluşturun:

        { 
        "connectionString": "[connection string here]",
        "tls.secret": “k8secret” 
        } 
    
  5. Kubernetes gizli dizi yönetimini kullanarak HTTPS (TLS şifrelemesi) ile Bağlı kayıt defteri uzantısını dağıtın. ve cert-manager.enabled=falseolarak ayarlanan cert-manager.install=false değişkenleri yapılandırın. Bu parametreler kullanıldığında şifreleme yerine Kubernetes gizli dizisi kullanıldığından cert-manager yüklenmez veya etkinleştirilmez.

  6. Korumalı ayarlar dosyasını düzenledikten sonra dağıtım için az-k8s-extension-create komutunu çalıştırın:

    az k8s-extension create --cluster-name myarck8scluster \
    --cluster-type connectedClusters \  
    --extension-type  Microsoft.ContainerRegistry.ConnectedRegistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup \
    --config service.clusterIP=192.100.100.1 \
    --config cert-manager.enabled=false \
    --config cert-manager.install=false \ 
    --config-protected-file protected-settings-extension.json 
    

Bağlı kayıt defterini kendi güven dağıtımınızı kullanarak dağıtma

Kendi Kubernetes gizli dizinizi veya genel sertifikanızı ve özel anahtar çiftlerinizi kullanarak bağlı kayıt defteri uzantısını TLS şifrelemesi, kendi güven dağıtımınız ile dağıtabilir ve bağlı kayıt defterinin varsayılan güven dağıtımını reddedebilirsiniz. Bu kurulum, bağlı kayıt defteri uzantısını şifreleme ile dağıtmanızı sağlar. Korumalı ayarlar dosyasına Kubernetes gizli dizisini veya ortak sertifikayı ve özel anahtar değişkenini ve değer çiftlerini JSON biçiminde eklediğinizden emin olun.

Bu seçeneği kullanmak için, uzantıyı dağıtırken bağlı kayıt defteri güven dağıtımını reddedecek trustDistribution.enabled=false ve trustDistribution.skipNodeSelector=false parametrelerini ayarlayın.

az k8s-extension create --cluster-name myarck8scluster \ 
--cluster-type connectedClusters \ 
--extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ 
--name myconnectedregistry \ 
--resource-group myresourcegroup \ 
--config service.clusterIP=192.100.100.1 \
--config trustDistribution.enabled=false \ 
--config cert-manager.enabled=false \
--config cert-manager.install=false \ 
--config-protected-file <JSON file path> 

Bu parametreler kullanıldığında, cert-manager yüklenmez veya etkinleştirilmez ve bağlı kayıt defteri güven dağıtımı zorlanmaz. Bunun yerine, bağlı kayıt defteriyle istemci düğümleri arasında güven oluşturmak için küme tarafından sağlanan güven dağıtımını kullanırsınız.

Kaynakları temizle

Bağlı kayıt defteri uzantısını, ilgili Bağlı kayıt defteri podlarını ve yapılandırma ayarlarını kaldırmak için bu adımları izleyin.

  1. Bağlı kayıt defteri uzantısını silmek için az-k8s-extension-delete komutunu çalıştırın:

    az k8s-extension delete --name myconnectedregistry 
    --cluster-name myarcakscluster \ 
    --resource-group myresourcegroup \ 
    --cluster-type connectedClusters
    
  2. Bağlı kayıt defteri kaynağını silmek için az acr connected-registry delete komutunu çalıştırın:

    az acr connected-registry delete --registry myacrregistry \ 
    --name myconnectedregistry \ 
    --resource-group myresourcegroup
    

Sonraki Adımlar