Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/azure-cli/azure/cli/command_modules/acs/_consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,14 @@
CONST_APP_ROUTING_INTERNAL_NGINX = "Internal"
CONST_APP_ROUTING_NONE_NGINX = "None"

# managed gateway api installation
CONST_MANAGED_GATEWAY_INSTALLATION_DISABLED = "Disabled"
CONST_MANAGED_GATEWAY_INSTALLATION_STANDARD = "Standard"

# app routing istio mode
CONST_APP_ROUTING_ISTIO_MODE_ENABLED = "Enabled"
CONST_APP_ROUTING_ISTIO_MODE_DISABLED = "Disabled"

# all supported addons
ADDONS = {
"http_application_routing": CONST_HTTP_APPLICATION_ROUTING_ADDON_NAME,
Expand Down
67 changes: 67 additions & 0 deletions src/azure-cli/azure/cli/command_modules/acs/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,16 @@
- name: --enable-ai-toolchain-operator
type: bool
short-summary: Enable AI toolchain operator to the cluster.
- name: --enable-gateway-api
type: bool
short-summary: Enable managed installation of Gateway API CRDs from the standard release channel. Requires at least one managed Gateway API ingress provider to be enabled.
- name: --enable-app-routing-istio --enable-ari
type: bool
short-summary: Enable Gateway API based ingress on App Routing via Istio without service mesh functionality.
long-summary: |
This enables an ingress-only version of Istio that reconciles Gateway API resources for App Routing.
It does not provide service mesh functionality (e.g. mTLS, traffic management between services).
Cannot be used simultaneously with the Istio service mesh add-on (--enable-azure-service-mesh).
- name: --bootstrap-container-registry-resource-id
type: string
short-summary: Configure container registry resource ID. Must use "Cache" as bootstrap artifact source.
Expand Down Expand Up @@ -725,6 +735,8 @@
text: az aks create -g MyResourceGroup -n MyManagedCluster --node-provisioning-mode Auto --node-provisioning-default-pools None
- name: Create a Kubernetes cluster with KataVmIsolation enabled.
text: az aks create -g MyResourceGroup -n MyManagedCluster --os-sku AzureLinux --vm-size Standard_D4s_v3 --workload-runtime KataVmIsolation --node-count 1
- name: Create a kubernetes cluster with the Azure Service Mesh addon enabled with a managed installation of Gateway API CRDs from the standard release channel.
text: az aks create -g MyResourceGroup -n MyManagedCluster --enable-azure-service-mesh --enable-gateway-api
"""

helps["aks update"] = """
Expand Down Expand Up @@ -1142,6 +1154,22 @@
- name: --disable-ai-toolchain-operator
type: bool
short-summary: Disable AI toolchain operator.
- name: --enable-gateway-api
type: bool
short-summary: Enable managed installation of Gateway API CRDs from the standard release channel. Requires at least one managed Gateway API ingress provider to be enabled.
- name: --disable-gateway-api
type: bool
short-summary: Disable managed installation of Gateway API CRDs.
- name: --enable-app-routing-istio --enable-ari
type: bool
short-summary: Enable Gateway API based ingress on App Routing via Istio without service mesh functionality.
long-summary: |
This enables an ingress-only version of Istio that reconciles Gateway API resources for App Routing.
It does not provide service mesh functionality (e.g. mTLS, traffic management between services).
Cannot be used simultaneously with the Istio service mesh add-on (--enable-azure-service-mesh).
- name: --disable-app-routing-istio --disable-ari
type: bool
short-summary: Disable Gateway API based ingress on App Routing via Istio.
- name: --bootstrap-container-registry-resource-id
type: string
short-summary: Configure container registry resource ID. Must use "Cache" as bootstrap artifact source.
Expand Down Expand Up @@ -1230,6 +1258,10 @@
text: az aks update -g MyResourceGroup -n MyManagedCluster --node-provisioning-mode Auto --node-provisioning-default-pools None
- name: Upgrade load balancer sku to standard
text: az aks update --load-balancer-sku standard -g MyResourceGroup -n MyManagedCluster
- name: Update a kubernetes cluster to enable a managed installation of Gateway API CRDs from the standard release channel.
text: az aks update -g MyResourceGroup -n MyManagedCluster --enable-gateway-api
- name: Update a kubernetes cluster to disable the managed installation of Gateway API CRDs.
text: az aks update -g MyResourceGroup -n MyManagedCluster --disable-gateway-api
"""

helps["aks delete"] = """
Expand Down Expand Up @@ -2971,6 +3003,41 @@
long-summary: This command lists the DNS zone resources used in App Routing.
"""

helps["aks approuting gateway"] = """
type: group
short-summary: Commands to manage App Routing Gateway API implementations.
long-summary: A group of commands to manage Gateway API implementations for App Routing in a given cluster.
"""

helps["aks approuting gateway istio"] = """
type: group
short-summary: Commands to manage the Istio Gateway API implementation for App Routing.
long-summary: A group of commands to manage the Istio-based Gateway API implementation for App Routing in a given cluster.
"""

helps["aks approuting gateway istio enable"] = """
type: command
short-summary: Enable Gateway API based ingress on App Routing via Istio without service mesh functionality.
long-summary: |
This command enables an ingress-only version of Istio as a Gateway API implementation for App Routing
in the given cluster. This Istio instance only reconciles Gateway API resources and does not provide
service mesh functionality (e.g. mTLS, traffic management between services). Cannot be used
simultaneously with Azure Service Mesh (az aks mesh enable).
examples:
Comment on lines +3018 to +3026
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The help text for az aks approuting gateway istio enable/disable doesn't mention that the command does not enable App Routing itself (it only toggles the Gateway API implementation). Since the implementation is updated via _aks_approuting_update without setting enable_app_routing, users need to enable App Routing first (e.g., az aks approuting enable). Please clarify this prerequisite in the long-summary to prevent confusing failures.

Copilot uses AI. Check for mistakes.
- name: Enable Istio Gateway API implementation for App Routing.
text: az aks approuting gateway istio enable --resource-group MyResourceGroup --name MyManagedCluster
"""

helps["aks approuting gateway istio disable"] = """
type: command
short-summary: Disable Gateway API based ingress on App Routing via Istio.
long-summary: |
This command disables the ingress-only Istio Gateway API implementation for App Routing in the given cluster.
examples:
- name: Disable Istio Gateway API implementation for App Routing.
text: az aks approuting gateway istio disable --resource-group MyResourceGroup --name MyManagedCluster
"""

helps["aks machine"] = """
type: group
short-summary: Get information about machines in a nodepool of a managed clusters
Expand Down
35 changes: 35 additions & 0 deletions src/azure-cli/azure/cli/command_modules/acs/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,18 @@ def load_arguments(self, _):
'by that action.'
)
)
c.argument(
"enable_gateway_api",
action="store_true",
help="Enable managed installation of Gateway API CRDs from the standard release channel. "
"Requires a Gateway API implementation to be installed on the cluster (e.g., Azure Service Mesh)."
)
c.argument(
"enable_app_routing_istio",
options_list=["--enable-app-routing-istio", "--enable-ari"],
action="store_true",
help="Enable Gateway API based ingress on App Routing via Istio"
)

