From 5dea29b9d5054e0da784bc5a65991592c07cda99 Mon Sep 17 00:00:00 2001 From: Bryce Soghigian <49734722+Bryce-Soghigian@users.noreply.github.com> Date: Tue, 18 Feb 2025 21:34:18 +0000 Subject: [PATCH] feat: supporting cilium + nodesubnet case --- .../imagefamily/bootstrap/aksbootstrap.go | 5 +---- pkg/providers/imagefamily/ubuntu_2204.go | 1 - pkg/providers/instancetype/suite_test.go | 4 ++++ pkg/providers/launchtemplate/launchtemplate.go | 15 +++++++++++++-- pkg/providers/launchtemplate/parameters/types.go | 1 - 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/pkg/providers/imagefamily/bootstrap/aksbootstrap.go b/pkg/providers/imagefamily/bootstrap/aksbootstrap.go index d7683f1b8..ccca2ff4b 100644 --- a/pkg/providers/imagefamily/bootstrap/aksbootstrap.go +++ b/pkg/providers/imagefamily/bootstrap/aksbootstrap.go @@ -24,7 +24,6 @@ import ( "strings" "text/template" - "github.com/Azure/karpenter-provider-azure/pkg/consts" "github.com/Azure/karpenter-provider-azure/pkg/utils" "github.com/blang/semver/v4" "github.com/samber/lo" @@ -47,7 +46,6 @@ type AKS struct { APIServerName string KubeletClientTLSBootstrapToken string NetworkPlugin string - NetworkPluginMode string NetworkPolicy string KubernetesVersion string } @@ -455,8 +453,7 @@ func (a AKS) applyOptions(nbv *NodeBootstrapVariables) { nbv.ResourceGroup = a.ResourceGroup nbv.UserAssignedIdentityID = a.KubeletIdentityClientID - // In some cases we don't need the node to do anything with CNI so tell it NetworkPlugin is 'none' - nbv.NetworkPlugin = lo.Ternary(a.NetworkPluginMode == consts.NetworkPluginModeOverlay, consts.NetworkPluginNone, a.NetworkPlugin) + nbv.NetworkPlugin = a.NetworkPlugin nbv.NetworkPolicy = a.NetworkPolicy nbv.KubernetesVersion = a.KubernetesVersion diff --git a/pkg/providers/imagefamily/ubuntu_2204.go b/pkg/providers/imagefamily/ubuntu_2204.go index e05eb0b96..df034db8a 100644 --- a/pkg/providers/imagefamily/ubuntu_2204.go +++ b/pkg/providers/imagefamily/ubuntu_2204.go @@ -108,7 +108,6 @@ func (u Ubuntu2204) ScriptlessCustomData(kubeletConfig *bootstrap.KubeletConfigu APIServerName: u.Options.APIServerName, KubeletClientTLSBootstrapToken: u.Options.KubeletClientTLSBootstrapToken, NetworkPlugin: u.Options.NetworkPlugin, - NetworkPluginMode: u.Options.NetworkPluginMode, NetworkPolicy: u.Options.NetworkPolicy, KubernetesVersion: u.Options.KubernetesVersion, } diff --git a/pkg/providers/instancetype/suite_test.go b/pkg/providers/instancetype/suite_test.go index 11530a3e6..55ded8ead 100644 --- a/pkg/providers/instancetype/suite_test.go +++ b/pkg/providers/instancetype/suite_test.go @@ -1268,6 +1268,10 @@ var _ = Describe("InstanceType Provider", func() { "kubernetes.azure.com/podnetwork-type=overlay", "kubernetes.azure.com/ebpf-dataplane=cilium", )), + Entry("Cilium w feature flag Microsoft.ContainerService/EnableCiliumNodeSubnet", + "azure", "", "cilium", + "none", + sets.New("kubernetes.azure.com/ebpf-dataplane=cilium")), ) Context("LoadBalancer", func() { diff --git a/pkg/providers/launchtemplate/launchtemplate.go b/pkg/providers/launchtemplate/launchtemplate.go index 1ccc79d0e..10e0a416b 100644 --- a/pkg/providers/launchtemplate/launchtemplate.go +++ b/pkg/providers/launchtemplate/launchtemplate.go @@ -164,17 +164,28 @@ func (p *Provider) getStaticParameters(ctx context.Context, instanceType *cloudp ClusterID: options.FromContext(ctx).ClusterID, APIServerName: options.FromContext(ctx).GetAPIServerName(), KubeletClientTLSBootstrapToken: options.FromContext(ctx).KubeletClientTLSBootstrapToken, - NetworkPlugin: options.FromContext(ctx).NetworkPlugin, + NetworkPlugin: getAgentbakerNetworkPlugin(ctx), NetworkPolicy: options.FromContext(ctx).NetworkPolicy, - NetworkPluginMode: options.FromContext(ctx).NetworkPluginMode, SubnetID: subnetID, ClusterResourceGroup: p.clusterResourceGroup, }, nil } +func getAgentbakerNetworkPlugin(ctx context.Context) string { + if isAzureCNIOverlay(ctx) || isCiliumNodeSubnet(ctx) { + return consts.NetworkPluginNone + } + return consts.NetworkPluginAzure +} + +func isCiliumNodeSubnet(ctx context.Context) bool { + return options.FromContext(ctx).NetworkPlugin == consts.NetworkPluginAzure && options.FromContext(ctx).NetworkPluginMode == consts.NetworkPluginModeNone && options.FromContext(ctx).NetworkDataplane == consts.NetworkDataplaneCilium +} + func isAzureCNIOverlay(ctx context.Context) bool { return options.FromContext(ctx).NetworkPlugin == consts.NetworkPluginAzure && options.FromContext(ctx).NetworkPluginMode == consts.NetworkPluginModeOverlay } + func (p *Provider) createLaunchTemplate(ctx context.Context, params *parameters.Parameters) (*Template, error) { // merge and convert to ARM tags azureTags := mergeTags(params.Tags, map[string]string{karpenterManagedTagKey: params.ClusterName}) diff --git a/pkg/providers/launchtemplate/parameters/types.go b/pkg/providers/launchtemplate/parameters/types.go index 3667f7fea..743e54be7 100644 --- a/pkg/providers/launchtemplate/parameters/types.go +++ b/pkg/providers/launchtemplate/parameters/types.go @@ -40,7 +40,6 @@ type StaticParameters struct { APIServerName string KubeletClientTLSBootstrapToken string NetworkPlugin string - NetworkPluginMode string NetworkPolicy string KubernetesVersion string SubnetID string