Dela via


Skydda Azure IoT MQ Preview-kommunikation med BrokerListener

Viktigt!

Förhandsversion av Azure IoT Operations – aktiverad av Azure Arc finns för närvarande i FÖRHANDSVERSION. Du bör inte använda den här förhandsgranskningsprogramvaran i produktionsmiljöer.

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

Om du vill anpassa nätverksåtkomsten och säkerheten använder du BrokerListener-resursen. En lyssnare motsvarar en nätverksslutpunkt som exponerar asynkron meddelandekö för nätverket. Du kan ha en eller flera BrokerListener-resurser för varje Broker-resurs och därmed flera portar med olika åtkomstkontroll vardera.

Varje lyssnare kan ha sina egna autentiserings- och auktoriseringsregler som definierar vem som kan ansluta till lyssnaren och vilka åtgärder de kan utföra på koordinatorn. Du kan använda BrokerAuthentication - och BrokerAuthorization-resurser för att ange åtkomstkontrollprinciperna för varje lyssnare. Med den här flexibiliteten kan du finjustera dina MQTT-klienters behörigheter och roller baserat på deras behov och användningsfall.

BrokerListener-resursen har följande fält:

Fältnamn Obligatoriskt Beskrivning
brokerRef Ja Namnet på den asynkrona resurs som lyssnaren tillhör. Det här fältet krävs och måste matcha en befintlig Broker-resurs i samma namnområde.
port Ja Portnumret som lyssnaren lyssnar på. Det här fältet krävs och måste vara ett giltigt TCP-portnummer.
serviceType Nej Typen av Kubernetes-tjänst som skapats för den här lyssnaren. Det här underfältet är valfritt och standardvärdet är clusterIp. Måste vara antingen loadBalancer, clusterIpeller nodePort.
serviceName Nej Namnet på Kubernetes-tjänsten som skapats för den här lyssnaren. Kubernetes skapar DNS-poster för detta serviceName som klienter ska använda för att ansluta till Förhandsversionen av Azure IoT MQ. Det här underfältet är valfritt och standardvärdet är aio-mq-dmqtt-frontend. Viktigt: Om du har flera lyssnare med samma serviceType och serviceNamedelar lyssnarna samma Kubernetes-tjänst. Mer information finns i Tjänstnamn och tjänsttyp.
authenticationEnabled Nej En boolesk flagga som anger om lyssnaren kräver autentisering från klienter. Om värdet är inställt truepå använder den här lyssnaren alla BrokerAuthentication-resurser som är associerade med den för att verifiera och autentisera klienterna. Om den här lyssnaren är inställd falsepå tillåter den här lyssnaren att alla klienter ansluter utan autentisering. Det här fältet är valfritt och standardvärdet är false. Mer information om autentisering finns i Konfigurera Azure IoT MQ Preview-autentisering.
authorizationEnabled Nej En boolesk flagga som anger om lyssnaren kräver auktorisering från klienter. Om värdet är trueinställt på använder den här lyssnaren alla BrokerAuthorization-resurser som är associerade med den för att verifiera och auktorisera klienterna. Om värdet är falseinställt på tillåter den här lyssnaren att alla klienter ansluter utan auktorisering. Det här fältet är valfritt och standardvärdet är false. Mer information om auktorisering finns i Konfigurera förhandsversion av Azure IoT MQ.
tls Nej TLS-inställningarna för lyssnaren. Fältet är valfritt och kan utelämnas för att inaktivera TLS för lyssnaren. Konfigurera TLS genom att ange en av följande typer:
* Om värdet är inställt automaticpå använder den här lyssnaren cert-manager för att hämta och förnya ett certifikat för lyssnaren. Om du vill använda den här typen anger du ett issuerRef fält som refererar till utfärdaren av certifikathanteraren.
* Om värdet är inställt manualpå använder lyssnaren ett manuellt angivet certifikat för lyssnaren. Om du vill använda den här typen anger du ett secretName fält som refererar till en Kubernetes-hemlighet som innehåller certifikatet och den privata nyckeln.
* Om värdet är inställt keyVaultpå använder lyssnaren ett certifikat från Azure Key Vault. Om du vill använda den här typen anger du ett keyVault fält som refererar till Azure Key Vault-instansen och hemligheten.
protocol Nej Det protokoll som lyssnaren använder. Det här fältet är valfritt och standardvärdet är mqtt. Måste vara antingen mqtt eller websockets.

