Skip to content

Commit dc233f2

Browse files
supershaldkoshkin
andauthored
feat: cilium configuration overrides for EKS provider (#1316)
**What problem does this PR solve?**: - Stacked on #1307 to reuse some functions and reduce merge conflicts. - Sets Cilium default configuration for EKS to enable `eni` mode. **Which issue(s) this PR fixes**: Fixes # **How Has This Been Tested?**: <!-- Please describe the tests that you ran to verify your changes. Provide output from the tests and any manual steps needed to replicate the tests. --> - unit test for cilium template rendering Tested manually for now. - sample EKS cluster manifest ``` apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: annotations: preflight.cluster.caren.nutanix.com/skip: all labels: cluster.x-k8s.io/provider: eks name: shalin-eks spec: topology: class: eks-quick-start controlPlane: metadata: annotations: controlplane.cluster.x-k8s.io/skip-kube-proxy: "" variables: - name: clusterConfig value: addons: clusterAutoscaler: {} cni: provider: Cilium csi: defaultStorage: provider: aws-ebs storageClassConfig: default providers: aws-ebs: storageClassConfigs: default: {} snapshotController: {} nfd: {} eks: region: us-west-2 version: v1.32.9 workers: machineDeployments: - class: default-worker metadata: annotations: cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-size: "2" cluster.x-k8s.io/cluster-api-autoscaler-node-group-min-size: "2" name: md-0 variables: overrides: - name: workerConfig value: eks: instanceType: m5.2xlarge ``` - Cilium HCP ``` apiVersion: addons.cluster.x-k8s.io/v1alpha1 kind: HelmChartProxy ...<redacted> ... valuesTemplate: |- cni: chainingMode: portmap exclusive: false hubble: enabled: true tls: auto: enabled: true # enable automatic TLS certificate generation method: cronJob # auto generate certificates using cronJob method certValidityDuration: 60 # certificates validity duration in days (default 2 months) schedule: "0 0 1 * *" # schedule on the 1st day regeneration of each month relay: enabled: true tls: server: enabled: true mtls: true image: useDigest: false priorityClassName: system-cluster-critical ipam: mode: eni image: useDigest: false operator: image: useDigest: false certgen: image: useDigest: false socketLB: hostNamespaceOnly: true envoy: image: useDigest: false kubeProxyReplacement: true k8sServiceHost: "A535486E46D73CBF3C959CAE8F6831A4.gr7.us-west-2.eks.amazonaws.com" k8sServicePort: "443" enableIPv4Masquerade: false eni: enabled: true awsReleaseExcessIPs: true routingMode: native endpointRoutes: enabled: true version: 1.17.4 ......<redacted> ... matchingClusters: - apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster name: shalin-eks namespace: default observedGeneration: 3 ``` - CNI and all pods running on the cluster ``` ❯ kubectl get pods -A --kubeconfig shalin-eks.conf NAMESPACE NAME READY STATUS RESTARTS AGE default cluster-autoscaler-01997478-76f0-799f-b9ed-ddbff8eab94f-5ffdxsm 0/1 ContainerCreating 0 154m kube-system cilium-envoy-2cxcb 1/1 Running 0 108m kube-system cilium-envoy-nfp4b 1/1 Running 0 92m kube-system cilium-operator-84796b9ccf-h4lgf 1/1 Running 0 108m kube-system cilium-operator-84796b9ccf-v5hq4 1/1 Running 0 96m kube-system cilium-t4grn 1/1 Running 0 92m kube-system cilium-zf2zm 1/1 Running 0 108m kube-system coredns-5449774944-4hjxt 1/1 Running 0 155m kube-system coredns-5449774944-78897 1/1 Running 0 155m kube-system ebs-csi-controller-cb84bcd9-7qtqz 6/6 Running 0 154m kube-system ebs-csi-controller-cb84bcd9-dn6fg 6/6 Running 0 154m kube-system ebs-csi-node-m57pl 3/3 Running 0 153m kube-system ebs-csi-node-nnpcn 3/3 Running 0 92m kube-system hubble-relay-6b586bc6d-wd7c7 1/1 Running 0 108m kube-system snapshot-controller-6b6bf6cb95-xrm8q 1/1 Running 0 154m node-feature-discovery node-feature-discovery-gc-6489bd687c-k2psp 1/1 Running 0 154m node-feature-discovery node-feature-discovery-master-6fc5c44fb9-2bddp 1/1 Running 0 154m node-feature-discovery node-feature-discovery-worker-tdv67 1/1 Running 0 92m node-feature-discovery node-feature-discovery-worker-wwr2x 1/1 Running 0 153m ``` - `cilium-config` configmap on EKS cluster updated to reflect eni ipam. **Special notes for your reviewer**: <!-- Use this to provide any additional information to the reviewers. This may include: - Best way to review the PR. - Where the author wants the most review attention on. - etc. --> --------- Co-authored-by: Dimitri Koshkin <[email protected]>
1 parent c6e77ab commit dc233f2

File tree

10 files changed

+231
-138
lines changed

10 files changed

+231
-138
lines changed

charts/cluster-api-runtime-extensions-nutanix/addons/cni/cilium/values-template.yaml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,13 @@ hubble:
1818
image:
1919
useDigest: false
2020
priorityClassName: system-cluster-critical
21+
{{- if eq .Provider "eks" }}
22+
ipam:
23+
mode: eni
24+
{{- else }}
2125
ipam:
2226
mode: kubernetes
27+
{{- end }}
2328
image:
2429
useDigest: false
2530
operator:
@@ -33,7 +38,17 @@ socketLB:
3338
envoy:
3439
image:
3540
useDigest: false
36-
k8sServiceHost: auto
41+
k8sServiceHost: "{{ trimPrefix .ControlPlaneEndpoint.Host "https://" }}"
42+
k8sServicePort: "{{ .ControlPlaneEndpoint.Port }}"
3743
{{- if .EnableKubeProxyReplacement }}
3844
kubeProxyReplacement: true
3945
{{- end }}
46+
{{- if eq .Provider "eks" }}
47+
enableIPv4Masquerade: false
48+
eni:
49+
enabled: true
50+
awsReleaseExcessIPs: true
51+
routingMode: native
52+
endpointRoutes:
53+
enabled: true
54+
{{- end }}

examples/capi-quick-start/eks-cluster.yaml

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,3 @@
1-
apiVersion: v1
2-
data:
3-
values.yaml: |-
4-
cni:
5-
exclusive: false
6-
hubble:
7-
enabled: true
8-
tls:
9-
auto:
10-
enabled: true # enable automatic TLS certificate generation
11-
method: cronJob # auto generate certificates using cronJob method
12-
certValidityDuration: 60 # certificates validity duration in days (default 2 months)
13-
schedule: "0 0 1 * *" # schedule on the 1st day regeneration of each month
14-
relay:
15-
enabled: true
16-
tls:
17-
server:
18-
enabled: true
19-
mtls: true
20-
image:
21-
useDigest: false
22-
priorityClassName: system-cluster-critical
23-
image:
24-
useDigest: false
25-
operator:
26-
image:
27-
useDigest: false
28-
certgen:
29-
image:
30-
useDigest: false
31-
socketLB:
32-
hostNamespaceOnly: true
33-
envoy:
34-
image:
35-
useDigest: false
36-
kubeProxyReplacement: true
37-
k8sServiceHost: "{{ trimPrefix "https://" .Cluster.spec.controlPlaneEndpoint.host }}"
38-
k8sServicePort: "{{ .Cluster.spec.controlPlaneEndpoint.port }}"
39-
ipam:
40-
mode: eni
41-
enableIPv4Masquerade: false
42-
eni:
43-
enabled: true
44-
awsReleaseExcessIPs: true
45-
routingMode: native
46-
endpointRoutes:
47-
enabled: true
48-
kind: ConfigMap
49-
metadata:
50-
labels:
51-
cluster.x-k8s.io/provider: eks
52-
name: ${CLUSTER_NAME}-cilium-cni-helm-values-template
53-
---
541
apiVersion: cluster.x-k8s.io/v1beta1
552
kind: Cluster
563
metadata:
@@ -70,10 +17,6 @@ spec:
7017
clusterAutoscaler: {}
7118
cni:
7219
provider: Cilium
73-
values:
74-
sourceRef:
75-
kind: ConfigMap
76-
name: ${CLUSTER_NAME}-cilium-cni-helm-values-template
7720
csi:
7821
defaultStorage:
7922
provider: aws-ebs

hack/addons/update-cilium-manifests.sh

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ envsubst -no-unset <"${KUSTOMIZE_BASE_DIR}/kustomization.yaml.tmpl" >"${ASSETS_D
2525

2626
cat <<EOF >"${ASSETS_DIR}/gomplate-context.yaml"
2727
EnableKubeProxyReplacement: false
28+
Provider: tmpl-capiprovider-tmpl
29+
ControlPlaneEndpoint:
30+
Host: tmpl-controlplaneendpointhost-tmpl
31+
Port: 6443
2832
EOF
29-
gomplate -f "${GIT_REPO_ROOT}/charts/cluster-api-runtime-extensions-nutanix/addons/cni/cilium/values-template.yaml" \
30-
--context .="${ASSETS_DIR}/gomplate-context.yaml" \
31-
>"${ASSETS_DIR}/helm-values.yaml"
33+
# Replace trimPrefix with strings.TrimPrefix to use the in built go function in gomplate.
34+
sed -e 's/trimPrefix/strings.TrimPrefix/g' \
35+
-e '/k8sServiceHost:.*/,/k8sServicePort:/c\
36+
k8sServiceHost: auto' \
37+
"${GIT_REPO_ROOT}/charts/cluster-api-runtime-extensions-nutanix/addons/cni/cilium/values-template.yaml" |
38+
gomplate --context .="${ASSETS_DIR}/gomplate-context.yaml" \
39+
>"${ASSETS_DIR}/helm-values.yaml"
3240

3341
kustomize build \
3442
--load-restrictor LoadRestrictionsNone \

hack/examples/additional-resources/eks/cilium-configmap.yaml

Lines changed: 0 additions & 55 deletions
This file was deleted.

hack/examples/overlays/clusters/eks/kustomization.yaml.tmpl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,12 @@ apiVersion: kustomize.config.k8s.io/v1beta1
55
kind: Kustomization
66

77
resources:
8-
- ../../../additional-resources/eks/cilium-configmap.yaml
98
- ../../../bases/eks/cluster
109

1110
sortOptions:
1211
order: fifo
1312

1413
patches:
15-
# TODO: Replace with generic cilium patch and dynamically generate the correct EKS values
16-
- target:
17-
kind: Cluster
18-
path: ../../../patches/eks/cilium-with-custom-values.yaml
1914
- target:
2015
kind: Cluster
2116
path: ../../../patches/skip-kube-proxy.yaml

hack/examples/patches/eks/cilium-with-custom-values.yaml

Lines changed: 0 additions & 11 deletions
This file was deleted.

hack/examples/patches/eks/initialize-variables.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,3 @@
1111
nfd: {}
1212
cni:
1313
provider: Cilium
14-
values:
15-
sourceRef:
16-
name: ${CLUSTER_NAME}-cilium-cni-helm-values-template
17-
kind: ConfigMap

hack/tools/fetch-images/main.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,24 @@ func getValuesFileForChartIfNeeded(chartName, carenChartDirectory string) (strin
266266
}
267267

268268
type input struct {
269+
Provider string
270+
ControlPlaneEndpoint clusterv1.APIEndpoint
269271
EnableKubeProxyReplacement bool
270272
}
271273
templateInput := input{
274+
Provider: "test",
275+
ControlPlaneEndpoint: clusterv1.APIEndpoint{
276+
Host: "https://test.dummy.com",
277+
Port: 443,
278+
},
272279
EnableKubeProxyReplacement: true,
273280
}
274281

275-
err = template.Must(template.New(defaultHelmAddonFilename).ParseFiles(f)).Execute(tempFile, &templateInput)
282+
funcMap := template.FuncMap{
283+
"trimPrefix": strings.TrimPrefix,
284+
}
285+
err = template.Must(
286+
template.New(defaultHelmAddonFilename).Funcs(funcMap).ParseFiles(f)).Execute(tempFile, &templateInput)
276287
if err != nil {
277288
return "", fmt.Errorf("failed to execute helm values template %w", err)
278289
}

pkg/handlers/generic/lifecycle/cni/cilium/template.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ package cilium
66
import (
77
"bytes"
88
"fmt"
9+
"strings"
910
"text/template"
1011

1112
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
1213

1314
apivariables "github.com/nutanix-cloud-native/cluster-api-runtime-extensions-nutanix/api/variables"
15+
capiutils "github.com/nutanix-cloud-native/cluster-api-runtime-extensions-nutanix/common/pkg/capi/utils"
1416
)
1517

1618
// templateValues enables kube-proxy replacement when kube-proxy is disabled.
@@ -20,18 +22,25 @@ func templateValues(cluster *clusterv1.Cluster, text string) (string, error) {
2022
return "", fmt.Errorf("failed to check if kube-proxy is disabled: %w", err)
2123
}
2224

23-
ciliumTemplate, err := template.New("").Parse(text)
25+
funcMap := template.FuncMap{
26+
"trimPrefix": strings.TrimPrefix,
27+
}
28+
ciliumTemplate, err := template.New("").Funcs(funcMap).Parse(text)
2429
if err != nil {
2530
return "", fmt.Errorf("failed to parse template: %w", err)
2631
}
2732

2833
type input struct {
34+
Provider string
35+
ControlPlaneEndpoint clusterv1.APIEndpoint
2936
EnableKubeProxyReplacement bool
3037
}
3138

3239
// Assume when kube-proxy is disabled, we should enable Cilium's kube-proxy replacement feature.
3340
templateInput := input{
3441
EnableKubeProxyReplacement: kubeProxyIsDisabled,
42+
Provider: capiutils.GetProvider(cluster),
43+
ControlPlaneEndpoint: cluster.Spec.ControlPlaneEndpoint,
3544
}
3645

3746
var b bytes.Buffer

0 commit comments

Comments
 (0)