Skip to content

Commit 523e869

Browse files
levimmLi Ma
andauthored
AKS: support private cluster public fqdn feature with new api 2021-05-01 (Azure#3465)
* update sdk with latest swagger model * support public fqdn feature for private cluster * fix typo * fix comments * fix format * fix release history Co-authored-by: Li Ma <lima2@microsoft.com>
1 parent 8bd68b5 commit 523e869

File tree

8 files changed

+1399
-15
lines changed

8 files changed

+1399
-15
lines changed

src/aks-preview/HISTORY.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
Release History
44
===============
55

6+
0.5.16
7+
+++++
8+
* Vendor SDK using latest swagger with optional query parameter added
9+
* Support private cluster public fqdn feature
10+
611
0.5.15
712
+++++
813
* Update to use 2021-05-01 api-version

src/aks-preview/azext_aks_preview/_help.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,9 @@
261261
- name: --fqdn-subdomain
262262
type: string
263263
short-summary: Prefix for FQDN that is created for private cluster with custom private dns zone scenario.
264+
- name: --enable-public-fqdn
265+
type: bool
266+
short-summary: (Preview) Enable public fqdn feature for private cluster.
264267
- name: --enable-node-public-ip
265268
type: bool
266269
short-summary: Enable VMSS node public IP.
@@ -545,6 +548,12 @@
545548
- name: --enable-local-accounts
546549
type: bool
547550
short-summary: (Preview) If set to true, will enable getting static credential for this cluster.
551+
- name: --enable-public-fqdn
552+
type: bool
553+
short-summary: (Preview) Enable public fqdn feature for private cluster.
554+
- name: --disable-public-fqdn
555+
type: bool
556+
short-summary: (Preview) Disable public fqdn feature for private cluster.
548557
examples:
549558
- name: Enable cluster-autoscaler within node count range [1,5]
550559
text: az aks update --enable-cluster-autoscaler --min-count 1 --max-count 5 -g MyResourceGroup -n MyManagedCluster
@@ -1108,6 +1117,9 @@
11081117
- name: --output -o
11091118
type: string
11101119
long-summary: Credentials are always in YAML format, so this argument is effectively ignored.
1120+
- name: --public-fqdn
1121+
type: bool
1122+
short-summary: (Preview) Get private cluster credential with server address to be public fqdn.
11111123
examples:
11121124
- name: Get access credentials for a managed Kubernetes cluster. (autogenerated)
11131125
text: az aks get-credentials --name MyManagedCluster --resource-group MyResourceGroup

src/aks-preview/azext_aks_preview/_params.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ def load_arguments(self, _):
113113
c.argument('enable_private_cluster', action='store_true')
114114
c.argument('private_dns_zone')
115115
c.argument('fqdn_subdomain')
116+
c.argument('enable_public_fqdn', action='store_true', is_preview=True)
116117
c.argument('enable_managed_identity', action='store_true')
117118
c.argument('assign_identity', type=str, validator=validate_assign_identity)
118119
c.argument('enable_sgxquotehelper', action='store_true')
@@ -150,6 +151,8 @@ def load_arguments(self, _):
150151
c.argument('api_server_authorized_ip_ranges', type=str, validator=validate_ip_ranges)
151152
c.argument('enable_pod_security_policy', action='store_true')
152153
c.argument('disable_pod_security_policy', action='store_true')
154+
c.argument('enable_public_fqdn', action='store_true', is_preview=True)
155+
c.argument('disable_public_fqdn', action='store_true', is_preview=True)
153156
c.argument('attach_acr', acr_arg_type, validator=validate_acr)
154157
c.argument('detach_acr', acr_arg_type, validator=validate_acr)
155158
c.argument('aks_custom_headers')
@@ -264,6 +267,7 @@ def load_arguments(self, _):
264267
c.argument('user', options_list=['--user', '-u'], default='clusterUser', validator=validate_user)
265268
c.argument('path', options_list=['--file', '-f'], type=file_type, completer=FilesCompleter(),
266269
default=os.path.join(os.path.expanduser('~'), '.kube', 'config'))
270+
c.argument('public_fqdn', default=False, action='store_true', is_preview=True)
267271

268272
with self.argument_context('aks pod-identity') as c:
269273
c.argument('cluster_name', type=str, help='The cluster name.')

src/aks-preview/azext_aks_preview/custom.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import colorama # pylint: disable=import-error
4444
from tabulate import tabulate # pylint: disable=import-error
4545
from azure.cli.core.api import get_config_dir
46+
from azure.cli.core.azclierror import ManualInterrupt, InvalidArgumentValueError, UnclassifiedUserFault, CLIInternalError, FileOperationError, ClientRequestError, DeploymentError, ValidationError, ArgumentUsageError, MutuallyExclusiveArgumentError, RequiredArgumentMissingError, ResourceNotFoundError
4647
from azure.cli.core.commands.client_factory import get_mgmt_service_client, get_subscription_id
4748
from azure.cli.core.keys import is_valid_ssh_rsa_public_key
4849
from azure.cli.core.util import get_file_json, in_cloud_console, shell_safe_json_parse, truncate_text, sdk_no_wait
@@ -1010,6 +1011,7 @@ def aks_create(cmd, # pylint: disable=too-many-locals,too-many-statements,to
10101011
private_dns_zone=None,
10111012
enable_managed_identity=True,
10121013
fqdn_subdomain=None,
1014+
enable_public_fqdn=False,
10131015
api_server_authorized_ip_ranges=None,
10141016
aks_custom_headers=None,
10151017
appgw_name=None,
@@ -1398,30 +1400,33 @@ def aks_create(cmd, # pylint: disable=too-many-locals,too-many-statements,to
13981400
mc.node_resource_group = node_resource_group
13991401

14001402
use_custom_private_dns_zone = False
1403+
if not enable_private_cluster and enable_public_fqdn:
1404+
raise ArgumentUsageError("--enable-public-fqdn should only be used with --enable-private-cluster")
14011405
if enable_private_cluster:
14021406
if load_balancer_sku.lower() != "standard":
1403-
raise CLIError(
1407+
raise ArgumentUsageError(
14041408
"Please use standard load balancer for private cluster")
14051409
mc.api_server_access_profile = ManagedClusterAPIServerAccessProfile(
14061410
enable_private_cluster=True
14071411
)
1412+
if enable_public_fqdn:
1413+
mc.api_server_access_profile.enable_private_cluster_public_fqdn = True
14081414

14091415
if private_dns_zone:
14101416
if not enable_private_cluster:
1411-
raise CLIError(
1417+
raise ArgumentUsageError(
14121418
"Invalid private dns zone for public cluster. It should always be empty for public cluster")
14131419
mc.api_server_access_profile.private_dns_zone = private_dns_zone
14141420
from msrestazure.tools import is_valid_resource_id
14151421
if private_dns_zone.lower() != CONST_PRIVATE_DNS_ZONE_SYSTEM and private_dns_zone.lower() != CONST_PRIVATE_DNS_ZONE_NONE:
14161422
if is_valid_resource_id(private_dns_zone):
14171423
use_custom_private_dns_zone = True
14181424
else:
1419-
raise CLIError(private_dns_zone +
1420-
" is not a valid Azure resource ID.")
1425+
raise ResourceNotFoundError(private_dns_zone + " is not a valid Azure resource ID.")
14211426

14221427
if fqdn_subdomain:
14231428
if not use_custom_private_dns_zone:
1424-
raise CLIError(
1429+
raise ArgumentUsageError(
14251430
"--fqdn-subdomain should only be used for private cluster with custom private dns zone")
14261431
mc.fqdn_subdomain = fqdn_subdomain
14271432

@@ -1501,6 +1506,8 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches,
15011506
disable_secret_rotation=False,
15021507
disable_local_accounts=False,
15031508
enable_local_accounts=False,
1509+
enable_public_fqdn=False,
1510+
disable_public_fqdn=False,
15041511
yes=False,
15051512
tags=None,
15061513
windows_admin_password=None,
@@ -1540,7 +1547,9 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches,
15401547
not tags and \
15411548
not windows_admin_password and \
15421549
not enable_local_accounts and \
1543-
not disable_local_accounts:
1550+
not disable_local_accounts and \
1551+
not enable_public_fqdn and \
1552+
not disable_public_fqdn:
15441553
raise CLIError('Please specify "--enable-cluster-autoscaler" or '
15451554
'"--disable-cluster-autoscaler" or '
15461555
'"--update-cluster-autoscaler" or '
@@ -1571,7 +1580,9 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches,
15711580
'"--enable-azure-rbac" or '
15721581
'"--disable-azure-rbac" or '
15731582
'"--enable-local-accounts" or '
1574-
'"--disable-local-accounts"')
1583+
'"--disable-local-accounts" or '
1584+
'"--enable-public-fqdn" or '
1585+
'"--disable-public-fqdn"')
15751586
instance = client.get(resource_group_name, name)
15761587

15771588
if update_autoscaler and len(instance.agent_pool_profiles) > 1:
@@ -1740,6 +1751,21 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches,
17401751
if disable_ahub:
17411752
instance.windows_profile.license_type = 'None'
17421753

1754+
if enable_public_fqdn and disable_public_fqdn:
1755+
raise MutuallyExclusiveArgumentError(
1756+
'Cannot specify "--enable-public-fqdn" and "--disable-public-fqdn" at the same time')
1757+
is_private_cluster = instance.api_server_access_profile is not None and instance.api_server_access_profile.enable_private_cluster
1758+
if enable_public_fqdn:
1759+
if not is_private_cluster:
1760+
raise ArgumentUsageError('--enable-public-fqdn can only be used for private cluster')
1761+
instance.api_server_access_profile.enable_private_cluster_public_fqdn = True
1762+
if disable_public_fqdn:
1763+
if not is_private_cluster:
1764+
raise ArgumentUsageError('--disable-public-fqdn can only be used for private cluster')
1765+
if instance.api_server_access_profile.private_dns_zone.lower() == CONST_PRIVATE_DNS_ZONE_NONE:
1766+
raise ArgumentUsageError('--disable-public-fqdn cannot be applied for none mode private dns zone cluster')
1767+
instance.api_server_access_profile.enable_private_cluster_public_fqdn = False
1768+
17431769
if instance.auto_upgrade_profile is None:
17441770
instance.auto_upgrade_profile = ManagedClusterAutoUpgradeProfile()
17451771

@@ -1891,18 +1917,22 @@ def aks_get_credentials(cmd, # pylint: disable=unused-argument
18911917
path=os.path.join(os.path.expanduser(
18921918
'~'), '.kube', 'config'),
18931919
overwrite_existing=False,
1894-
context_name=None):
1920+
context_name=None,
1921+
public_fqdn=False):
18951922
credentialResults = None
1923+
serverType = None
1924+
if public_fqdn:
1925+
serverType = 'public'
18961926
if admin:
18971927
credentialResults = client.list_cluster_admin_credentials(
1898-
resource_group_name, name)
1928+
resource_group_name, name, serverType)
18991929
else:
19001930
if user.lower() == 'clusteruser':
19011931
credentialResults = client.list_cluster_user_credentials(
1902-
resource_group_name, name)
1932+
resource_group_name, name, serverType)
19031933
elif user.lower() == 'clustermonitoringuser':
19041934
credentialResults = client.list_cluster_monitoring_user_credentials(
1905-
resource_group_name, name)
1935+
resource_group_name, name, serverType)
19061936
else:
19071937
raise CLIError("The user is invalid.")
19081938
if not credentialResults:

0 commit comments

Comments
 (0)