Standard brokerlistener

När du distribuerar Förhandsversionen av Azure IoT Operations skapar distributionen även en BrokerListener-resurs med namnet listener i azure-iot-operations namnområdet. Den här lyssnaren är länkad till standardköresursen med namnet broker som också skapas under distributionen. Standardlyssnaren exponerar koordinatorn på port 8883 med TLS- och SAT-autentisering aktiverat. TLS-certifikatet hanteras automatiskt av cert-manager. Auktorisering är inaktiverat som standard.

Kontrollera lyssnaren genom att köra:

kubectl get brokerlistener listener -n azure-iot-operations -o yaml

Utdata bör se ut så här, med de flesta metadata borttagna för korthet:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
  name: listener
  namespace: azure-iot-operations
spec:
  brokerRef: broker
  authenticationEnabled: true
  authorizationEnabled: false
  port: 8883
  serviceName: aio-mq-dmqtt-frontend
  serviceType: clusterIp
  tls:
    automatic:
      issuerRef:
        group: cert-manager.io
        kind: Issuer
        name: mq-dmqtt-frontend

Mer information om standardresursen BrokerAuthentication som är länkad till den här lyssnaren finns i Standard brokerAuthentication-resurs.

Skapa nya BrokerListeners

Det här exemplet visar hur du skapar två nya BrokerListener-resurser för en Broker-resurs med namnet my-broker. Varje BrokerListener-resurs definierar en port och en TLS-inställning för en lyssnare som accepterar MQTT-anslutningar från klienter.

  • Den första BrokerListener-resursen med namnet my-test-listener definierar en lyssnare på port 1883 utan TLS och autentisering av. Klienter kan ansluta till asynkron meddelandekö utan kryptering eller autentisering.
  • Den andra BrokerListener-resursen med namnet my-secure-listener definierar en lyssnare på port 8883 med TLS och autentisering aktiverat. Endast autentiserade klienter kan ansluta till koordinatorn med TLS-kryptering. Fältet tls är inställt på automatic, vilket innebär att lyssnaren använder cert-manager för att hämta och förnya sitt servercertifikat.

Om du vill skapa dessa BrokerListener-resurser använder du det här YAML-manifestet på ditt Kubernetes-kluster:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
  name: my-test-listener
  namespace: azure-iot-operations
spec:
  authenticationEnabled: false
  authorizationEnabled: false
  brokerRef: broker
  port: 1883
---
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
  name: my-secure-listener
  namespace: azure-iot-operations
spec:
  authenticationEnabled: true
  authorizationEnabled: false
  brokerRef: broker
  port: 8883
  tls:
    automatic:
      issuerRef:
        name: e2e-cert-issuer
        kind: Issuer
        group: cert-manager.io

Tjänstnamn och tjänsttyp

Om du har flera BrokerListener-resurser med samma serviceType och serviceNamedelar resurserna samma Kubernetes-tjänst. Det innebär att tjänsten exponerar alla portar för alla lyssnare. Om du till exempel har två lyssnare med samma serviceType och serviceName, en på port 1883 och den andra på port 8883, exponerar tjänsten båda portarna. Klienter kan ansluta till asynkron meddelandekö på någon av portarna.

Det finns två viktiga regler att följa när du delar tjänstnamn:

  1. Lyssnare med samma serviceType måste dela samma serviceName.

  2. Lyssnare med olika serviceType måste ha olika serviceName.

I synnerhet är clusterIp tjänsten för standardlyssnaren på port 8883 och heter aio-mq-dmqtt-frontend. I följande tabell sammanfattas vad som händer när du skapar en ny lyssnare på en annan port:

Ny lyssnare serviceType Ny lyssnare serviceName Result
clusterIp aio-mq-dmqtt-frontend Den nya lyssnaren har skapats och tjänsten exponerar båda portarna.
clusterIp my-service Det går inte att skapa den nya lyssnaren eftersom tjänsttypen står i konflikt med standardlyssnaren.
loadBalancer eller nodePort aio-mq-dmqtt-frontend Det går inte att skapa den nya lyssnaren eftersom tjänstnamnet står i konflikt med standardlyssnaren.
loadBalancer eller nodePort my-service Den nya lyssnaren skapas och en ny tjänst skapas.