Skip to content

Commit 9f2cd47

Browse files
Merge pull request #3707 from MicrosoftDocs/main638859674168990301sync_temp
For protected branch, push strategy should use PR and merge to target branch method to work around git push error
2 parents 20ef531 + 3d1d694 commit 9f2cd47

File tree

184 files changed

+456
-202
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+456
-202
lines changed

AKS-Arc/TOC.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
href: create-clusters-terraform.md
6363
- name: Azure Resource Manager template
6464
href: resource-manager-quickstart.md
65+
- name: REST API
66+
href: aks-create-clusters-api.md
6567
- name: Networking
6668
items:
6769
- name: Create logical networks
@@ -187,6 +189,8 @@
187189
href: network-validation-errors.md
188190
- name: Network validation error due to .local domain
189191
href: network-validation-error-local.md
192+
- name: BGP with FRR not working
193+
href: connectivity-troubleshoot.md
190194
- name: Reference
191195
items:
192196
- name: Azure CLI

AKS-Arc/aks-create-clusters-api.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
---
2+
title: Create Kubernetes clusters using REST APIs
3+
description: Learn how to create Kubernetes clusters in Azure Local using REST API for the Hybrid Container Service.
4+
ms.topic: how-to
5+
author: rcheeran
6+
ms.date: 06/19/2025
7+
ms.author: rcheeran
8+
ms.lastreviewed: 06/19/2025
9+
ms.reviewer: rjaini
10+
---
11+
12+
# Create Kubernetes clusters using the REST API
13+
14+
[!INCLUDE [hci-applies-to-23h2](includes/hci-applies-to-23h2.md)]
15+
16+
This article describes how to create Kubernetes clusters on Azure Local using the REST API. The Azure resource type for [AKS Arc provisioned clusters](/azure/templates/microsoft.hybridcontainerservice/provisionedclusterinstances?pivots=deployment-language-arm-template) is **"Microsoft.HybridContainerService/provisionedClusterInstances"**. This resource is an extension of the [connected clusters](/azure/templates/microsoft.kubernetes/connectedclusters?pivots=deployment-language-arm-template) resource type, **"Microsoft.Kubernetes/connectedClusters"**. Due to this dependency, you must first create a connected cluster resource before creating an AKS Arc resource.
17+
18+
## Before you begin
19+
20+
Before you begin, make sure you have the following details from your on-premises infrastructure administrator:
21+
22+
- **Azure subscription ID**: The Azure subscription ID that Azure Local uses for deployment and registration.
23+
- **Custom Location ID**: The Azure Resource Manager ID of the custom location. The custom location is configured during the Azure Local cluster deployment. Your infrastructure admin should give you the Resource Manager ID of the custom location. This parameter is required in order to create Kubernetes clusters. If the infrastructure admin provides a custom location name and resource group name, you can also get the Resource Manager ID using the following command:
24+
25+
```azurecli
26+
az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv
27+
```
28+
29+
- **Network ID**: The Azure Resource Manager ID of the Azure Local logical network you created [following these steps](aks-networks.md). Your admin should give you the ID of the logical network. This parameter is required in order to create Kubernetes clusters. If you know the resource group in which the logical network was created, you can also get the Azure Resource Manager ID using the following command:
30+
31+
```azurecli
32+
az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv
33+
```
34+
35+
- **Create an SSH key pair**: Create an SSH key pair in Azure and store the private key file for troubleshooting and log collection purposes. For detailed instructions, see [Create and store SSH keys with the Azure CLI](/azure/virtual-machines/ssh-keys-azure-cli), or with the [Azure portal](/azure/virtual-machines/ssh-keys-portal).
36+
- To connect to the Kubernetes cluster from anywhere, create a Microsoft Entra group and add members to it. All the members in the Microsoft Entra group have cluster administrator access to the cluster. Make sure to add yourself as a member to the Microsoft Entra group. If you don't add yourself, you can't access the Kubernetes cluster using **kubectl**. For more information about creating Microsoft Entra groups and adding users, see [Manage Microsoft Entra groups and group membership](/entra/fundamentals/how-to-manage-groups).
37+
38+
## Step 1: Create a connected cluster resource
39+
40+
See the API definition for [connected clusters](/rest/api/hybridkubernetes/connected-cluster/create) and create a **PUT** request with the `kind` property set to `ProvisionedCluster`. The following example is a sample **PUT** request to create a connected cluster resource using the REST API:
41+
42+
```http
43+
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kubernetes/connectedClusters/{connectedClusterName}?api-version=2024-01-01
44+
Content-Type: application/json
45+
Authorization: Bearer <access_token>
46+
47+
{
48+
"location": "<region>",
49+
"identity": {
50+
"type": "SystemAssigned"
51+
},
52+
"kind": "ProvisionedCluster",
53+
"properties": {
54+
"agentPublicKeyCertificate": "",
55+
"azureHybridBenefit": "NotApplicable",
56+
"distribution": "AKS",
57+
"distributionVersion": "1.0",
58+
"aadProfile": {
59+
"enableAzureRBAC": true,
60+
"adminGroupObjectIDs": [
61+
"<entra-group-id>"
62+
],
63+
"tenantID": "<tenant-id>"
64+
},
65+
}
66+
}
67+
```
68+
69+
Replace all placeholder values with your actual details. For more information, see the [connected clusters API documentation](/rest/api/hybridkubernetes/connected-cluster/create).
70+
71+
## Step 2: Create a provisioned cluster resource
72+
73+
See the API definition for [provisioned clusters](/rest/api/hybridcontainer/provisioned-cluster-instances/create-or-update). In this **PUT** call, pass the Azure Resource Manager identifier created in the previous step as the URI parameter. The following code is an example HTTP **PUT** request to create a provisioned cluster resource with only the required parameters:
74+
75+
```http
76+
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.HybridContainerService/provisionedClusterInstances/{clusterName}?api-version=2024-01-01-preview
77+
Content-Type: application/json
78+
Authorization: Bearer <access_token>
79+
80+
{
81+
"extendedLocation": {
82+
"type": "CustomLocation",
83+
"name": "<ARM ID of Custom Location>"
84+
},
85+
"properties": {
86+
"controlPlane": {
87+
"count": 1,
88+
"vmSize": "Standard_A4_v2"
89+
},
90+
"agentPoolProfiles": [
91+
{
92+
"name": "default-nodepool-1",
93+
"count": 1,
94+
"vmSize": "Standard_A4_v2",
95+
"osType": "Linux",
96+
}
97+
],
98+
"linuxProfile": {
99+
"ssh": {
100+
"publicKeys": [
101+
{
102+
"keyData": "<SSH public key>"
103+
}
104+
]
105+
}
106+
},
107+
"cloudProviderProfile": {
108+
"infraNetworkProfile": {
109+
"vnetSubnetIds": [
110+
"<ARM ID of logical network>"
111+
]
112+
}
113+
},
114+
}
115+
}
116+
117+
```
118+
119+
Replace the placeholder values with your actual details. For more information, see the [provisioned clusters API documentation](/rest/api/hybridcontainer/provisioned-cluster-instances/create-or-update).
120+
121+
## Connect to the Kubernetes cluster
122+
123+
Now you can connect to your Kubernetes cluster by running the `az connectedk8s proxy` command from your development machine. Make sure you sign in to Azure before running this command. If you have multiple Azure subscriptions, select the appropriate subscription ID using the [az account set](/cli/azure/account#az-account-set) command.
124+
125+
This command downloads the **kubeconfig** of your Kubernetes cluster to your development machine and opens a proxy connection channel to your on-premises Kubernetes cluster. The channel is open for as long as the command runs. Let this command run for as long as you want to access your cluster. If it times out, close the CLI window, open a fresh one, and then run the command again.
126+
127+
You must have Contributor permissions on the resource group that hosts the Kubernetes cluster in order to successfully run the following command:
128+
129+
```azurecli
130+
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
131+
```
132+
133+
Expected output:
134+
135+
```output
136+
Proxy is listening on port 47011
137+
Merged "aks-workload" as current context in .\\aks-arc-kube-config
138+
Start sending kubectl requests on 'aks-workload' context using
139+
kubeconfig at .\\aks-arc-kube-config
140+
Press Ctrl+C to close proxy.
141+
```
142+
143+
Keep this session running and connect to your Kubernetes cluster from a different terminal or command prompt. Verify that you can connect to your Kubernetes cluster by running the `kubectl get` command. This command returns a list of the cluster nodes:
144+
145+
```azurecli
146+
kubectl get node -A --kubeconfig .\aks-arc-kube-config
147+
```
148+
149+
The following example output shows the node you created in the previous steps. Make sure the node status is **Ready**:
150+
151+
```output
152+
NAME STATUS ROLES AGE VERSION
153+
moc-l0ttdmaioew Ready control-plane,master 34m v1.24.11
154+
moc-ls38tngowsl Ready <none> 32m v1.24.11
155+
```
156+
157+
## Next steps
158+
159+
[AKS Arc overview](overview.md)

AKS-Arc/aks-troubleshoot.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Troubleshoot common issues in AKS enabled by Azure Arc
33
description: Learn about common issues and workarounds in AKS enabled by Arc.
44
ms.topic: how-to
55
author: sethmanheim
6-
ms.date: 04/30/2025
6+
ms.date: 06/18/2025
77
ms.author: sethm
88
ms.lastreviewed: 04/01/2025
99
ms.reviewer: abha
@@ -36,13 +36,15 @@ The following sections describe known issues for AKS enabled by Azure Arc:
3636

3737
| AKS Arc operation | Issue |
3838
|------------------------|-------|
39+
| General network validation errors | [Troubleshoot network validation errors](network-validation-errors.md) |
3940
| Create validation | [Control plane configuration validation errors](control-plane-validation-errors.md) |
4041
| Create validation | [K8sVersionValidation error](cluster-k8s-version.md) |
4142
| Create validation | [KubeAPIServer unreachable error](kube-api-server-unreachable.md) |
4243
| Network configuration issues | [Use diagnostic checker](aks-arc-diagnostic-checker.md) |
4344
| Kubernetes steady state | [Resolve issues due to out-of-band deletion of storage volumes](delete-storage-volume.md) |
4445
| Release validation | [Azure Advisor upgrade recommendation message](azure-advisor-upgrade.md) |
4546
| Network validation | [Network validation error due to .local domain](network-validation-error-local.md) |
47+
| BGP with FRR not working | [Troubleshoot BGP with FRR in AKS Arc environments](connectivity-troubleshoot.md) |
4648

4749
## Next steps
4850

AKS-Arc/connectivity-troubleshoot.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
title: Troubleshoot BGP with FRR in AKS Arc environments
3+
description: Learn how to troubleshoot BGP connectivity issues when using MetalLB with FRR in AKS Arc deployments.
4+
author: sethmanheim
5+
ms.date: 06/19/2025
6+
ms.author: sethm
7+
ms.topic: troubleshooting
8+
ms.reviewer: srikantsarwa
9+
ms.lastreviewed: 06/19/2025
10+
11+
---
12+
13+
# BGP with FRR not working in AKS Arc environment
14+
15+
This article helps you identify and resolve Border Gateway Protocol (BGP) connectivity issues when using MetalLB with Free Range Routing (FRR) in Azure Kubernetes Service (AKS) Arc environments.
16+
17+
Use this guidance when BGP sessions fail to establish, external IP routing doesn't work correctly, or network connectivity to exposed services becomes unreliable in your AKS Arc deployment.
18+
19+
## Symptoms
20+
21+
In environments using MetalLB with FRR for BGP peering, you might experience the following issues:
22+
23+
- BGP sessions are not established or keep flapping, a condition where the BGP session repeatedly goes up and down, causing route instability. This behavior can be due to network issues, misconfigurations, or hardware problems. It can result in degraded performance or loss of service availability.
24+
- Services of type `LoadBalancer` don't receive properly routed external IPs.
25+
- Advertised routes are missing or not propagated to upstream routers.
26+
- Network connectivity to exposed services is inconsistent or unavailable.
27+
28+
These symptoms are often observed in specific hardware environments such as Hyper-Converged Infrastructure (HCI) or where strict network/security policies are enforced.
29+
30+
## Mitigation
31+
32+
If you encounter these issues with FRR, you can temporarily disable it using Azure CLI:
33+
34+
```azurecli
35+
# Retrieve the object ID for the managed identity
36+
$objID = az ad sp list --filter "appId eq '087fca6e-4606-4d41-b3f6-5ebdf75b8b4c'" --query "[].id" --output tsv
37+
38+
# Update the arcnetworking extension to disable FRR
39+
az k8s-extension update \
40+
--cluster-name $clusterName \
41+
-g $rgName \
42+
--cluster-type connectedClusters \
43+
--extension-type microsoft.arcnetworking \
44+
--config "k8sRuntimeFpaObjectId=$objID" \
45+
--config "metallb.speaker.frr.enabled=false" \
46+
-n arcnetworking
47+
```
48+
49+
## Troubleshooting steps
50+
51+
Use the following steps to diagnose and resolve BGP issues with MetalLB and FRR in your AKS Arc environment.
52+
53+
### Check BGP configuration
54+
55+
```azurecli
56+
kubectl get ipaddresspools -A -o yaml
57+
kubectl get bgppeers.metallb.io -A -o yaml
58+
kubectl get bgpadvertisements -A -o yaml
59+
```
60+
61+
### Collect logs from MetalLB speaker (FRR)
62+
63+
```azurecli
64+
# Get the list of MetalLB speaker pods
65+
kubectl get pods -n kube-system
66+
67+
# Speaker container logs
68+
kubectl logs -n kube-system arcnetworking-metallb-speaker-xxxxx -c speaker
69+
70+
# FRR container logs
71+
kubectl logs -n kube-system arcnetworking-metallb-speaker-xxxxx -c frr
72+
```
73+
74+
### Review TOR switch configuration
75+
76+
- Configuration and logs from the top-of-rack (TOR) switch or upstream router might be necessary.
77+
- These logs are hardware/vendor-specific and not covered in this guide.
78+
79+
## Next steps
80+
81+
[Official MetalLB troubleshooting guide](https://metallb.universe.tf/troubleshooting/#with-frr)
82+

0 commit comments

Comments
 (0)