with self.argument_context('aks update') as c:
# managed cluster paramerters
Expand Down Expand Up @@ -873,6 +885,29 @@ def load_arguments(self, _):
'by that action.'
)
)
c.argument(
"enable_gateway_api",
action="store_true",
help="Enable managed installation of Gateway API CRDs from the standard release channel. "
"Requires a Gateway API implementation to be installed on the cluster (e.g., Azure Service Mesh)."
)
c.argument(
"disable_gateway_api",
action="store_true",
help="Disable managed installation of Gateway API CRDs."
)
c.argument(
"enable_app_routing_istio",
options_list=["--enable-app-routing-istio", "--enable-ari"],
action="store_true",
help="Enable Gateway API based ingress on App Routing via Istio."
)
c.argument(
"disable_app_routing_istio",
options_list=["--disable-app-routing-istio", "--disable-ari"],
action="store_true",
help="Disable Gateway API based ingress on App Routing via Istio."
)
with self.argument_context('aks delete') as c:
c.argument("if_match")
c.argument("if_none_match")
Expand Down
5 changes: 5 additions & 0 deletions src/azure-cli/azure/cli/command_modules/acs/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,11 @@ def load_command_table(self, _):
g.custom_command('update', 'aks_approuting_zone_update')
g.custom_command('list', 'aks_approuting_zone_list')

# AKS approuting gateway istio commands
with self.command_group('aks approuting gateway istio', managed_clusters_sdk, client_factory=cf_managed_clusters) as g:
g.custom_command('enable', 'aks_approuting_gateway_istio_enable')
g.custom_command('disable', 'aks_approuting_gateway_istio_disable', confirmation=True)

with self.command_group('aks safeguards'):
from .custom import AKSSafeguardsShowCustom as Show
from .custom import AKSSafeguardsCreateCustom as Create
Expand Down
43 changes: 42 additions & 1 deletion src/azure-cli/azure/cli/command_modules/acs/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -1035,6 +1035,10 @@ def aks_create(
# node provisioning
node_provisioning_mode=None,
node_provisioning_default_pools=None,
# gateway api
enable_gateway_api=False,
# app routing istio
enable_app_routing_istio=False,
):
# DO NOT MOVE: get all the original parameters and save them as a dictionary
raw_parameters = locals()
Expand Down Expand Up @@ -1228,6 +1232,12 @@ def aks_update(
# node provisioning
node_provisioning_mode=None,
node_provisioning_default_pools=None,
# gateway api
enable_gateway_api=False,
disable_gateway_api=False,
# app routing istio
enable_app_routing_istio=False,
disable_app_routing_istio=False,
):
# DO NOT MOVE: get all the original parameters and save them as a dictionary
raw_parameters = locals()
Expand Down Expand Up @@ -3967,6 +3977,34 @@ def aks_approuting_disable(
enable_app_routing=False)


def aks_approuting_gateway_istio_enable(
cmd,
client,
resource_group_name,
name,
):
return _aks_approuting_update(
cmd,
client,
resource_group_name,
name,
enable_app_routing_istio=True)


def aks_approuting_gateway_istio_disable(
cmd,
client,
resource_group_name,
name,
):
return _aks_approuting_update(
cmd,
client,
resource_group_name,
name,
disable_app_routing_istio=True)


def aks_approuting_update(
cmd,
client,
Expand Down Expand Up @@ -4079,7 +4117,9 @@ def _aks_approuting_update(
update_dns_zone=None,
dns_zone_resource_ids=None,
attach_zones=None,
nginx=None
nginx=None,
enable_app_routing_istio=None,
disable_app_routing_istio=None,
):
from azure.cli.command_modules.acs.managed_cluster_decorator import AKSManagedClusterUpdateDecorator

Expand All @@ -4095,6 +4135,7 @@ def _aks_approuting_update(
try:
mc = aks_update_decorator.fetch_mc()
mc = aks_update_decorator.update_app_routing_profile(mc)
mc = aks_update_decorator.update_ingress_profile_app_routing_istio(mc)
except DecoratorEarlyExitException:
return None

Expand Down
Loading
Loading