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.
Bu makalede, üretim dışı bir ortamda MQTT istemcileriyle MQTT aracısına bağlantıyı test etmenin farklı yolları gösterilmektedir.
Varsayılan olarak, bir MQTT aracısı:
-
Transport Layer Security (TLS) Protokolü etkin bir dinleyici,
ClusterIpservisi türü ile 18883 numaralı portta dağıtılır.ClusterIparacıya yalnızca Kubernetes kümesi içinden erişilebileceği anlamına gelir. Küme dışından aracıya erişmek için, bir türLoadBalancerveyaNodePorthizmeti yapılandırmanız gerekir. - Küme içindeki bağlantılar için kimlik doğrulaması için Kubernetes hizmet hesaplarını kabul eder. Küme dışından bağlanmak için farklı bir kimlik doğrulama yöntemi yapılandırmanız gerekir.
Dikkat
Üretim senaryolarında, IoT çözümünüzün güvenliğini sağlamak için TLS ve hizmet hesapları kimlik doğrulamasını kullanın. Daha fazla bilgi için bkz.
- MQTT aracısında MQTT iletişiminin güvenliğini sağlamak için TLS'yi otomatik sertifika yönetimiyle yapılandırın.
- MQTT aracısında kimlik doğrulamasını yapılandırın.
- Azure Kubernetes Services (AKS) Edge Essentials ile bağlantı noktası iletme veya sanal anahtar kullanarak Kubernetes hizmetlerini dış cihazlarda kullanıma sunma.
Başlamadan önce Azure IoT İşlemlerini yükleyin veya yapılandırın. Üretim dışı bir ortamda MQTT istemcileri ile MQTT aracısı bağlantısını test etmek için aşağıdaki seçenekleri kullanın.
Küme içindeki varsayılan dinleyiciye bağlanma
İlk seçenek, kümenin içinden bağlanmaktır. Bu seçenek varsayılan yapılandırmayı kullanır ve ek güncelleştirme gerektirmez. Aşağıdaki örneklerde, hizmet hesabını ve varsayılan kök Sertifika Yetkilisi (CA) sertifikasını kullanarak düz Alpine Linux ve yaygın olarak kullanılan bir MQTT istemcisi kullanarak kümenin içinden nasıl bağlanacakları gösterilmektedir.
mqtt-client.yaml Dağıtımı GitHub örnek deposundan indirin.
Önemli
Üretimde MQTT istemcisini kullanmayın. İstemci sadece test amaçlı kullanılmalıdır.
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
pod/mqtt-client created
Pod çalıştıktan sonra, pod içinde komutları çalıştırmak için kubectl exec kullanın.
Örneğin, aracıya bir mesaj yayımlamak için pod içinde bir terminal açın.
kubectl exec --stdin --tty mqtt-client --namespace azure-iot-operations -- sh
Pod kabuğunun içinde aşağıdaki komutu çalıştırarak broker'a bir ileti yayımlayın.
mosquitto_pub --host aio-broker --port 18883 --message "hello" --topic "world" --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Çıkış aşağıdaki örneğe benzer görünmelidir:
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending PUBLISH (d0, q0, r0, m1, 'world', ... (5 bytes))
Client (null) sending DISCONNECT
Mosquitto istemcisi, aracıyla kimlik doğrulaması yapmak için /var/run/secrets/tokens/broker-sat konumuna eklenen hizmet hesabı belirtecini kullanır. Belirteç 24 saat geçerlidir. İstemci ayrıca /var/run/certs/ca.crt konumuna bağlı varsayılan kök CA sertifikasını, aracının TLS sertifika zincirini doğrulamak için kullanır.
İpucu
Diğer istemcilerle kullanmak üzere varsayılan kök CA sertifikasını indirmek için kubectl kullanabilirsiniz. Örneğin, varsayılan kök CA sertifikasını adlı ca.crtbir dosyaya indirmek için:
kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o jsonpath='{.data.ca\.crt}' > ca.crt
Konuya abone olmak için aşağıdaki komutu çalıştırın:
mosquitto_sub --host aio-broker --port 18883 --topic "world" --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Çıkış aşağıdaki örneğe benzer görünmelidir:
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending SUBSCRIBE (Mid: 1, Topic: world, QoS: 0, Options: 0x00)
Client (null) received SUBACK
Subscribed (mid: 1): 0
Mosquitto müşterisi, broker ile kimlik doğrulaması yapmak ve başlığa abone olmak için aynı hizmet hesabı belirtecini ve kök CA sertifikasını kullanır.
Pod'u kaldırmak için komutunu çalıştırın kubectl delete pod mqtt-client -n azure-iot-operations.
İstemcileri küme dışından bağlama
Varsayılan aracı dinleyicisi hizmet türüne ayarlandığındanClusterIp, doğrudan küme dışından aracıya bağlanamazsınız. İç IoT İşlemleri bileşenleri arasındaki iletişimin yanlışlıkla kesintiye uğramasını önlemek için varsayılan dinleyiciyi değiştirilmemiş ve IoT İşlemleri iç iletişimi için ayrılmış tutmanızı öneririz. Küme IP hizmetini kullanıma açmak için ayrı bir Kubernetes LoadBalancer hizmeti oluşturmak mümkün olsa da, karışıklığı ve olası güvenlik risklerini önlemek için daha yaygın MQTT bağlantı noktaları 1883 ve 8883 gibi farklı ayarlara sahip ayrı bir dinleyici oluşturmak daha iyidir.
Düğüm bağlantı noktası
Bağlantıyı test etmenin en kolay yolu dinleyicide NodePort hizmet türünü kullanmaktır. Bu yöntemle, Kubernetes belgelerinde <nodeExternalIP>:<NodePort>gösterildiği gibi bağlanmak için kullanabilirsiniz.
Örneğin, NodePort hizmet türü ve aio-broker-nodeport hizmet adıyla, 1884 numaralı bağlantı noktasında (düğüm bağlantı noktası 31884) dinleyen yeni bir aracı dinleyicisi oluşturmak için aşağıdaki adımları izleyin.
Azure portalında IoT İşlemleri örneğine gidin.
Bileşenler'in altında MQTT Aracısı'ni seçin.
NodePort için MQTT broker dinleyicisini seçin>Oluştur. 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.
Dikkat
Kimlik doğrulamasını Yok olarak ayarlamak ve TLS'yi yapılandırmamak, kimlik doğrulamasını ve TLS'yi yalnızca test amacıyla kapatır.
Aşağıdaki ayarları girin:
Ayarlar Değer İsim aio-broker-nodeportHizmet adı Boş bırakın veya aio-broker-nodeportkullanın.Port 1884 Kimlik Doğrulaması Var olan veya Yok seçeneğini belirleyin. Yetkilendirme Var olan veya Yok seçeneğini belirleyin. Protokol MQTT'yi seçin. Düğüm bağlantı noktası 31884 Bağlantı noktasında TLS Ekle'yi seçerek dinleyiciye TLS>ayarları ekleyin. Test için TLS'ye ihtiyacınız yoksa bu adım gerekli değildir. Daha fazla bilgi için bkz . BrokerListener.
Dinleyiciyi oluşturmak için Oluştur'u seçin.
Not
Kubernetes varsayılan olarak düğüm bağlantı noktası numarası 30000 ile 32767 arasında olmalıdır.
Düğümün dış IP adresini alın:
kubectl get nodes -o yaml | grep ExternalIP -C 1
Çıkış aşağıdaki örneğe benzer görünmelidir:
- address: 104.197.41.11
type: ExternalIP
allocatable:
--
- address: 23.251.152.56
type: ExternalIP
allocatable:
...
Aracıya bağlanmak için dış IP adresini ve düğüm bağlantı noktasını kullanın. Örneğin, aracıya bir ileti yayımlamak için:
mosquitto_pub --host <EXTERNAL_IP> --port 31884 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Eğer çıktıda dış IP yoksa, muhtemelen k3s, k3d veya minikube gibi düğümün dış IP adresini varsayılan olarak göstermeyen bir Kubernetes kurulumu kullanıyorsunuzdur. Bu durumda, aynı ağdaki makinelerden düğüm portu ile birlikte dahili IP üzerinden brokera erişebilirsiniz. Örneğin, düğümün iç IP adresini almak için:
kubectl get nodes -o yaml | grep InternalIP -C 1
Çıkış aşağıdaki örneğe benzer görünmelidir:
- address: 172.19.0.2
type: InternalIP
allocatable:
Ardından, aynı küme içindeki bir makineden aracıya bağlanmak için iç IP adresini ve düğüm bağlantı noktasını kullanın. Kubernetes tek düğümlü k3'ler gibi yerel bir makinede çalışıyorsa, genellikle iç IP adresi yerine kullanabilirsiniz localhost . Kubernetes, k3d gibi bir Docker kapsayıcısında çalışıyorsa, iç IP adresi kapsayıcının IP adresine karşılık gelir ve konak makineden erişilebilir olmalıdır.
Yük Dengeleyici
Aracıyı internete açık hale getirmenin bir diğer yolu LoadBalancer hizmet türünü kullanmaktır. Bu yöntem daha karmaşıktır ve bağlantı noktası iletmeyi ayarlama gibi daha fazla yapılandırma gerektirebilir.
Örneğin, LoadBalancer hizmet türü, aio-broker-loadbalancer hizmet adı ile ve 1883 numaralı bağlantı noktasında dinleyen yeni bir aracı dinleyicisi oluşturmak 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.
NodePort için MQTT broker dinleyicisini seçin>Oluştur. 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.
Dikkat
Kimlik doğrulamasını Yok olarak ayarlamak ve TLS'yi yapılandırmamak, kimlik doğrulamasını ve TLS'yi yalnızca test amacıyla kapatır.
Aşağıdaki ayarları girin:
Ayarlar Değer İsim aio-broker-loadbalancerHizmet adı Boş bırakın veya aio-broker-loadbalancerkullanın.Port 1883 Kimlik Doğrulaması Var olan veya Yok seçeneğini belirleyin. Yetkilendirme Var olan veya Yok seçeneğini belirleyin. Protokol MQTT'yi seçin. Bağlantı noktasında TLS Ekle'yi seçerek dinleyiciye TLS>ayarları ekleyin. Test için TLS'ye ihtiyacınız yoksa bu adım gerekli değildir. Daha fazla bilgi için bkz . BrokerListener.
Dinleyiciyi oluşturmak için Oluştur'u seçin.
Dinleyiciyi oluşturmak için Oluştur'u seçin.
Aracı hizmetinin dış IP adresini alın:
kubectl get service aio-broker-loadbalancer --namespace azure-iot-operations
Çıktı aşağıdaki örneğe benzer görünüyorsa:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aio-broker-loadbalancer LoadBalancer 10.x.x.x x.x.x.x 1883:30382/TCP 83s
Ardından yük dengeleyici hizmetine bir dış IP atandı. Aracıya bağlanmak için dış IP adresini ve bağlantı noktasını kullanabilirsiniz. Örneğin, aracıya bir ileti yayımlamak için:
mosquitto_pub --host <EXTERNAL_IP> --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Harici IP atanmamışsa, aracıya erişmek için port yönlendirme veya sanal bir anahtar kullanmanız gerekebilir.
Bağlantı yönlendirmesini kullanın
With minikube, kind ve diğer küme öykünme sistemleriyle, dış IP otomatik olarak atanamayabilir. Örneğin, durum Beklemede görünebilir.
Aracıya erişmek için aracı dinleyici bağlantı noktasını konağa iletin.
# Using aio-broker-loadbalancer service name and listener port 1883 as example kubectl port-forward --namespace azure-iot-operations service/aio-broker-loadbalancer <HOST_PORT>:1883Bağlantı noktası iletme komutunu terminalde çalışır durumda bırakın.
Bağlantı noktası iletme olmadan örnekle aynı kimlik doğrulaması ve TLS yapılandırmasıyla konak bağlantı noktasında aracıya bağlanın.
Minikube hakkında daha fazla bilgi için bkz. Bir Kümedeki Uygulamalara Erişmek için Bağlantı Noktası Yönlendirmesi Kullanma.
AKS Uç Temel Bileşenleri'ta bağlantı noktası iletme
AKS Uç Temel Bileşenleri için birkaç adım daha gerçekleştirmeniz gerekir. AKS Uç Temel Bileşenleri ile dış IP adresini almak aracıya bağlanmak için yeterli olmayabilir. Aracının hizmetine giden trafiğe izin vermek için port yönlendirmeyi ayarlamanız ve güvenlik duvarında bağlantı noktasını açmanız gerekebilir.
İlk olarak, broker yük dengeleyici dinleyicisinin dış IP adresini alın:
kubectl get service broker-loadbalancer --namespace azure-iot-operationsÇıktı aşağıdaki örneğe benzer görünmelidir:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE broker-loadbalancer LoadBalancer 10.x.x.x 192.168.0.4 1883:30366/TCP 14hDış IP adresi
broker-loadbalancerve192.168.0.4numaralı bağlantı noktasındaki1883servisine aktarımı ayarlayın.netsh interface portproxy add v4tov4 listenport=1883 connectport=1883 connectaddress=192.168.0.4Brokerın hizmetine trafiğin izin vermesi için güvenlik duvarında portu açın.
New-NetFirewallRule -DisplayName "Azure IoT Operations MQTT Broker" -Direction Inbound -Protocol TCP -LocalPort 1883 -Action AllowMQTT aracısına bağlanmak için konağın genel IP adresini kullanın.
Bağlantı noktası iletme hakkında daha fazla bilgi için bkz . Kubernetes hizmetlerini dış cihazlara sunma.
Localhost üzerinden erişim
Bazı Kubernetes dağıtımları, MQTT aracısını küme yapılandırmasının bir parçası olarak konak sistemindeki () bir bağlantı noktasında kullanıma açabilir.localhost Aynı konak üzerindeki istemcilerin MQTT aracısına erişmesini kolaylaştırmak için bu yaklaşımı kullanın.
Örneğin, MQTT aracısının varsayılan MQTT bağlantı noktası 1883'ü localhost:1883 ile eşleyen bir k3d kümesi oluşturmak için:
k3d cluster create --port '1883:1883@loadbalancer'
Veya mevcut bir kümeyi güncelleştirmek için:
k3d cluster edit <CLUSTER_NAME> --port-add '1883:1883@loadbalancer'
Ardından, localhost ve bağlantı noktasını kullanarak aracıya bağlanın. Örneğin, aracıya bir ileti yayımlamak için:
mosquitto_pub --host localhost --port 1883 --message "hello" --topic "world" --debug # Add authentication and TLS options matching listener settings
Yalnızca test için TLS ve kimlik doğrulamasını kapatma
MQTT aracısının varsayılan olarak TLS ve hizmet hesapları kimlik doğrulamasını kullanmasının nedeni, IoT çözümünüzün saldırganlara yanlışlıkla maruz kalmasını en aza indiren varsayılan olarak güvenli bir deneyim sağlamaktır. Üretimde TLS ve kimlik doğrulamasını kapatmamalısınız. Kimlik doğrulaması ve TLS olmadan MQTT aracısını İnternet'e ifşa etmek yetkisiz erişime ve hatta dağıtılmış hizmet reddi saldırılarına neden olabilir.
Uyarı
Riskleri anlıyorsanız ve iyi kontrol edilen bir ortamda güvensiz bir bağlantı noktası kullanmanız gerekiyorsa, tls ve authenticationRef ayarlarını dinleyici yapılandırmasından kaldırarak TLS'yi ve kimlik doğrulamayı test amaçlı kapatabilirsiniz.
Azure portalında IoT İşlemleri örneğine gidin.
Bileşenler'in altında MQTT Aracısı'ni seçin.
NodePort için MQTT aracı dinleyicisini veya LoadBalancer için MQTT aracı dinleyicisini seçin>Oluştur. 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.
Dikkat
Kimlik doğrulamasını Yok olarak ayarlamak ve TLS'yi yapılandırmamak, kimlik doğrulamasını ve TLS'yi yalnızca test amacıyla kapatır.
Aşağıdaki ayarları girin:
Ayarlar Değer İsim Dinleyici için bir ad girin. Hizmet adı Bir hizmet adı girin. Port Bir bağlantı noktası numarası girin. Kimlik Doğrulaması Yok'u seçin. Yetkilendirme Yok'u seçin. Protokol MQTT'yi seçin. Düğüm bağlantı noktası Düğüm portunu kullanıyorsanız 30000 ile 32767 arasında bir sayı girin. Dinleyiciyi oluşturmak için Oluştur'u seçin.