Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
BrokerListener kaynağı, aracıyı ağ üzerinden istemcilere sunan bir ağ uç noktasına karşılık gelir. Her bir broker için, birden fazla BrokerListener kaynağına sahip olabilir, bu kaynaklar birden çok bağlantı noktası içerebilir ve her birinde farklı erişim denetimi bulunabilir.
Her BrokerListener bağlantı noktasının, bu dinleyici bağlantı noktasında kimlerin bağlanabileceğini ve aracıda hangi eylemleri gerçekleştirebileceğini tanımlayan kendi kimlik doğrulaması ve yetkilendirme kuralları olabilir. Her dinleyici bağlantı noktası için erişim denetimi ilkelerini belirtmek için BrokerAuthentication ve BrokerAuthorization kaynaklarını kullanabilirsiniz. Bu esneklik, MQTT istemcilerinizin izinlerini ve rollerini ihtiyaçlarına ve kullanım örneklerine göre ayarlamanızı sağlar.
İpucu
Varsayılan MQTT aracısı dağıtımı, istemcilerin Aktarım Katmanı Güvenliği (TLS) protokolüne bağlanmasını ve hizmet hesabı belirteçleriyle kimlik doğrulamasını gerektiren bir küme IP hizmetidir. Küme dışından bağlanan istemcilerin bağlanabilmesi için ek yapılandırma gerekir.
Aracı dinleyicileri aşağıdaki özelliklere sahiptir:
- Ad: Dinleyicinin adı. Bu ad, geçersiz kılınmadığı sürece Kubernetes hizmet adıdır.
-
Hizmet türü: Hizmet türü başına bir tane olmak üzere en fazla üç dinleyiciniz olabilir. Varsayılan dinleyici hizmet türüdür
ClusterIp. - Bağlantı noktaları: Her dinleyici birden çok bağlantı noktasını destekler. Bağlantı noktaları farklı dinleyiciler üzerinde çakışamaz.
- Kimlik Doğrulama ve Yetkilendirme başvuruları: BrokerAuthentication ve BrokerAuthorization bağlantı noktası başına yapılandırılır.
- TLS: Bağlantı noktası başına el ile veya otomatik TLS yapılandırması uygulanır.
- Protokol: WebSockets üzerinden MQTT bağlantı noktası başına etkinleştirilebilir.
Kullanılabilir tüm ayarların listesi için bkz: Aracı Dinleyici API başvurusu.
Ortam değişkenlerinizi ayarlama
Bu makaledeki Azure CLI örnek, her değeri bir kez ayarlayabilmeniz ve ardından komutları kopyalayıp yapıştırmanız için ortam değişkenlerini kullanır as-is. Eğer hızlı başlangıçta Azure IoT İşlemleri Codespaces ortamını kullanıyorsanız, bu değişkenler zaten sizin için ayarlanmış ve bu adımı atlayabilirsiniz. Aksi takdirde, komutları çalıştırmadan önce shell'inizde aşağıdaki ortam değişkenlerini ayarlayın.
Aşağıdaki betikler en sık kullanılan ortam değişkenlerini ayarlar:
| Ortam değişkeni | Tanım |
|---|---|
SUBSCRIPTION_ID |
Azure IoT İşlemleri örneğini içeren aboneliğin kimliği. |
RESOURCE_GROUP |
Azure IoT İşlemleri örneğini içeren kaynak grubunun adı. |
AIO_INSTANCE_NAME |
Azure IoT İşlemleri örneğinizin adı. Örneklerinizi listelemek için çalıştırın az iot ops list -o table. |
CLUSTER_NAME |
Azure Arc özellikli Kubernetes kümesinin adı, örneğini barındırıyor. |
LOCATION |
Yeni kaynaklar için kullanılacak Azure bölgesi, örneğin eastus. |
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>
Sadece bu makalenin kullandığı değişkenleri ayarlamanız yeterlidir. Bu makale, seçtiğiniz kaynak adları için ek ortam değişkenleri kullanabilir. Makale, tanıtıldıkları yere nasıl yerleştirileceğini açıklıyor.
Bu makale ayrıca seçtiğiniz değerler için aşağıdaki ortam değişkenlerini kullanır: LISTENER (aracı dinleyicinin adı), LISTENER_PORT (dinleyici portu), ISSUER_NAME, ISSUER_KIND, ve ISSUER_GROUP (sertifika-yönetici dağıtıcı referansı), ve SECRET_REFERENCE_NAME (TLS gizli adı). İlgili komutları çalıştırmadan önce her birini ayarlayın.
Varsayılan BrokerListener
Azure IoT İşlemlerini dağıttığınızda dağıtım, default adlı bir BrokerListener kaynağı oluşturur. Bu dinleyici, IoT İşlemleri bileşenleri arasındaki şifreli iç iletişim için kullanılır. Varsayılan dinleyici, varsayılan aracının bir parçasıdır.
- 18883 numaralı bağlantı noktasında bir ClusterIp hizmetini kullanıma sunar.
- İstemcilerin Kubernetes hizmet hesabı kimlik doğrulamasını kullanmasını gerektirir.
- Otomatik olarak yönetilen bir TLS sertifikasına sahiptir.
- Hiçbir istemci yetkilendirme ilkesi yapılandırmaz.
Dikkat
İç IoT İşlemleri iletişiminin kesintiye uğramasını önlemek için varsayılan dinleyiciyi değiştirmeden ve dahili kullanım için ayrılmış durumda tutun. Dış iletişim için yeni bir dinleyici oluşturun. Hizmeti kullanmanız ClusterIp gerekiyorsa, mevcut ayarları değiştirmeden varsayılan dinleyiciye daha fazla bağlantı noktası ekleyin.
Varsayılan dinleyiciyi görüntülemek veya düzenlemek için şu adımları izleyin.
Azure portalında IoT İşlemleri örneğine gidin.
Bileşenler'in altında MQTT Aracısı'ni seçin.
Aracı dinleyici listesinden varsayılan dinleyiciyi seçin.
Dinleyici ayarlarını gözden geçirin, ancak mevcut ayarlardan herhangi birini değiştirmekten kaçının. Bunun yerine yeni bir bağlantı noktası oluşturun ve gerektiği gibi yapılandırın.
Varsayılan aracı dinleyicisini değiştirmekten kaçının
İç IoT İşlemleri iletişiminin kesintiye uğramasını önlemek için varsayılan dinleyiciyi değiştirmeden ve dahili kullanım için ayrılmış durumda tutun. Dış iletişim için yeni bir dinleyici oluşturun.
Varsayılan aracı dinleyicisi ClusterIp hizmet türünü kullandığı için, hizmet türü başına yalnızca bir dinleyiciye izin verilir. Mevcut ayarları değiştirmeden ClusterIp hizmetini kullanmanız gerekiyorsa, varsayılan dinleyiciye daha fazla port ekleyin.
Yeni komisyoncu dinleyicileri oluşturun
Yeni bir dinleyici oluşturmak için aşağıdaki ayarları belirtin:
- Ad: Dinleyicinin adı. Bu ad, geçersiz kılınmadığı sürece Kubernetes hizmet adıdır.
- Hizmet türü: Kubernetes hizmetinin türü. Bkz. Hizmet türü.
- Bağlantı noktaları: Dinlenecek bağlantı noktalarının listesi. Bkz. Bağlantı noktaları.
- Hizmet adı (isteğe bağlı): Kubernetes hizmet adını geçersiz kılın. Bkz. Hizmet adı.
Örnek: İki bağlantı noktasıyla yeni dinleyici oluşturma
Bu örnek, LoadBalancer hizmet türüne sahip yeni bir dinleyicinin nasıl oluşturulacağını göstermektedir. BrokerListener kaynağı, istemcilerden MQTT bağlantılarını kabul eden iki bağlantı noktasını tanımlar.
- İlk bağlantı noktası, TLS ve kimlik doğrulaması olmadan 1883 numaralı bağlantı noktasını dinler. Bu kurulum yalnızca test için uygundur. Bu yapılandırmayı üretimde kullanmayın.
- İkinci bağlantı noktası, TLS ve kimlik doğrulaması etkinleştirilmiş şekilde 8883 numaralı bağlantı noktasını dinler. Yalnızca Kubernetes hizmet hesabı belirteci olan kimliği doğrulanmış istemciler bağlanabilir. TLS, sunucu sertifikasını varsayılan verenden yönetmek için cert-manager kullanılarak otomatik moda ayarlanır. Bu kurulum, üretim yapılandırmasına daha yakındır.
Azure portalında IoT İşlemleri örneğine gidin.
Bileşenler'in altında MQTT Aracısı'ni seçin.
LoadBalancer için MQTT aracı dinleyicisini seçin>Oluştur.
Aşağıdaki ayarları girin:
Ayar Tanım Ad BrokerListener kaynağının adı. Hizmet adı Kubernetes hizmetinin adı. Dinleyici adını hizmet adı olarak kullanmak için boş bırakın. Hizmet türü LoadBalancer zaten seçili. Bağlantı Noktaları'nın altında, ilk bağlantı noktası için aşağıdaki ayarları girin:
Ayar Tanım Bağlantı noktası 1883 girin. Kimlik Doğrulaması Yok'u seçin. Yetkilendirme Yok'u seçin. Protokol MQTT'yi seçin. TLS Eklemeyin. İkinci bir bağlantı noktası eklemek için Bağlantı noktası girişi ekle'yi seçin ve aşağıdaki ayarları girin:
Ayar Tanım Bağlantı noktası 8883 girin. Kimlik Doğrulaması Varsayılan'ı seçin. Yetkilendirme Yok'u seçin. Protokol MQTT'yi seçin. TLS Ekle'yi seçin. TLS yapılandırma bölmesinde aşağıdaki ayarları girin:
Ayar Tanım TLS modu Otomatik'i seçin. Verenin adı azure-iot-operations-aio-certificate-issuergirin.Veren türü ClusterIssuer'ı seçin. Diğer ayarları varsayılan olarak bırakın ve Uygula'yı seçin.
Dinleyici oluştur'u seçin.
Hizmet türü
Her BrokerListener kaynağı bir Kubernetes hizmetine eşlenir. Hizmet türü, broker'ın ağa nasıl bağlanacağını belirler. Desteklenen hizmet türleri şunlardır:
- ClusterIp: Aracıyı küme içindeki bir IP adresinde kullanıma sunar. İstemciler, kümenin içinden aracıya bağlanabilir. Bu varsayılan hizmet türü, varsayılan dinleyici içindir.
- NodePort: Broker'ı statik bir bağlantı noktasında her düğümün IP'sinde erişime açar. İstemciler, küme dışından broker'a bağlanabilir. Bu hizmet türü geliştirme ve test için kullanışlıdır.
- LoadBalancer: Aracıyı harici olarak erişime açar. Hizmete, istemcilerin aracıya bağlanmak için kullanabileceği bir dış IP adresi atanır. Bu hizmet türü, üretim dağıtımları için en yaygın olanıdır.
Hizmet türü başına yalnızca bir dinleyici
Hizmet türü başına yalnızca bir dinleyiciye izin verilir. Aynı hizmet türünde daha fazla bağlantıya ihtiyacınız varsa, bu hizmet türünün mevcut dinleyicisine daha fazla bağlantı noktası ekleyin.
Hizmet adı
Hizmet adı, aracıyla ilişkilendirilmiş Kubernetes hizmetinin adıdır. Belirtilmezse, hizmet adı olarak aracı dinleyici adı kullanılır. Hizmet adı ad alanında benzersiz olmalıdır.
İpucu
Yönetim yükünü önlemek için hizmet adını boş bırakmanızı öneririz. Dinleyici adı benzersizdir ve hizmeti tanımlamak için bunu kullanabilirsiniz. Hizmet adını yalnızca hizmeti dinleyiciye göre adlandıramıyorsanız alternatif olarak kullanın.
Bağlantı Noktaları
Her dinleyicinin birden çok bağlantı noktası olabilir ve her bağlantı noktasının kimlik doğrulaması, yetkilendirme, protokol ve TLS için kendi ayarları olabilir.
Bir bağlantı noktası için kendi kimlik doğrulama veya yetkilendirme ayarınızı kullanmak için, bir dinleyiciyle kullanmadan önce ilgili kaynakları oluşturmanız gerekir. Daha fazla bilgi için bkz . MQTT aracı kimlik doğrulamasını yapılandırma ve MQTT aracı yetkilendirmesini yapılandırma.
TLS'yi kullanmak için TLS'yi otomatik sertifika yönetimiyle yapılandırma veya TLS'yi el ile sertifika yönetimiyle yapılandırma bölümlerine bakın.
Dinleyiciler arasında aynı bağlantı noktasını kullanma
Farklı dinleyiciler arasında aynı bağlantı noktası numarasının kullanılması desteklenmez. Her bağlantı noktası numarası IoT İşlemleri MQTT aracısı içinde benzersiz olmalıdır.
Örneğin, 1883 numaralı bağlantı noktasını kullanan bir dinleyiciniz varsa, 1883 numaralı bağlantı noktasıyla başka bir dinleyici oluşturamazsınız. Benzer şekilde, varsayılan dinleyici 18883 numaralı bağlantı noktasını kullandığından 18883 numaralı bağlantı noktasıyla başka bir dinleyici oluşturamazsınız.
WebSockets desteği
IoT İşlemleri MQTT aracısı, WebSockets üzerinden MQTT'i destekler. WebSockets'i etkinleştirmek için, bağlantı noktası için protokolü olarak WebSockets ayarlayın.
TLS'yi otomatik sertifika yönetimiyle yapılandırma
TLS'yi otomatik sertifika yönetimiyle etkinleştirmek için, dinleyici bağlantı noktasında TLS ayarlarını belirtin.
cert-manager yüklemesini doğrulama
Otomatik sertifika yönetimi ile TLS sunucu sertifikasını yönetmek için cert-manager kullanırsınız. IoT İşlemleri, varsayılan olarak, zaten cert-manager ile birlikte cert-manager ad alanında yüklenir. Devam etmeden önce yüklemeyi doğrulayın.
cert-manager uygulama etiketleriyle eşleşen podları denetlemek için kubectl kullanın.
kubectl get pods --namespace cert-manager -l 'app in (cert-manager,cainjector,webhook)'NAME READY STATUS RESTARTS AGE aio-cert-manager-64f9548744-5fwdd 1/1 Running 4 (145m ago) 4d20h aio-cert-manager-cainjector-6c7c546578-p6vgv 1/1 Running 4 (145m ago) 4d20h aio-cert-manager-webhook-7f676965dd-8xs28 1/1 Running 4 (145m ago) 4d20hPodların hazır ve çalışıyor olarak gösterildiğini görürseniz, cert-manager yüklenir ve kullanıma hazırdır.
İpucu
Yüklemeyi daha fazla doğrulamak için cert-manager belgelerine göz atarak yüklemeyi doğrulayın. Ad alanını cert-manager kullanmayı unutmayın.
TLS sunucu sertifikası için veren oluşturma
cert-manager veren kaynağı sertifikaların otomatik olarak nasıl verildiğini tanımlar. Cert-manager çeşitli veren türlerini yerel olarak destekler. Ayrıca, işlevselliği yerel olarak desteklenen verenlerin ötesine genişletmek için bir dışissuer türü de destekler. Herhangi bir tür sertifika yöneticisi vereni ile bir MQTT aracısı kullanabilirsiniz.
Önemli
İlk dağıtım sırasında, IoT Operations, TLS sunucu sertifikaları için varsayılan sertifika yayımlayıcısı ile birlikte yüklenir. Bu vereni geliştirme ve test için kullanabilirsiniz. Daha fazla bilgi için Azure IoT İşlemleri ile varsayılan kök Sertifika Yetkilisi (CA) ve veren bölümüne bakın. Aşağıdaki adımlar yalnızca farklı bir veren kullanmak istiyorsanız gereklidir.
Senaryonuza bağlı olarak sağlayıcıyı oluşturma yaklaşımı farklıdır. Aşağıdaki bölümlerde, başlamanıza yardımcı olacak örnekler listelemektedir.
CA veren, geliştirme ve test için kullanışlıdır. Kubernetes gizli anahtarında depolanan bir sertifika ve özel anahtar ile yapılandırılmalıdır.
Kök sertifikayı bir Kubernetes gizlisi olarak kurun.
Var olan bir CA sertifikanız varsa, CA sertifikası ve CA özel anahtar PEM dosyalarıyla bir Kubernetes gizli dizisi oluşturun. CA sertifikasını Kubernetes gizli dizisi olarak içeri aktarmak için aşağıdaki komutu çalıştırın ve sonraki bölümü atlayın.
kubectl create secret tls test-ca --cert tls.crt --key tls.key -n azure-iot-operations
CA sertifikanız yoksa, cert-manager sizin için bir CA sertifikası oluşturabilir. CA sertifikası oluşturmak için cert-manager kullanmak, kendi kendine imzalanan bir sertifikayla CA yayınlayıcının önyüklenmesi olarak adlandırılır.
oluşturarak
ca.yamlbaşlayın:apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: selfsigned-ca-issuer namespace: azure-iot-operations spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: selfsigned-ca-cert namespace: azure-iot-operations spec: isCA: true commonName: test-ca secretName: test-ca issuerRef: # Must match Issuer name above name: selfsigned-ca-issuer # Must match Issuer kind above kind: Issuer group: cert-manager.io # Override default private key config to use an EC key privateKey: rotationPolicy: Always algorithm: ECDSA size: 256Aşağıdaki komutla otomatik olarak imzalanan CA sertifikasını oluşturun:
kubectl apply -f ca.yaml
Cert-manager, varsayılanlarını kullanarak bir CA sertifikası oluşturur. Sertifika belirtimini değiştirerek bu sertifikanın özelliklerini değiştirebilirsiniz. Geçerli seçeneklerin listesi için cert-manager belgelerine bakın.
Kök sertifikayı dağıtma
Önceki örnekte CA sertifikası adlı test-cabir Kubernetes gizli dizisinde depolanır. Sertifikayı gizli diziden PEM biçiminde alabilir ve aşağıdaki komutla dosyada ca.crt depolayabilirsiniz:
kubectl get secret test-ca -n azure-iot-operations -o json | jq -r '.data["tls.crt"]' | base64 -d > ca.crt
Bu sertifika tüm istemciler tarafından dağıtılmalı ve güvenilmelidir. Örneğin, bir Mosquitto istemcisi için --cafile bayrağını kullanın.
CA sertifikasına göre veren oluşturma
Cert-manager, önceki adımda oluşturulan veya içeri aktarılan CA sertifikasını temel alan bir verene ihtiyaç duyar. Aşağıdaki dosyayı olarak issuer-ca.yamloluşturun:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: my-issuer
namespace: azure-iot-operations
spec:
ca:
# Must match secretName of generated or imported CA cert
secretName: test-ca
Çıkarıcıyı aşağıdaki komutla oluşturun:
kubectl apply -f issuer-ca.yaml
Önceki komut TLS sunucu sertifikaları veren bir veren oluşturur. Verenin adını ve türünü not edin. Örnekte ad, my-issuer ve tür, Issuer şeklindedir. Bu değerler daha sonra BrokerListener kaynağında ayarlanır.
Bağlantı noktası için TLS otomatik sertifika yönetimini etkinleştirme
Aşağıdaki örnek, otomatik sertifika yönetimiyle 8884 numaralı bağlantı noktasında TLS'yi etkinleştiren bir BrokerListener kaynağıdır.
Azure portalında IoT İşlemleri örneğine gidin.
Bileşenler'in altında MQTT Aracısı'ni seçin.
Dinleyici seçin veya oluşturun. Hizmet türü başına yalnızca bir dinleyici oluşturabilirsiniz. Zaten aynı hizmet türünde bir dinleyiciniz varsa, var olan dinleyiciye daha fazla bağlantı noktası ekleyebilirsiniz.
Mevcut bir bağlantı noktasında TLS'yi seçerek veya yeni bir bağlantı noktası ekleyerek dinleyiciye TLS ayarları ekleyebilirsiniz.
Aşağıdaki ayarları girin:
Ayar Tanım Ad BrokerListener kaynağının adı. aio-broker-loadbalancer-tlsgirin.Bağlantı noktası BrokerListener'ın MQTT bağlantılarını dinlediği bağlantı noktası numarası. 8884 girin. Kimlik Doğrulaması Kimlik doğrulama kaynağı referansı. Yetkilendirme Yetkilendirme kaynağı referansı. TLS Ekle düğmesini seçin. Verenin adı Cert-manager sağlayıcısının adı. Gerekli. Veren türü "Cert-manager sağlayıcısının türü." Gerekli. İhraççı grubu cert-manager sağlayıcı grubu. Gerekli. Özel anahtar algoritması Özel anahtar için algoritma. Özel anahtar yenileme politikası Özel anahtarı döndürme ilkesi. DNS adları Sertifika için DNS konusu alternatif adları. IP adresleri Sertifikanın konu diğer adlarının IP adresleri. Gizli ad X.509 istemci sertifikası içeren Kubernetes gizli nesnesi. Süre TLS sunucu sertifikasının toplam ömrü varsayılan olarak 90 gündür. Son kullanma tarihinden önce yenileyin Sertifikanın yenilenmesine ne zaman başlanması gerekir? TLS ayarlarını kaydetmek için Uygula'yı seçin.
BrokerListener kaynağı yapılandırıldıktan sonra, MQTT aracısı belirtilen bağlantı noktası ve TLS etkin olarak otomatik olarak yeni bir hizmet oluşturur.
İsteğe bağlı: Sunucu sertifikası parametrelerini yapılandırma
Gereken tek parametreler Issuer ad ve Issuer tür. Oluşturulan TLS sunucu sertifikalarının diğer tüm özellikleri otomatik olarak seçilir. Ancak, MQTT broker, belirli özelliklerin cert-manager sertifikalarıyla aynı söz dizimini kullanarak özelleştirilmesine olanak tanır. Örneğin, özel anahtar algoritmasını ve döndürme ilkesini belirtebilirsiniz. Bu ayarlar Azure portalındaki tls.certManagerCertificateSpec veya TLS yapılandırma bölmesinde bulunur.
Bu ayarların tam listesi için Aracı Dinleyicisi CertManagerCertificateSpec API başvurusu'na bakın.
Dağıtımı doğrula
BrokerListener kaynağıyla ilişkili hizmetin çalışıp çalışmadığını denetlemek için kubectl kullanın. Yukarıdaki örnekte hizmet adı, aio-broker-loadbalancer-tls ad alanı ise şeklindedir azure-iot-operations. Aşağıdaki komut hizmet durumunu denetler:
$ kubectl get service my-new-tls-listener -n azure-iot-operations
Çıkış aşağıdaki örneğe benzer görünmelidir:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aio-broker-loadbalancer-tls LoadBalancer 10.X.X.X 172.X.X.X 8884:32457/TCP 33s
TLS ile aracıya bağlanma
Sunucu sertifikası yapılandırıldıktan sonra TLS etkinleştirilir. Mosquitto ile test etmek için:
mosquitto_pub -h $HOST -p 8884 -V mqttv5 -i "test" -t "test" -m "test" --cafile ca.crt
--cafile bağımsız değişkeni Mosquitto istemcisinde TLS'yi etkinleştirir ve istemcinin belirli bir dosya tarafından verilen tüm sunucu sertifikalarına güvenmesi gerektiğini belirtir. Yapılandırılmış TLS sunucu sertifikasının verenini içeren bir dosya belirtmeniz gerekir.
Değiştir $HOST ile uygun ana bilgisayar:
- Aynı kümenin içinden bağlanıyorsanız değerini verilen hizmet adıyla (
my-new-tls-listenerörneğin) veya hizmetiyleCLUSTER-IPdeğiştirin. - Küme dışından bağlanıyorsanız hizmetini
EXTERNAL-IPkullanın.
Gerekirse kimlik doğrulama yöntemlerini belirtmeyi unutmayın.
Varsayılan kök Sertifika Makamı (CA) ve sertifika veren
Kullanmaya başlamanıza yardımcı olmak için IoT Operasyonları, varsayılan bir "quickstart" CA sertifikası ve TLS sunucu sertifikaları için sertifika veren olarak yapılandırılmış bir şekilde dağıtılır. Bu vereni geliştirme ve test için kullanabilirsiniz. Daha fazla bilgi için bkz Varsayılan kök CA ve TLS sunucu sertifikaları için veren.
Üretim için, önceki bölümlerde açıklandığı gibi, güvenilen bir CA'dan sertifika içeren bir CA vereni yapılandırmanız gerekir.
TLS'yi el ile sertifika yönetimiyle yapılandırma
MQTT aracısını belirli bir TLS sertifikasını kullanacak şekilde el ile yapılandırmak için, bunu Kubernetes gizli dizisine başvuru içeren bir BrokerListener kaynağında belirtin ve kubectl kullanarak dağıtın. Bu makalede TLS'yi test için otomatik olarak imzalanan sertifikalarla yapılandıran bir örnek gösterilmektedir.
Adım CLI ile sertifika yetkilisi oluşturma
Adım , kendi özel CA'nızı oluşturup yönetirken hızla çalışmaya başlamanızı sağlayan bir sertifika yöneticisidir.
Adım CLI'yi yükleyin ve bir kök CA sertifikası ve anahtarı oluşturun.
step certificate create --profile root-ca "Example Root CA" root_ca.crt root_ca.keyKök CA tarafından imzalanan bir ara CA sertifikası ve anahtarı oluşturun.
step certificate create --profile intermediate-ca "Example Intermediate CA" intermediate_ca.crt intermediate_ca.key \ --ca root_ca.crt --ca-key root_ca.key
Sunucu sertifikası oluşturma
Ara CA sertifikasından ve anahtarından sunucu sertifikası oluşturmak için Adım CLI'yi kullanın.
step certificate create mqtts-endpoint mqtts-endpoint.crt mqtts-endpoint.key \
--profile leaf \
--not-after 8760h \
--san mqtts-endpoint \
--san localhost \
--ca intermediate_ca.crt --ca-key intermediate_ca.key \
--no-password --insecure
mqtts-endpoint ve localhost burada, sırasıyla Kubernetes ve yerel istemcilerde MQTT aracısının ön ucu için Subject Alternative Names (SAN'ler) olarak bulunur. İnternet üzerinden bağlanmak için bir --san dış IP ekleyin. Özel anahtar için parola istemlerini atlamak ve parola korumasını devre dışı bırakmak amacıyla bayraklar --no-password --insecure, test için kullanılmaktadır, çünkü özel anahtar bir Kubernetes gizli bilgisinde depolanmaktadır. Üretim için parola kullanın ve özel anahtarı Azure Key Vault gibi güvenli bir konumda depolayın.
Sertifika anahtarı algoritması gereksinimleri
Hem EC hem de RSA anahtarları desteklenir, ancak zincirdeki tüm sertifikaların aynı anahtar algoritmasını kullanması gerekir. Kendi CA sertifikalarınızı içeri aktarırsanız, sunucu sertifikasının CA'larla aynı anahtar algoritmasını kullandığından emin olun.
Sunucu sertifika zincirini Kubernetes sırrı olarak içe aktarma
Sertifikaların sırasının önemli olduğu tam bir sunucu sertifika zinciri oluşturun. Sunucu sertifikası dosyadaki ilk sertifika, ara sertifika ise ikinci sertifikadır.
cat mqtts-endpoint.crt intermediate_ca.crt > server_chain.crtKubectl kullanarak sunucu sertifika zinciri ve sunucu anahtarı ile bir Kubernetes gizli dizisi oluşturun.
kubectl create secret tls server-cert-secret -n azure-iot-operations \ --cert server_chain.crt \ --key mqtts-endpoint.key
Bağlantı noktası için TLS el ile sertifika yönetimini etkinleştirme
Aşağıdaki örnekte, el ile sertifika yönetimiyle 8884 numaralı bağlantı noktasında TLS'yi etkinleştiren bir BrokerListener kaynağı gösterilmektedir.
Azure portalında IoT İşlemleri örneğine gidin.
Bileşenler'in altında MQTT Aracısı'ni seçin.
Dinleyici seçin veya oluşturun. Hizmet türü başına yalnızca bir dinleyici oluşturabilirsiniz. Zaten aynı hizmet türünde bir dinleyiciniz varsa, var olan dinleyiciye daha fazla bağlantı noktası ekleyebilirsiniz. Örneği izlemek için dinleyici hizmeti adını olarak
mqtts-endpointbelirtin.Mevcut bir bağlantı noktasında TLS'yi seçerek veya yeni bir bağlantı noktası ekleyerek dinleyiciye TLS ayarları ekleyebilirsiniz.
Aşağıdaki ayarları girin:
Ayar Tanım Bağlantı noktası BrokerListener'ın MQTT bağlantılarını dinlediği bağlantı noktası numarası. Gerekli. Kimlik Doğrulaması Kimlik doğrulama kaynağı referansı. Yetkilendirme Yetkilendirme kaynağı referansı. TLS Ekle düğmesini seçin. Gizli ad X.509 istemci sertifikası içeren Kubernetes gizli nesnesi. TLS ayarlarını kaydetmek için Uygula'yı seçin.
TLS ile aracıya bağlanma
Mosquitto istemcisiyle TLS bağlantısını test etmek için bir ileti yayımlayın ve parametresinde --cafilekök CA sertifikasını geçirin.
mosquitto_pub -d -h localhost -p 8885 -i "my-client" -t "test-topic" -m "Hello" --cafile root_ca.crt
MQTT aracısı kimlik doğrulaması etkinse kullanıcı adı ve parola gibi öğeleri belirtmeyi unutmayın.
Client my-client sending CONNECT
Client my-client received CONNACK (0)
Client my-client sending PUBLISH (d0, q0, r0, m1, 'test-topic', ... (5 bytes))
Client my-client sending DISCONNECT
İpucu
localhost kullanmak için bağlantı noktasının konak makinede kullanılabilir olması gerekir.
kubectl port-forward svc/mqtts-endpoint 8885:8885 -n azure-iot-operations bunun bir örneğidir. K3d gibi bazı Kubernetes dağıtımları ile iletilen bir bağlantı noktası ekleyebilirsiniz: k3d cluster edit $CLUSTER_NAME --port-add 8885:8885@loadbalancer.
Aracıya bağlanmak için, güven demeti olarak da bilinen güven kökünü tüm istemcilere dağıtmanız gerekir. Bu durumda güvenin kökü, Step CLI tarafından oluşturulan kendi kendine imzalanmış kök CA'dır. İstemcinin sunucu sertifika zincirini doğrulaması için güven kökünün dağıtılması gerekir. MQTT istemcileriniz Kubernetes kümesindeki iş yükleriyse, kök CA ile bir ConfigMap oluşturmanız ve bunu podunuza bağlamanız gerekir.
Sunucu sertifikası için dış IP kullanma
İnternet üzerinden TLS'ye bağlanmak için MQTT aracısının sunucu sertifikasının dış ana bilgisayar adına veya IP adresine SAN olarak sahip olması gerekir. Üretimde bu bilgiler genellikle bir DNS adı veya iyi bilinen bir IP adresidir. Geliştirme/test sırasında, dağıtımdan önce hangi ana bilgisayar adının veya dış IP'nin atandığını bilmiyor olabilirsiniz. Bu sorunu çözmek için önce sunucu sertifikası olmadan dinleyiciyi dağıtın, dış IP ile sunucu sertifikasını ve gizli dizisini oluşturun ve gizli diziyi dinleyiciye aktarın.
Örnek TLS dinleyicisini manual-tls-listener dağıtmaya çalışırsanız ancak referans verilen Kubernetes gizlisi server-cert-secret yoksa, ilişkili hizmet oluşturulur, ancak podlar çalışmaz. İşlecin dinleyici için dış IP'yi ayırması gerektiğinden hizmet oluşturulur.
kubectl get svc mqtts-endpoint -n azure-iot-operations
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mqtts-endpoint LoadBalancer 10.X.X.X 172.X.X.X 8885:30674/TCP 1m15s
Sunucu sertifikasını içeri aktarırken bu davranış beklenir. Sağlık yöneticisi kayıtları, MQTT aracısının sunucu sertifikasını beklediğini belirtir.
kubectl logs -l app=health-manager -n azure-iot-operations
...
<6>2023-11-06T21:36:13.634Z [INFO] [1] - Server certificate server-cert-secret not found. Awaiting creation of secret.
Not
Genellikle, dağıtılmış bir sistemde pod günlükleri belirleyici değildir ve dikkatli kullanılmalıdır. Bunun gibi bilgilerin ortaya çıkmasına yönelik doğru yol Kubernetes olayları ve beklemede olan özel kaynak durumudur. Önceki adımı geçici bir geçici çözüm olarak düşünün.
Ön uç podları açık olmasa da dış IP zaten kullanılabilir durumdadır.
kubectl get svc mqtts-endpoint -n azure-iot-operations
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mqtts-endpoint LoadBalancer 10.X.X.X 172.X.X.X 8885:30674/TCP 1m15s
Buradan, bu dış IP'yi kullanarak bir sunucu sertifikası oluşturmak ve Kubernetes gizlisini aynı şekilde oluşturmak için daha önce gösterildiği gibi aynı adımları izleyin. Gizli anahtar oluşturulduktan sonra otomatik olarak dinleyiciye alınır.