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.
Önemli
Bu sayfa, önizleme aşamasında olan Kubernetes dağıtım bildirimlerini kullanarak Azure IoT İşlemleri bileşenlerini yönetme yönergelerini içerir. Bu özellik çeşitli sınırlamalarla sağlanır ve üretim iş yükleri için kullanılmamalıdır.
Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.
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ı:
-
dağıtır.
ClusterIp
aracıya yalnızca Kubernetes kümesi içinden erişilebileceği anlamına gelir. Aracıya küme dışından erişmek için veyaLoadBalancer
türündeNodePort
bir hizmet 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 yalnızca test amaçlıdır.
wget https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml -O mqtt-client.yaml
Kubectl ile dağıtım dosyasını uygulayın:
kubectl apply -f mqtt-client.yaml
pod/mqtt-client created
Pod çalıştırıldıktan sonra komutunu kullanarak kubectl exec
pod içindeki komutları çalıştırın.
Örneğin, aracıya bir ileti yayımlamak için pod içinde bir kabuk açın:
kubectl exec --stdin --tty mqtt-client --namespace azure-iot-operations -- sh
Pod'un kabuğunun içinde aşağıdaki komutu çalıştırarak aracıya 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 adresine /var/run/secrets/tokens/broker-sat
bağlanan hizmet hesabı belirtecini kullanır. Belirteç 24 saat geçerlidir. İstemci ayrıca aracının TLS sertifika zincirini doğrulamak için öğesine /var/run/certs/ca.crt
bağlanan varsayılan kök CA sertifikasını 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.crt
bir 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 istemcisi, aracıyla kimlik doğrulaması yapmak ve konuya 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, hizmet türü, hizmet adı NodePort
ve 1884 numaralı bağlantı noktasında (düğüm bağlantı noktası 31884) dinleyen yeni bir aracı dinleyicisi aio-broker-nodeport
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 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:
Ayar Değer Veri Akışı Adı aio-broker-nodeport
Hizmet adı Boş bırakın veya kullanın aio-broker-nodeport
.Bağlantı noktası 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
Çıktıda dış IP yoksa k3s, k3d veya minikube gibi düğümün dış IP adresini varsayılan olarak kullanıma sunmayan bir Kubernetes kurulumu kullanıyor olabilirsiniz. Bu durumda, aynı ağdaki makinelerden düğüm bağlantı noktasıyla birlikte iç IP ile aracıya 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ı İnternet'te kullanıma sunmanın bir diğer yolu da hizmet türünü kullanmaktır LoadBalancer
. Bu yöntem daha karmaşıktır ve bağlantı noktası iletmeyi ayarlama gibi daha fazla yapılandırma gerektirebilir.
Örneğin, hizmet türü, hizmet adı LoadBalancer
ve 1883 numaralı bağlantı noktasında dinleyen yeni bir aracı dinleyicisi aio-broker-loadbalancer
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 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:
Ayar Değer Veri Akışı Adı aio-broker-loadbalancer
Hizmet adı Boş bırakın veya kullanın aio-broker-loadbalancer
.Bağlantı noktası 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
Dış IP atanmamışsa, aracıya erişmek için bağlantı noktası iletme veya sanal anahtar kullanmanız gerekebilir.
Bağlantı noktası iletmeyi kullanma
Küçükube, kind ve diğer küme öykünme sistemleriyle, dış IP otomatik olarak atanmayabilir. Örneğin, durum Beklemede olarak 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>:1883
Bağ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.
Küçükube hakkında daha fazla bilgi için bkz . Kümedeki Uygulamalara Erişmek için Bağlantı Noktası İletme kullanma.
AKS Edge Essentials'ta bağlantı noktası iletme
AKS Edge Essentials için birkaç adım daha gerçekleştirmeniz gerekir. AKS Edge Essentials ile dış IP adresini almak aracıya bağlanmak için yeterli olmayabilir. Aracının hizmetine giden trafiğe izin vermek için bağlantı noktası iletmeyi ayarlamanız ve güvenlik duvarında bağlantı noktasını açmanız gerekebilir.
İlk olarak, aracının 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 14h
Dış IP adresi
broker-loadbalancer
ve bağlantı noktasında hizmete bağlantı noktası192.168.0.4
iletmeyi1883
ayarlayın:netsh interface portproxy add v4tov4 listenport=1883 connectport=1883 connectaddress=192.168.0.4
Aracının hizmetine giden trafiğe izin vermek için güvenlik duvarında bağlantı noktasını açın:
New-NetFirewallRule -DisplayName "AIO MQTT Broker" -Direction Inbound -Protocol TCP -LocalPort 1883 -Action Allow
MQTT 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 ile eşlenen bir k3d kümesi oluşturmak için localhost:1883
:
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 aracıya bağlanmak için ve bağlantı noktasını kullanın localhost
. Ö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 denetlenen bir ortamda güvenli olmayan bir bağlantı noktası kullanmanız gerekiyorsa ve ayarlarını dinleyici yapılandırmasından kaldırarak tls ve kimlik doğrulamasını tls
authenticationRef
test amacıyla 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. 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:
Ayar Değer Veri Akışı Adı Dinleyici için bir ad girin. Hizmet adı Bir hizmet adı girin. Bağlantı noktası 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 bağlantı noktası kullanıyorsanız 30000 ile 32767 arasında bir sayı girin. Dinleyiciyi oluşturmak için Oluştur'u seçin.