Skip to content

Commit b28b7a3

Browse files
authored
Merge pull request #290366 from kgremban/ga-prod
New: AIO production deployment guidelines
2 parents 0a68c9a + d11b924 commit b28b7a3

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
---
2+
title: Production deployment guidelines
3+
description: Learn about the recommendations and guidelines for preparing Azure IoT Operations for a production deployment.
4+
author: kgremban
5+
ms.author: kgremban
6+
ms.topic: concept-article
7+
ms.date: 10/25/2024
8+
ms.service: azure-iot-operations
9+
10+
#CustomerIntent: I want to understand system, configuration, and security best practices before deploying to production.
11+
---
12+
13+
# Production deployment guidelines
14+
15+
Security and scalability are a priority for deploying Azure IoT Operations. This article outlines guidelines that you should take into consideration when setting up Azure IoT Operations for production.
16+
17+
Decide whether you're deploying Azure IoT Operations to a single-node or multi-node cluster before considering the appropriate configuration. Many of the guidelines in this article apply regardless of the cluster type, but when there is a difference it's called out specifically.
18+
19+
## Platform
20+
21+
Currently, K3s on Ubuntu 20.04 is the only generally available platform for deploying Azure IoT Operations in production.
22+
23+
## Cluster setup
24+
25+
Ensure that your hardware setup is sufficient for your scenario and that you begin with a secure environment.
26+
27+
### System configuration
28+
29+
Create an Arc-enabled K3s cluster that meets the system requirements.
30+
31+
* [Configure the cluster](./howto-prepare-cluster.md) according to documentation.
32+
* If you expect intermittent connectivity for your cluster, ensure that you've allocated enough disk space to the cluster cache data and messages while the [cluster is offline](../overview-iot-operations.md#offline-support).
33+
* If possible, have a second cluster as a staging area for testing new changes before deploying to the primary production cluster.
34+
* [Turn off auto-upgrade for Azure Arc](/azure/azure-arc/kubernetes/agent-upgrade#toggle-automatic-upgrade-on-or-off-when-connecting-a-cluster-to-azure-arc) to have complete control over when new updates are applied to your cluster.
35+
* *For multi-node clusters*: [Configure clusters with Edge Volumes](./howto-prepare-cluster.md#configure-multi-node-clusters-for-azure-container-storage) to prepare for enabling fault tolerance during deployment.
36+
37+
### Security
38+
39+
Consider the following measures to ensure your cluster setup is secure before deployment.
40+
41+
* [Validate images](../secure-iot-ops/howto-validate-images.md) to ensure they're signed by Microsoft.
42+
* When doing TLS encryption, [bring your own issuer](../secure-iot-ops/concept-default-root-ca.md#bring-your-own-issuer) and integrate with an enterprise PKI.
43+
* [Use secrets](../secure-iot-ops/howto-manage-secrets.md) for on-premises authentication.
44+
* Keep your cluster and Azure IoT Operations deployment up to date with the latest patches and minor releases to get all available security and bug fixes.
45+
* Use [user-assigned managed identities](./howto-enable-secure-settings.md#set-up-a-user-assigned-managed-identity-for-cloud-connections) for cloud connections.
46+
47+
### Networking
48+
49+
If you use enterprise firewalls or proxies, add the [Azure IoT Operations endpoints](./overview-deploy.md#azure-iot-operations-endpoints) to your allowlist.
50+
51+
### Observability
52+
53+
For production deployments, [deploy observability resources](../configure-observability-monitoring/howto-configure-observability.md) on your cluster before deploying Azure IoT Operations. We also recommend setting up [Prometheus alerts in Azure Monitor](/azure/azure-monitor/alerts/prometheus-alerts).
54+
55+
## Deployment
56+
57+
For a production-ready deployment, include the following configurations during the Azure IoT Operations deployment.
58+
59+
### MQTT broker
60+
61+
In the Azure portal deployment wizard, the broker resource is set up in the **Configuration** tab.
62+
63+
* [Configure cardinality settings](../manage-mqtt-broker/howto-configure-availability-scale.md#configure-cardinality-directly) based on memory profile and needs for handling connections and messages. For example, the following settings could support a single-node or multi-node cluster:
64+
65+
| Setting | Single node | Multi node |
66+
| ------- | ----------- | ---------- |
67+
| **frontendReplicas** | 2 | 5 |
68+
| **frontendWorkers** | 4 | 8 |
69+
| **backendRedundancyFactor** | 2 | 2 |
70+
| **backendWorkers** | 1 | 4 |
71+
| **backendPartitions** | 1 | 5 |
72+
| [Memory profile](../manage-mqtt-broker/howto-configure-availability-scale.md#configure-memory-profile) | Low | High |
73+
74+
* [Encrypt internal traffic](../manage-mqtt-broker/howto-encrypt-internal-traffic.md).
75+
76+
* Set [disk-backed message buffer](../manage-mqtt-broker/howto-disk-backed-message-buffer.md) with a max size that prevents RAM overflow.
77+
78+
### Schema registry and storage
79+
80+
In the Azure portal deployment wizard, the schema registry and its required storage account are set up in the **Dependency management** tab.
81+
82+
* The storage account must have public network access enabled.
83+
* The storage account must have hierarchical namespace enabled.
84+
* The schema registry's managed identity must have contributor permissions for the storage account.
85+
86+
### Fault tolerance
87+
88+
*Multi-node clusters*: Fault tolerance can be enabled in the **Dependency management** tab of the Azure portal deployment wizard. It's only supported on multi-node clusters, and is recommended for production deployment.
89+
90+
### Secure settings
91+
92+
During deployment, you have the option to use test settings or secure settings. For production deployments, choose secure settings. If you're upgrading an existing test settings deployment for production, follow the steps in [Enable secure settings](./howto-enable-secure-settings.md).
93+
94+
## Post-deployment
95+
96+
After deploying Azure IoT Operations, have the following configurations in place for a production scenario.
97+
98+
### MQTT broker
99+
100+
After deployment, you can [edit BrokerListener resources](../manage-mqtt-broker/howto-configure-brokerlistener.md):
101+
102+
* [Configure TLS with automatic certificate management](../manage-mqtt-broker/howto-configure-brokerlistener.md#configure-tls-with-automatic-certificate-management) for listeners.
103+
104+
You can also [edit BrokerAuthentication resources]
105+
106+
* Use [X.509 certificates or Kubernetes service account tokens for authentication](../manage-mqtt-broker/howto-configure-authentication.md#configure-authentication-method).
107+
* Don't use no-auth.
108+
109+
When you create a new resource, manage its authorization:
110+
111+
* [Create a BrokerAuthorization resource](../manage-mqtt-broker/howto-configure-authorization.md) and provide the least privilege needed for the topic asset.
112+
113+
### OPC UA broker
114+
115+
For connecting to assets at production, [configure OPC UA authentication](../discover-manage-assets/overview-opcua-broker-certificates-management.md):
116+
117+
* Don't use no-auth. Connectivity to OPC UA servers isn't supported without authentication.
118+
* Set up a secure connection to OPC UA server. Use a production PKI and [configure application certificates](../discover-manage-assets/howto-configure-opcua-certificates-infrastructure.md#configure-a-self-signed-application-instance-certificate) and [trust list](../discover-manage-assets/howto-configure-opcua-certificates-infrastructure.md#configure-the-trusted-certificates-list).
119+
120+
### Dataflows
121+
122+
When using dataflows in production:
123+
124+
* [Use service account token (SAT) authentication](../connect-to-cloud/howto-configure-mqtt-endpoint.md#kubernetes-service-account-token-sat) with the MQTT broker (default).
125+
* Always used managed identity authentication. When possible, [use user-assigned managed identity](../connect-to-cloud/howto-configure-mqtt-endpoint.md#user-assigned-managed-identity) in dataflow endpoints for flexibility and auditability.
126+
* [Scale dataflow profiles](../connect-to-cloud/howto-configure-dataflow-profile.md#scaling) to improve throughput and have high availability.
127+
* Group multiple dataflows into dataflow profiles and customize scaling for each profile accordingly.
128+
129+

articles/iot-operations/toc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ items:
2525
href: deploy-iot-ops/howto-manage-update-uninstall.md
2626
- name: Enable secure settings
2727
href: deploy-iot-ops/howto-enable-secure-settings.md
28+
- name: Production deployment guidelines
29+
href: deploy-iot-ops/concept-production-guidelines.md
2830
- name: Secure your deployment
2931
items:
3032
- name: Certificate management

0 commit comments

Comments
 (0)