Last active
February 17, 2023 01:41
-
-
Save jayunit100/d63944b2acda1797e1cc63bd07344283 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| KubeadmControlPlaneTemplate: | |
| jsonPatches: | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes" | |
| value: [] | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/etcd/local/extraArgs": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/etcd/local/extraArgs" | |
| valueFrom: | |
| template: | | |
| {{ $containCipherSuites := false }} | |
| {{- range $key, $val := .etcdExtraArgs }} | |
| {{- if eq $key "cipher-suites" }} | |
| {{- $containCipherSuites = "true" }} | |
| {{- end }} | |
| {{ $key -}} : "{{ $val }}" | |
| {{- end }} | |
| {{- if not $containCipherSuites }} | |
| cipher-suites: "{{ .tlsCipherSuites }}" | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs" | |
| valueFrom: | |
| template: | | |
| {{ $containCipherSuites := false }} | |
| {{ $containCloudProvider := false }} | |
| {{- range $key, $val := .apiServerExtraArgs }} | |
| {{- if eq $key "tls-cipher-suites" }} | |
| {{- $containCipherSuites = "true" }} | |
| {{- end }} | |
| {{- if eq $key "cloud-provider" }} | |
| {{- $containCloudProvider = "true" }} | |
| {{- end }} | |
| {{ $key -}} : "{{ $val }}" | |
| {{- end }} | |
| {{- if not $containCipherSuites }} | |
| tls-cipher-suites: "{{ .tlsCipherSuites }}" | |
| {{- end }} | |
| {{- if not $containCloudProvider }} | |
| cloud-provider: external | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/scheduler/extraArgs": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/scheduler/extraArgs" | |
| valueFrom: | |
| template: | | |
| {{ $containCipherSuites := false }} | |
| {{- range $key, $val := .kubeSchedulerExtraArgs }} | |
| {{- if eq $key "tls-cipher-suites" }} | |
| {{- $containCipherSuites = "true" }} | |
| {{- end }} | |
| {{ $key -}} : "{{ $val }}" | |
| {{- end }} | |
| {{- if not $containCipherSuites }} | |
| tls-cipher-suites: "{{ .tlsCipherSuites }}" | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/controllerManager/extraArgs": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/controllerManager/extraArgs" | |
| valueFrom: | |
| template: | | |
| {{ $containCipherSuites := false }} | |
| {{ $containCloudProvider := false }} | |
| {{- range $key, $val := .kubeControllerManagerExtraArgs }} | |
| {{- if eq $key "tls-cipher-suites" }} | |
| {{- $containCipherSuites = "true" }} | |
| {{- end }} | |
| {{- if eq $key "cloud-provider" }} | |
| {{- $containCloudProvider = "true" }} | |
| {{- end }} | |
| {{ $key -}} : "{{ $val }}" | |
| {{- end }} | |
| {{- if not $containCipherSuites }} | |
| tls-cipher-suites: "{{ .tlsCipherSuites }}" | |
| {{- end }} | |
| {{- if not $containCloudProvider }} | |
| cloud-provider: external | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs" | |
| valueFrom: | |
| template: | | |
| {{ $containCipherSuites := false }} | |
| {{ $containCloudProvider := false }} | |
| {{- range $key, $val := .controlPlaneKubeletExtraArgs }} | |
| {{- if eq $key "tls-cipher-suites" }} | |
| {{- $containCipherSuites = "true" }} | |
| {{- end }} | |
| {{- if eq $key "cloud-provider" }} | |
| {{- $containCloudProvider = "true" }} | |
| {{- end }} | |
| {{ $key -}} : "{{ $val }}" | |
| {{- end }} | |
| {{- if not $containCipherSuites }} | |
| tls-cipher-suites: "{{ .tlsCipherSuites }}" | |
| {{- end }} | |
| {{- if not $containCloudProvider }} | |
| cloud-provider: external | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs" | |
| valueFrom: | |
| template: | | |
| {{ $containCipherSuites := false }} | |
| {{ $containCloudProvider := false }} | |
| {{- range $key, $val := .controlPlaneKubeletExtraArgs }} | |
| {{- if eq $key "tls-cipher-suites" }} | |
| {{- $containCipherSuites = "true" }} | |
| {{- end }} | |
| {{- if eq $key "cloud-provider" }} | |
| {{- $containCloudProvider = "true" }} | |
| {{- end }} | |
| {{ $key -}} : "{{ $val }}" | |
| {{- end }} | |
| {{- if not $containCipherSuites }} | |
| tls-cipher-suites: "{{ .tlsCipherSuites }}" | |
| {{- end }} | |
| {{- if not $containCloudProvider }} | |
| cloud-provider: external | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/users": | |
| - op: replace | |
| path: "/s/t/s/kubeadmConfigSpec/users" | |
| valueFrom: | |
| template: | | |
| - name: capv | |
| sshAuthorizedKeys: | |
| {{- range .user.sshAuthorizedKeys }} | |
| - ' {{- . -}} ' | |
| {{- end }} | |
| sudo: ALL=(ALL) NOPASSWD:ALL | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/imageRepository": | |
| - op: replace | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/imageRepository" | |
| valueFrom: | |
| template: "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/etcd/local/imageRepository": | |
| - op: replace | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/etcd/local/imageRepository" | |
| valueFrom: | |
| template: "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/etcd/local/imageTag": | |
| - op: replace | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/etcd/local/imageTag" | |
| valueFrom: | |
| template: "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.etcd.imageTag}}" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/dns/imageRepository": | |
| - op: replace | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/dns/imageRepository" | |
| valueFrom: | |
| template: "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/dns/imageTag": | |
| - op: replace | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/dns/imageTag" | |
| valueFrom: | |
| template: "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.coredns.imageTag}}" | |
| "/s/t/s/kubeadmConfigSpec/files/-": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| valueFrom: | |
| template: | | |
| owner: root:root | |
| path: /etc/kubernetes/manifests/kube-vip.yaml | |
| content: | | |
| --- | |
| apiVersion: v1 | |
| kind: Pod | |
| metadata: | |
| creationTimestamp: null | |
| name: kube-vip | |
| namespace: kube-system | |
| spec: | |
| containers: | |
| - args: | |
| - manager | |
| env: | |
| - name: cp_enable | |
| value: "true" | |
| - name: svc_enable | |
| value: "{{ .kubeVipLoadBalancerProvider }}" | |
| - name: vip_arp | |
| value: "true" | |
| - name: vip_leaderelection | |
| value: "true" | |
| - name: address | |
| value: {{ .apiServerEndpoint }} | |
| {{- if and (not .aviControlPlaneHAProvider) .apiServerPort }} | |
| - name: port | |
| value: "{{ .apiServerPort }}" | |
| {{- end }} | |
| - name: vip_interface | |
| value: {{ .vipNetworkInterface }} | |
| - name: vip_leaseduration | |
| value: "30" | |
| - name: vip_renewdeadline | |
| value: "20" | |
| - name: vip_retryperiod | |
| value: "4" | |
| image: {{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}/kube-vip:{{(index (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec "kube-vip").imageTag}} | |
| imagePullPolicy: IfNotPresent | |
| name: kube-vip | |
| resources: {} | |
| securityContext: | |
| capabilities: | |
| add: | |
| - NET_ADMIN | |
| - NET_RAW | |
| volumeMounts: | |
| - mountPath: /etc/kubernetes/admin.conf | |
| name: kubeconfig | |
| hostNetwork: "true" | |
| hostAliases: | |
| - hostnames: | |
| - kubernetes | |
| ip: 127.0.0.1 | |
| volumes: | |
| - hostPath: | |
| path: /etc/kubernetes/admin.conf | |
| type: FileOrCreate | |
| name: kubeconfig | |
| status: {} | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| value: | |
| content: '' | |
| owner: root:root | |
| path: "/etc/sysconfig/kubelet" | |
| permissions: '0640' | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| valueFrom: | |
| template: | | |
| content: | | |
| [Service] | |
| Environment="HTTP_PROXY= {{- .proxy.httpProxy -}} " | |
| Environment="HTTPS_PROXY= {{- .proxy.httpsProxy -}} " | |
| Environment="NO_PROXY= {{- list "localhost" "127.0.0.1" ".svc" ".svc.cluster.local" ((list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily) | ternary "::1" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join "," -}} " | |
| owner: root:root | |
| path: /etc/systemd/system/containerd.service.d/http-proxy.conf | |
| permissions: "0640" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| valueFrom: | |
| template: | | |
| content: | | |
| [Service] | |
| Environment="HTTP_PROXY= {{- .proxy.httpProxy -}} " | |
| Environment="HTTPS_PROXY= {{- .proxy.httpsProxy -}} " | |
| Environment="NO_PROXY= {{- list "localhost" "127.0.0.1" ".svc" ".svc.cluster.local" ((list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily) | ternary "::1" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join "," -}} " | |
| owner: root:root | |
| path: /usr/lib/systemd/system/kubelet.service.d/http-proxy.conf | |
| permissions: "0640" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| valueFrom: | |
| template: | | |
| path: /etc/ssl/certs/tkg-custom-ca.pem | |
| {{- $proxy := "" }} | |
| {{- range .trust.additionalTrustedCAs }} | |
| {{- if eq .name "proxy" }} | |
| {{- $proxy = .data }} | |
| {{- end }} | |
| {{- end }} | |
| content: {{ $proxy }} | |
| encoding: base64 | |
| permissions: "0444" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| valueFrom: | |
| template: | | |
| path: /etc/containerd/ {{- index (or .imageRepository.host (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository | splitList "/") 0 -}} .crt | |
| {{- $proxy := "" }} | |
| {{- $image := "" }} | |
| {{- range .trust.additionalTrustedCAs }} | |
| {{- if eq .name "proxy" }} | |
| {{- $proxy = .data }} | |
| {{- end }} | |
| {{- if eq .name "imageRepository" }} | |
| {{- $image = .data }} | |
| {{- end }} | |
| {{- end }} | |
| content: {{or $proxy $image}} | |
| encoding: base64 | |
| permissions: "0444" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| value: | |
| content: | | |
| --- | |
| apiVersion: audit.k8s.io/v1 | |
| kind: Policy | |
| rules: | |
| #! The following requests were manually identified as high-volume and low-risk, | |
| #! so drop them. | |
| - level: None | |
| users: ["system:serviceaccount:kube-system:kube-proxy"] | |
| verbs: ["watch"] | |
| resources: | |
| - group: "" #! core | |
| resources: ["endpoints", "services", "services/status"] | |
| - level: None | |
| userGroups: ["system:nodes"] | |
| verbs: ["get"] | |
| resources: | |
| - group: "" #! core | |
| resources: ["nodes", "nodes/status"] | |
| - level: None | |
| users: | |
| - system:kube-controller-manager | |
| - system:kube-scheduler | |
| - system:serviceaccount:kube-system:endpoint-controller | |
| verbs: ["get", "update"] | |
| namespaces: ["kube-system"] | |
| resources: | |
| - group: "" #! core | |
| resources: ["endpoints"] | |
| - level: None | |
| users: ["system:apiserver"] | |
| verbs: ["get"] | |
| resources: | |
| - group: "" #! core | |
| resources: ["namespaces", "namespaces/status", "namespaces/finalize"] | |
| #! Don't log HPA fetching metrics. | |
| - level: None | |
| users: | |
| - system:kube-controller-manager | |
| verbs: ["get", "list"] | |
| resources: | |
| - group: "metrics.k8s.io" | |
| #! Don't log these read-only URLs. | |
| - level: None | |
| nonResourceURLs: | |
| - /healthz* | |
| - /version | |
| - /swagger* | |
| #! Don't log events requests. | |
| - level: None | |
| resources: | |
| - group: "" #! core | |
| resources: ["events"] | |
| #! Don't log TMC service account performing read operations because they are high-volume. | |
| - level: None | |
| userGroups: ["system:serviceaccounts:vmware-system-tmc"] | |
| verbs: ["get", "list", "watch"] | |
| #! Don't log read requests from garbage collector because they are high-volume. | |
| - level: None | |
| users: ["system:serviceaccount:kube-system:generic-garbage-collector"] | |
| verbs: ["get", "list", "watch"] | |
| #! node and pod status calls from nodes are high-volume and can be large, don't log responses for expected updates from nodes | |
| - level: Request | |
| userGroups: ["system:nodes"] | |
| verbs: ["update","patch"] | |
| resources: | |
| - group: "" #! core | |
| resources: ["nodes/status", "pods/status"] | |
| omitStages: | |
| - "RequestReceived" | |
| #! deletecollection calls can be large, don't log responses for expected namespace deletions | |
| - level: Request | |
| users: ["system:serviceaccount:kube-system:namespace-controller"] | |
| verbs: ["deletecollection"] | |
| omitStages: | |
| - "RequestReceived" | |
| #! Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data, | |
| #! so only log at the Metadata level. | |
| - level: Metadata | |
| resources: | |
| - group: "" #! core | |
| resources: ["secrets", "configmaps"] | |
| - group: authentication.k8s.io | |
| resources: ["tokenreviews"] | |
| omitStages: | |
| - "RequestReceived" | |
| #! Get repsonses can be large; skip them. | |
| - level: Request | |
| verbs: ["get", "list", "watch"] | |
| resources: | |
| - group: "" #! core | |
| - group: "admissionregistration.k8s.io" | |
| - group: "apiextensions.k8s.io" | |
| - group: "apiregistration.k8s.io" | |
| - group: "apps" | |
| - group: "authentication.k8s.io" | |
| - group: "authorization.k8s.io" | |
| - group: "autoscaling" | |
| - group: "batch" | |
| - group: "certificates.k8s.io" | |
| - group: "extensions" | |
| - group: "metrics.k8s.io" | |
| - group: "networking.k8s.io" | |
| - group: "policy" | |
| - group: "rbac.authorization.k8s.io" | |
| - group: "settings.k8s.io" | |
| - group: "storage.k8s.io" | |
| omitStages: | |
| - "RequestReceived" | |
| #! Default level for known APIs | |
| - level: RequestResponse | |
| resources: | |
| - group: "" #! core | |
| - group: "admissionregistration.k8s.io" | |
| - group: "apiextensions.k8s.io" | |
| - group: "apiregistration.k8s.io" | |
| - group: "apps" | |
| - group: "authentication.k8s.io" | |
| - group: "authorization.k8s.io" | |
| - group: "autoscaling" | |
| - group: "batch" | |
| - group: "certificates.k8s.io" | |
| - group: "extensions" | |
| - group: "metrics.k8s.io" | |
| - group: "networking.k8s.io" | |
| - group: "policy" | |
| - group: "rbac.authorization.k8s.io" | |
| - group: "settings.k8s.io" | |
| - group: "storage.k8s.io" | |
| omitStages: | |
| - "RequestReceived" | |
| #! Default level for all other requests. | |
| - level: Metadata | |
| omitStages: | |
| - "RequestReceived" | |
| owner: root:root | |
| path: "/etc/kubernetes/audit-policy.yaml" | |
| permissions: '0600' | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| valueFrom: | |
| template: |- | |
| path: /etc/kubernetes/admission-control-config.yaml | |
| content: |- | |
| apiVersion: apiserver.config.k8s.io/v1 | |
| kind: AdmissionConfiguration | |
| plugins: | |
| {{- if and (not .podSecurityStandard.deactivated) (semverCompare ">= v1.24" .builtin.controlPlane.version) }} | |
| {{ $namespace_exemptions := printf "%q, %q" "kube-system" "tkg-system" -}} | |
| {{ $defaultWarnAudit := "baseline" }} | |
| {{- if .podSecurityStandard.exemptions.namespaces -}} | |
| {{ range $namespace := .podSecurityStandard.exemptions.namespaces -}} | |
| {{ $namespace_exemptions = printf "%s, %q" $namespace_exemptions $namespace -}} | |
| {{- end -}} | |
| {{- end -}} | |
| - name: PodSecurity | |
| configuration: | |
| apiVersion: pod-security.admission.config.k8s.io/v1beta1 | |
| kind: PodSecurityConfiguration | |
| defaults: | |
| enforce: "{{ if .podSecurityStandard.enforce -}} | |
| {{ .podSecurityStandard.enforce }} | |
| {{- end }}" | |
| enforce-version: "{{ .podSecurityStandard.enforceVersion -}}" | |
| audit: "{{ if .podSecurityStandard.audit -}} | |
| {{ .podSecurityStandard.audit }} | |
| {{- else -}} | |
| {{ $defaultWarnAudit }} | |
| {{- end }}" | |
| audit-version: "{{ .podSecurityStandard.auditVersion -}}" | |
| warn: "{{ if .podSecurityStandard.warn -}} | |
| {{ .podSecurityStandard.warn }} | |
| {{- else -}} | |
| {{ $defaultWarnAudit }} | |
| {{- end }}" | |
| warn-version: "{{ .podSecurityStandard.warnVersion -}}" | |
| exemptions: | |
| usernames: [] | |
| runtimeClasses: [] | |
| namespaces: [{{ $namespace_exemptions }}] | |
| {{- end }} | |
| {{- if .eventRateLimitConf }} | |
| - name: EventRateLimit | |
| path: eventConfig.yaml | |
| {{- end }} | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/files/-" | |
| valueFrom: | |
| template: |- | |
| path: /etc/kubernetes/eventConfig.yaml | |
| encoding: base64 | |
| content: {{ .eventRateLimitConf}} | |
| "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: echo "::1 localhost" >> /etc/hosts | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: echo "KUBELET_EXTRA_ARGS=--node-ip=$(ip -6 -json addr show dev eth0 scope | |
| global | jq -r .[0].addr_info[0].local)" >> /etc/sysconfig/kubelet | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: systemctl daemon-reload | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: systemctl stop containerd | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: systemctl start containerd | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'export HTTP_PROXY= {{- .proxy.httpProxy }} | |
| ' | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'export HTTPS_PROXY= {{- .proxy.httpsProxy }} | |
| ' | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'export NO_PROXY= {{- list "localhost" "127.0.0.1" ".svc" ".svc.cluster.local" | |
| ((list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily) | ternary "::1" | |
| nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | |
| | uniq | sortAlpha | join "," }} | |
| ' | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: "! which rehash_ca_certificates.sh 2>/dev/null || rehash_ca_certificates.sh" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: "! which update-ca-certificates 2>/dev/null || (mv /etc/ssl/certs/tkg-custom-ca.pem | |
| /usr/local/share/ca-certificates/tkg-custom-ca.crt && update-ca-certificates)" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: "! which update-ca-trust 2>/dev/null || (update-ca-trust force-enable | |
| && mv /etc/ssl/certs/tkg-custom-ca.pem /etc/pki/ca-trust/source/anchors/tkg-custom-ca.crt | |
| && update-ca-trust extract)" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: systemctl restart containerd | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'sed -i ''s|".*/pause|" {{- or .imageRepository.host (index .TKR_DATA | |
| .builtin.controlPlane.version).kubernetesSpec.imageRepository -}} /pause|'' | |
| /etc/containerd/config.toml | |
| ' | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| valueFrom: | |
| template: | | |
| {{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository | splitList "/") 0 -}} | |
| echo '[plugins."io.containerd.grpc.v1.cri".registry.configs." {{- $host -}} ".tls]' >> /etc/containerd/config.toml | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| valueFrom: | |
| template: | | |
| {{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository | splitList "/") 0 }} | |
| {{- $val := list "ca_file = \"/etc/containerd/" $host ".crt\"" | join "" }} | |
| {{- with .imageRepository }} | |
| {{- if .tlsCertificateValidation | eq false }} | |
| {{- $val = "insecure_skip_verify = "true"" }} | |
| {{- end }} | |
| {{- end -}} | |
| {{- define "echo" -}} | |
| echo ' {{ . -}} ' >> /etc/containerd/config.toml | |
| {{- end }} | |
| {{- template "echo" $val -}} | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/preKubeadmCommands/-" | |
| value: systemctl restart containerd | |
| "/s/t/s/kubeadmConfigSpec/initConfiguration/localAPIEndpoint": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/initConfiguration/localAPIEndpoint" | |
| valueFrom: | |
| template: | | |
| {{ if .builtin.cluster.network.ipFamily | eq "IPv6" | or (.builtin.cluster.network.ipFamily | eq "DualStack" | and (.network.ipv6Primary | default false)) -}} | |
| advertiseAddress: '::/0' | |
| {{- else -}} | |
| advertiseAddress: '0.0.0.0' | |
| {{- end }} | |
| bindPort: {{ .apiServerPort }} | |
| "/s/t/s/kubeadmConfigSpec/joinConfiguration/controlPlane": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/joinConfiguration/controlPlane" | |
| valueFrom: | |
| template: | | |
| localAPIEndpoint: | |
| {{ if .builtin.cluster.network.ipFamily | eq "IPv6" | or (.builtin.cluster.network.ipFamily | eq "DualStack" | and (.network.ipv6Primary | default false)) -}} | |
| advertiseAddress: '::/0' | |
| {{- else -}} | |
| advertiseAddress: '0.0.0.0' | |
| {{- end }} | |
| bindPort: {{ .apiServerPort }} | |
| "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs/node-ip": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs/node-ip" | |
| value: "::" | |
| "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-ip": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-ip" | |
| value: "::" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/advertise-address": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/advertise-address" | |
| valueFrom: | |
| variable: apiServerEndpoint | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/bind-address": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/bind-address" | |
| value: "::" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/controllerManager/extraArgs/bind-address": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/controllerManager/extraArgs/bind-address" | |
| value: "::" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/scheduler/extraArgs/bind-address": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/scheduler/extraArgs/bind-address" | |
| value: "::" | |
| "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs/node-labels": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs/node-labels" | |
| valueFrom: | |
| template: | | |
| {{ $first := "true" }} | |
| {{- range $key, $val := (index .TKR_DATA .builtin.controlPlane.version).labels }} | |
| {{- if regexMatch "^(?:[a-zA-z])(?:[-\\w\\.]*[a-zA-z])$" $val }} | |
| {{- if $first }} | |
| {{- $first = false }} | |
| {{- else -}} | |
| , | |
| {{- end }} | |
| {{- $key -}} = {{- $val }} | |
| {{- end }} | |
| {{- end }} | |
| {{- if .controlPlane.nodeLabels -}} | |
| {{- if (index .TKR_DATA .builtin.controlPlane.version).labels -}} | |
| , | |
| {{- end -}} | |
| {{- $first := "true" }} | |
| {{- range .controlPlane.nodeLabels }} | |
| {{- if $first }} | |
| {{- $first = false }} | |
| {{- else -}} | |
| , | |
| {{- end }} | |
| {{- .key -}} = {{- .value -}} | |
| {{ end }} | |
| {{ end }} | |
| "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-labels": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-labels" | |
| valueFrom: | |
| template: | | |
| {{ $first := "true" }} | |
| {{- range $key, $val := (index .TKR_DATA .builtin.controlPlane.version).labels }} | |
| {{- if regexMatch "^(?:[a-zA-z])(?:[-\\w\\.]*[a-zA-z])$" $val }} | |
| {{- if $first }} | |
| {{- $first = false }} | |
| {{- else -}} | |
| , | |
| {{- end }} | |
| {{- $key -}} = {{- $val }} | |
| {{- end }} | |
| {{- end }} | |
| {{- if .controlPlane.nodeLabels -}} | |
| {{- if (index .TKR_DATA .builtin.controlPlane.version).labels -}} | |
| , | |
| {{- end -}} | |
| {{- $first := "true" }} | |
| {{- range .controlPlane.nodeLabels }} | |
| {{- if $first }} | |
| {{- $first = false }} | |
| {{- else -}} | |
| , | |
| {{- end }} | |
| {{- .key -}} = {{- .value -}} | |
| {{ end }} | |
| {{ end }} | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-path": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-path" | |
| value: "/var/log/kubernetes/audit.log" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-policy-file": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-policy-file" | |
| value: "/etc/kubernetes/audit-policy.yaml" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxage": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxage" | |
| value: '30' | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxbackup": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxbackup" | |
| value: '10' | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxsize": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxsize" | |
| value: '100' | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-" | |
| value: | |
| hostPath: "/etc/kubernetes/audit-policy.yaml" | |
| mountPath: "/etc/kubernetes/audit-policy.yaml" | |
| name: audit-policy | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-" | |
| value: | |
| hostPath: "/var/log/kubernetes" | |
| mountPath: "/var/log/kubernetes" | |
| name: audit-logs | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-" | |
| valueFrom: | |
| template: | | |
| name: admin-control-conf | |
| hostPath: /etc/kubernetes/admission-control-config.yaml | |
| mountPath: /etc/kubernetes/admission-control-config.yaml | |
| readOnly: "true" | |
| pathType: "File" | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-" | |
| valueFrom: | |
| template: | | |
| name: event-conf | |
| hostPath: /etc/kubernetes/eventConfig.yaml | |
| mountPath: /etc/kubernetes/eventConfig.yaml | |
| readOnly: "true" | |
| , pathType: "File" | |
| "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/taints": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/initConfiguration/nodeRegistration/taints" | |
| value: [] | |
| "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/taints": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/joinConfiguration/nodeRegistration/taints" | |
| value: [] | |
| "/s/t/s/rolloutBefore": | |
| - op: add | |
| path: "/s/t/s/rolloutBefore" | |
| valueFrom: | |
| template: 'certificatesExpiryDays: {{ .controlPlaneCertificateRotation.daysBefore | |
| }} | |
| ' | |
| "/s/t/s/kubeadmConfigSpec/ntp": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/ntp" | |
| valueFrom: | |
| template: | | |
| enabled: "true" | |
| servers: | |
| {{- range .ntpServers }} | |
| - {{ . }} | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/certSANs": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/certSANs" | |
| valueFrom: | |
| template: | | |
| {{- range .additionalFQDN }} | |
| - {{ . }} | |
| {{- end }} | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/admission-control-config-file": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/admission-control-config-file" | |
| value: "/etc/kubernetes/admission-control-config.yaml" | |
| "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/enable-admission-plugins": | |
| - op: add | |
| path: "/s/t/s/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/enable-admission-plugins" | |
| valueFrom: | |
| template: | | |
| {{ $containEnableAdmissionPlugin := false }} | |
| {{- $admissionPlugins := "" }} | |
| {{- range $key, $val := .apiServerExtraArgs }} | |
| {{- if eq $key "enable-admission-plugins" }} | |
| {{- $containEnableAdmissionPlugin = "true" }} | |
| {{- $admissionPlugins = $val }} | |
| {{- end }} | |
| {{- end }} | |
| {{- if not $containEnableAdmissionPlugin }} | |
| NodeRestriction,EventRateLimit | |
| {{- else -}} | |
| {{- $admissionPlugins -}},EventRateLimit | |
| {{- end }} | |
| selector: | |
| apiVersion: controlplane.cluster.x-k8s.io/v1beta1 | |
| kind: KubeadmControlPlaneTemplate | |
| matchResources: | |
| controlPlane: 'true' | |
| KubeadmConfigTemplate: | |
| jsonPatches: | |
| "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs": | |
| - op: add | |
| path: "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs" | |
| valueFrom: | |
| template: | | |
| {{ $containCipherSuites := false }} | |
| {{ $containCloudProvider := false }} | |
| {{- range $key, $val := .workerKubeletExtraArgs }} | |
| {{- if eq $key "tls-cipher-suites" }} | |
| {{- $containCipherSuites = "true" }} | |
| {{- end }} | |
| {{- if eq $key "cloud-provider" }} | |
| {{- $containCloudProvider = "true" }} | |
| {{- end }} | |
| {{ $key -}} : "{{ $val }}" | |
| {{- end }} | |
| {{- if not $containCipherSuites }} | |
| tls-cipher-suites: "{{ .tlsCipherSuites }}" | |
| {{- end }} | |
| {{- if not $containCloudProvider }} | |
| cloud-provider: external | |
| {{- end }} | |
| "/s/t/s/users": | |
| - op: replace | |
| path: "/s/t/s/users" | |
| valueFrom: | |
| template: | | |
| - name: capv | |
| sshAuthorizedKeys: | |
| {{- range .user.sshAuthorizedKeys }} | |
| - ' {{- . -}} ' | |
| {{- end }} | |
| sudo: ALL=(ALL) NOPASSWD:ALL | |
| - op: replace | |
| path: "/s/t/s/users" | |
| valueFrom: | |
| template: | | |
| - name: capv | |
| groups: Administrators | |
| sshAuthorizedKeys: | |
| {{- range .user.sshAuthorizedKeys }} | |
| - ' {{- . -}} ' | |
| {{- end }} | |
| sudo: ALL=(ALL) NOPASSWD:ALL | |
| "/s/t/s/preKubeadmCommands/-": | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: echo "::1 localhost" >> /etc/hosts | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: systemctl daemon-reload | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: systemctl restart containerd | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'export HTTP_PROXY= {{- .proxy.httpProxy }} | |
| ' | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'export HTTPS_PROXY= {{- .proxy.httpsProxy }} | |
| ' | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'export NO_PROXY= {{- list "localhost" "127.0.0.1" ".svc" ".svc.cluster.local" | |
| ((list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily) | ternary "::1" | |
| nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | |
| | uniq | sortAlpha | join "," }} | |
| ' | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: "! which rehash_ca_certificates.sh 2>/dev/null || rehash_ca_certificates.sh" | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: "! which update-ca-certificates 2>/dev/null || (mv /etc/ssl/certs/tkg-custom-ca.pem | |
| /usr/local/share/ca-certificates/tkg-custom-ca.crt && update-ca-certificates)" | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: "! which update-ca-trust 2>/dev/null || (update-ca-trust force-enable | |
| && mv /etc/ssl/certs/tkg-custom-ca.pem /etc/pki/ca-trust/source/anchors/tkg-custom-ca.crt | |
| && update-ca-trust extract)" | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: systemctl restart containerd | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| valueFrom: | |
| template: 'sed -i ''s|".*/pause|" {{- or .imageRepository.host (index .TKR_DATA | |
| .builtin.machineDeployment.version).kubernetesSpec.imageRepository -}} /pause|'' | |
| /etc/containerd/config.toml | |
| ' | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| valueFrom: | |
| template: | | |
| {{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.machineDeployment.version).kubernetesSpec.imageRepository | splitList "/") 0 -}} | |
| echo '[plugins."io.containerd.grpc.v1.cri".registry.configs." {{- $host -}} ".tls]' >> /etc/containerd/config.toml | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| valueFrom: | |
| template: | | |
| {{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.machineDeployment.version).kubernetesSpec.imageRepository | splitList "/") 0 }} | |
| {{- $val := list "ca_file = \"/etc/containerd/" $host ".crt\"" | join "" }} | |
| {{- with .imageRepository }} | |
| {{- if .tlsCertificateValidation | eq false }} | |
| {{- $val = "insecure_skip_verify = "true"" }} | |
| {{- end }} | |
| {{- end -}} | |
| {{- define "echo" -}} | |
| echo ' {{ . -}} ' >> /etc/containerd/config.toml | |
| {{- end }} | |
| {{- template "echo" $val -}} | |
| - op: add | |
| path: "/s/t/s/preKubeadmCommands/-" | |
| value: systemctl restart containerd | |
| "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-ip": | |
| - op: add | |
| path: "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-ip" | |
| value: "::" | |
| "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-labels": | |
| - op: add | |
| path: "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-labels" | |
| valueFrom: | |
| template: | | |
| {{ $first := "true" }} | |
| {{- range $key, $val := (index .TKR_DATA .builtin.machineDeployment.version).labels }} | |
| {{- if regexMatch "^(?:[a-zA-z])(?:[-\\w\\.]*[a-zA-z])$" $val }} | |
| {{- if $first }} | |
| {{- $first = false }} | |
| {{- else -}} | |
| , | |
| {{- end }} | |
| {{- $key -}} = {{- $val }} | |
| {{- end }} | |
| {{- end }} | |
| {{- if .nodePoolLabels -}} | |
| , | |
| {{- $first := "true" }} | |
| {{- range .nodePoolLabels }} | |
| {{- if $first }} | |
| {{- $first = false }} | |
| {{- else -}} | |
| , | |
| {{- end }} | |
| {{- .key -}} = {{- .value -}} | |
| {{ end }} | |
| {{ end }} | |
| "/s/t/s/files/-": | |
| - op: add | |
| path: "/s/t/s/files/-" | |
| valueFrom: | |
| template: | | |
| content: | | |
| [Service] | |
| Environment="HTTP_PROXY= {{- .proxy.httpProxy -}} " | |
| Environment="HTTPS_PROXY= {{- .proxy.httpsProxy -}} " | |
| Environment="NO_PROXY= {{- list "localhost" "127.0.0.1" ".svc" ".svc.cluster.local" ((list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily) | ternary "::1" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join "," -}} " | |
| owner: root:root | |
| path: /etc/systemd/system/containerd.service.d/http-proxy.conf | |
| permissions: "0640" | |
| - op: add | |
| path: "/s/t/s/files/-" | |
| valueFrom: | |
| template: | | |
| content: | | |
| [Service] | |
| Environment="HTTP_PROXY= {{- .proxy.httpProxy -}} " | |
| Environment="HTTPS_PROXY= {{- .proxy.httpsProxy -}} " | |
| Environment="NO_PROXY= {{- list "localhost" "127.0.0.1" ".svc" ".svc.cluster.local" ((list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily) | ternary "::1" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join "," -}} " | |
| owner: root:root | |
| path: /usr/lib/systemd/system/kubelet.service.d/http-proxy.conf | |
| permissions: "0640" | |
| - op: add | |
| path: "/s/t/s/files/-" | |
| valueFrom: | |
| template: | | |
| path: /etc/ssl/certs/tkg-custom-ca.pem | |
| {{- $proxy := "" }} | |
| {{- range .trust.additionalTrustedCAs }} | |
| {{- if eq .name "proxy" }} | |
| {{- $proxy = .data }} | |
| {{- end }} | |
| {{- end }} | |
| content: {{ $proxy }} | |
| encoding: base64 | |
| permissions: "0444" | |
| - op: add | |
| path: "/s/t/s/files/-" | |
| valueFrom: | |
| template: | | |
| path: /etc/containerd/{{ index (or .imageRepository.host (index .TKR_DATA .builtin.machineDeployment.version).kubernetesSpec.imageRepository | splitList "/") 0 }}.crt | |
| {{- $proxy := "" }} | |
| {{- $image := "" }} | |
| {{- range .trust.additionalTrustedCAs }} | |
| {{- if eq .name "proxy" }} | |
| {{- $proxy = .data }} | |
| {{- end }} | |
| {{- if eq .name "imageRepository" }} | |
| {{- $image = .data }} | |
| {{- end }} | |
| {{- end }} | |
| content: {{or $proxy $image}} | |
| encoding: base64 | |
| permissions: "0444" | |
| - op: add | |
| path: "/s/t/s/files/-" | |
| value: | |
| content: 'Set-Service -Name "wuauserv" -StartupType Disabled -Status Stopped | |
| ' | |
| path: C:\k\prevent_windows_updates.ps1 | |
| - op: add | |
| path: "/s/t/s/files/-" | |
| value: | |
| content: | | |
| function WaitForSaToken($KubeCfgFile, $ServiceAcctName) { | |
| $SaToken = $null | |
| $LoopCount = 400 | |
| do { | |
| $LoopCount = $LoopCount - 1 | |
| if ($LoopCount -eq 0) { | |
| break | |
| } | |
| sleep 5 | |
| $SaToken=$(kubectl --kubeconfig=$KubeCfgFile get secrets -n kube-system -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='$ServiceAcctName')].data.token}") | |
| } while ($SaToken -eq $null) | |
| return $SaToken | |
| } | |
| # Disable firewall temporarily for SSH and other internal ports access | |
| Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False | |
| $TempFolder = 'C:\programdata\temp' | |
| $AntreaInTempFolder = "$TempFolder\antrea-windows-advanced.zip" | |
| $KubeproxyInTempFolder = "$TempFolder\kube-proxy.exe" | |
| # Create Folders | |
| $folders = @('C:\k\antrea', 'C:\var\log\antrea', 'C:\k\antrea\bin', 'C:\var\log\kube-proxy', 'C:\opt\cni\bin', 'C:\etc\cni\net.d') | |
| foreach ($f in $folders) { | |
| New-Item -ItemType Directory -Force -Path $f | |
| } | |
| # Add Windows Defender Options | |
| $avexceptions = @('C:\program files\containerd\ctr.exe', 'C:\program files\containerd\containerd.exe') | |
| foreach ($e in $avexceptions) { | |
| Add-MpPreference -ExclusionProcess $e | |
| } | |
| # Extract Antrea, Antrea binary should be packed into windows OVA already | |
| $antreaZipFile = 'C:\k\antrea\antrea-windows-advanced.zip' | |
| if (!(Test-Path $antreaZipFile)) { | |
| cp $AntreaInTempFolder $antreaZipFile | |
| } | |
| Expand-Archive -Force -Path $antreaZipFile -DestinationPath C:\k\antrea | |
| cp C:\k\antrea\bin\antrea-cni.exe C:\opt\cni\bin\antrea.exe -Force | |
| cp C:\k\antrea\bin\host-local.exe C:\opt\cni\bin\host-local.exe -Force | |
| cp C:\k\antrea\etc\antrea-cni.conflist C:\etc\cni\net.d\10-antrea.conflist -Force | |
| # Get HostIP and set in kubeadm-flags.env | |
| [Environment]::SetEnvironmentVariable("NODE_NAME", (hostname).ToLower()) | |
| $env:HostIP = ( | |
| Get-NetIPConfiguration | | |
| Where-Object { | |
| $_.IPv4DefaultGateway -ne $null -and $_.NetAdapter.Status -ne "Disconnected" | |
| } | |
| ).IPv4Address.IPAddress | |
| $file = 'C:\var\lib\kubelet\kubeadm-flags.env' | |
| $newstr = "--node-ip=" + $env:HostIP | |
| $raw = Get-Content -Path $file -TotalCount 1 | |
| $raw = $raw -replace ".$" | |
| $new = "$($raw) $($newstr)`"" | |
| Set-Content $file $new | |
| $KubeConfigFile = 'C:\etc\kubernetes\kubelet.conf' | |
| # Wait for antrea-agent token to be ready, the token will be used by Install-AntreaAgent | |
| $AntreaAgentToken = (WaitForSaToken $KubeConfigFile 'antrea-agent') | |
| # Setup Kube-Proxy config file | |
| $KubeProxyToken = (WaitForSaToken $KubeConfigFile 'kube-proxy-windows') | |
| $KubeProxyConfig = 'C:\k\antrea\etc\kube-proxy.conf' | |
| $KubeAPIServer = $(kubectl --kubeconfig=$KubeConfigFile config view -o jsonpath='{.clusters[0].cluster.server}') | |
| $KubeProxyToken = $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($KubeProxyToken))) | |
| kubectl config --kubeconfig=$KubeProxyConfig set-cluster kubernetes --server=$KubeAPIServer --insecure-skip-tls-verify | |
| kubectl config --kubeconfig=$KubeProxyConfig set-credentials kube-proxy-windows --token=$KubeProxyToken | |
| kubectl config --kubeconfig=$KubeProxyConfig set-context kube-proxy-windows@kubernetes --cluster=kubernetes --user=kube-proxy-windows | |
| kubectl config --kubeconfig=$KubeProxyConfig use-context kube-proxy-windows@kubernetes | |
| # kube-proxy.exe should be packed into windows OVA | |
| if (!(Test-Path 'C:\k\kube-proxy.exe')) { | |
| cp $KubeproxyInTempFolder 'C:\k\kube-proxy.exe' | |
| } | |
| # Install antrea-agent & OVS | |
| Import-Module C:\k\antrea\helper.psm1 | |
| & Install-AntreaAgent -KubernetesHome "C:\k" -KubeConfig "C:\etc\kubernetes\kubelet.conf" -AntreaHome "C:\k\antrea" -AntreaVersion "1.7.1" | |
| New-KubeProxyServiceInterface | |
| & C:\k\antrea\Install-OVS.ps1 -ImportCertificate $false -LocalFile C:\k\antrea\ovs-win64.zip | |
| # Setup Services | |
| $nssm = (Get-Command nssm).Source | |
| & $nssm set kubelet start SERVICE_AUTO_START | |
| & $nssm install kube-proxy "C:\k\kube-proxy.exe" "--proxy-mode=userspace --kubeconfig=$KubeProxyConfig --log-dir=C:\var\log\kube-proxy --logtostderr=false --alsologtostderr" | |
| & $nssm install antrea-agent "C:\k\antrea\bin\antrea-agent.exe" "--config=C:\k\antrea\etc\antrea-agent.conf --logtostderr=false --log_dir=C:\var\log\antrea --alsologtostderr --log_file_max_size=100 --log_file_max_num=4" | |
| & $nssm set antrea-agent DependOnService kube-proxy ovs-vswitchd | |
| & $nssm set antrea-agent Start SERVICE_AUTO_START | |
| # Start Services | |
| start-service kubelet | |
| start-service kube-proxy | |
| start-service antrea-agent | |
| path: C:\Temp\antrea.ps1 | |
| "/s/t/s/useExperimentalRetryJoin": | |
| - op: remove | |
| path: "/s/t/s/useExperimentalRetryJoin" | |
| "/s/t/s/joinConfiguration/nodeRegistration/criSocket": | |
| - op: add | |
| path: "/s/t/s/joinConfiguration/nodeRegistration/criSocket" | |
| value: npipe:////./pipe/containerd-containerd | |
| "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/tls-cipher-suites": | |
| - op: remove | |
| path: "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/tls-cipher-suites" | |
| "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/register-with-taints": | |
| - op: add | |
| path: "/s/t/s/joinConfiguration/nodeRegistration/kubeletExtraArgs/register-with-taints" | |
| value: os=windows:NoSchedule | |
| "/s/t/s/joinConfiguration/nodeRegistration/name": | |
| - op: replace | |
| path: "/s/t/s/joinConfiguration/nodeRegistration/name" | |
| value: "{{ ds.meta_data.hostname }}" | |
| "/s/t/s/preKubeadmCommands": | |
| - op: replace | |
| path: "/s/t/s/preKubeadmCommands" | |
| valueFrom: | |
| template: | | |
| - echo | set /p="::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6" > C:\etc\hosts & echo. >> C:\etc\hosts | |
| - echo | set /p="127.0.0.1 {{" {{ ds.meta_data.hostname }} "}} localhost localhost.localdomain localhost4 localhost4.localdomain4" >> C:\etc\hosts | |
| "/s/t/s/postKubeadmCommands/-": | |
| - op: add | |
| path: "/s/t/s/postKubeadmCommands/-" | |
| value: powershell c:/k/prevent_windows_updates.ps1 -ExecutionPolicy Bypass | |
| - op: add | |
| path: "/s/t/s/postKubeadmCommands/-" | |
| value: powershell C:/Temp/antrea.ps1 -ExecutionPolicy Bypass | |
| "/s/t/s/ntp": | |
| - op: add | |
| path: "/s/t/s/ntp" | |
| valueFrom: | |
| template: | | |
| enabled: "true" | |
| servers: | |
| {{- range .ntpServers }} | |
| - {{ . }} | |
| {{- end }} | |
| selector: | |
| apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 | |
| kind: KubeadmConfigTemplate | |
| matchResources: | |
| machineDeploymentClass: | |
| names: | |
| - tkg-worker | |
| VSphereClusterTemplate: | |
| jsonPatches: | |
| "/s/t/s/controlPlaneEndpoint": | |
| - op: add | |
| path: "/s/t/s/controlPlaneEndpoint" | |
| valueFrom: | |
| template: | | |
| host: '{{ .apiServerEndpoint }}' | |
| port: 6443 | |
| "/s/t/s/thumbprint": | |
| - op: replace | |
| path: "/s/t/s/thumbprint" | |
| valueFrom: | |
| variable: vcenter.tlsThumbprint | |
| "/s/t/s/server": | |
| - op: replace | |
| path: "/s/t/s/server" | |
| valueFrom: | |
| variable: vcenter.server | |
| "/s/t/s/identityRef": | |
| - op: add | |
| path: "/s/t/s/identityRef" | |
| valueFrom: | |
| template: | | |
| {{ if .identityRef -}} | |
| kind: {{ .identityRef.kind }} | |
| name: {{ .identityRef.name }} | |
| {{- else -}} | |
| kind: Secret | |
| name: '{{ .builtin.cluster.name }}' | |
| {{- end }} | |
| "/s/t/s/controlPlaneEndpoint/port": | |
| - op: replace | |
| path: "/s/t/s/controlPlaneEndpoint/port" | |
| valueFrom: | |
| variable: apiServerPort | |
| selector: | |
| apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 | |
| kind: VSphereClusterTemplate | |
| matchResources: | |
| infrastructureCluster: 'true' | |
| VSphereMachineTemplate: | |
| jsonPatches: | |
| "/s/t/s/numCPUs": | |
| - op: replace | |
| path: "/s/t/s/numCPUs" | |
| valueFrom: | |
| variable: controlPlane.machine.numCPUs | |
| - op: replace | |
| path: "/s/t/s/numCPUs" | |
| valueFrom: | |
| variable: worker.machine.numCPUs | |
| "/s/t/s/diskGiB": | |
| - op: replace | |
| path: "/s/t/s/diskGiB" | |
| valueFrom: | |
| variable: controlPlane.machine.diskGiB | |
| - op: replace | |
| path: "/s/t/s/diskGiB" | |
| valueFrom: | |
| variable: worker.machine.diskGiB | |
| "/s/t/s/memoryMiB": | |
| - op: replace | |
| path: "/s/t/s/memoryMiB" | |
| valueFrom: | |
| variable: controlPlane.machine.memoryMiB | |
| - op: replace | |
| path: "/s/t/s/memoryMiB" | |
| valueFrom: | |
| variable: worker.machine.memoryMiB | |
| "/s/t/s/cloneMode": | |
| - op: replace | |
| path: "/s/t/s/cloneMode" | |
| valueFrom: | |
| variable: vcenter.cloneMode | |
| - op: replace | |
| path: "/s/t/s/cloneMode" | |
| valueFrom: | |
| variable: vcenter.cloneMode | |
| "/s/t/s/network": | |
| - op: replace | |
| path: "/s/t/s/network" | |
| valueFrom: | |
| variable: vcenter.network | |
| - op: replace | |
| path: "/s/t/s/network" | |
| valueFrom: | |
| variable: vcenter.network | |
| - op: replace | |
| path: "/s/t/s/network" | |
| valueFrom: | |
| template: | | |
| devices: | |
| - networkName: {{ .vcenter.network }} | |
| {{ if .controlPlane.network.nameservers -}} | |
| nameservers: | |
| {{- range .controlPlane.network.nameservers }} | |
| - {{ . }} | |
| {{- end }} | |
| {{- end }} | |
| {{ if .controlPlane.network.searchDomains -}} | |
| searchDomains: | |
| {{- range .controlPlane.network.searchDomains }} | |
| - {{ . }} | |
| {{- end }} | |
| {{- end }} | |
| {{ if list "IPv4" "DualStack" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp4: "true" {{- end }} | |
| {{ if list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp6: "true" {{- end }} | |
| {{ if .network.addressesFromPools -}} | |
| addressesFromPools: | |
| {{- range .network.addressesFromPools }} | |
| - apiGroup: {{ .apiGroup }} | |
| kind: {{ .kind }} | |
| name: {{ .name }} | |
| {{- end }} | |
| {{- end }} | |
| - op: add | |
| path: "/s/t/s/network" | |
| valueFrom: | |
| template: | | |
| devices: | |
| - networkName: {{ .vcenter.network }} | |
| {{ if .worker.network.nameservers -}} | |
| nameservers: | |
| {{- range .worker.network.nameservers }} | |
| - {{ . }} | |
| {{- end }} | |
| {{- end }} | |
| {{ if .controlPlane.network.searchDomains -}} | |
| searchDomains: | |
| {{- range .controlPlane.network.searchDomains }} | |
| - {{ . }} | |
| {{- end }} | |
| {{- end }} | |
| {{ if list "IPv4" "DualStack" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp4: "true" {{- end }} | |
| {{ if list "IPv6" "DualStack" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp6: "true" {{- end }} | |
| {{ if .network.addressesFromPools -}} | |
| addressesFromPools: | |
| {{- range .network.addressesFromPools }} | |
| - apiGroup: {{ .apiGroup }} | |
| kind: {{ .kind }} | |
| name: {{ .name }} | |
| {{- end }} | |
| {{- end }} | |
| "/s/t/s/datacenter": | |
| - op: replace | |
| path: "/s/t/s/datacenter" | |
| valueFrom: | |
| variable: vcenter.datacenter | |
| - op: replace | |
| path: "/s/t/s/datacenter" | |
| valueFrom: | |
| variable: vcenter.datacenter | |
| "/s/t/s/datastore": | |
| - op: replace | |
| path: "/s/t/s/datastore" | |
| valueFrom: | |
| variable: vcenter.datastore | |
| - op: replace | |
| path: "/s/t/s/datastore" | |
| valueFrom: | |
| variable: vcenter.datastore | |
| "/s/t/s/folder": | |
| - op: replace | |
| path: "/s/t/s/folder" | |
| valueFrom: | |
| variable: vcenter.folder | |
| - op: replace | |
| path: "/s/t/s/folder" | |
| valueFrom: | |
| variable: vcenter.folder | |
| "/s/t/s/resourcePool": | |
| - op: replace | |
| path: "/s/t/s/resourcePool" | |
| valueFrom: | |
| variable: vcenter.resourcePool | |
| - op: replace | |
| path: "/s/t/s/resourcePool" | |
| valueFrom: | |
| variable: vcenter.resourcePool | |
| "/s/t/s/storagePolicyName": | |
| - op: replace | |
| path: "/s/t/s/storagePolicyName" | |
| valueFrom: | |
| variable: vcenter.storagePolicyID | |
| - op: replace | |
| path: "/s/t/s/storagePolicyName" | |
| valueFrom: | |
| variable: vcenter.storagePolicyID | |
| "/s/t/s/server": | |
| - op: replace | |
| path: "/s/t/s/server" | |
| valueFrom: | |
| variable: vcenter.server | |
| - op: replace | |
| path: "/s/t/s/server" | |
| valueFrom: | |
| variable: vcenter.server | |
| "/s/t/s/template": | |
| - op: replace | |
| path: "/s/t/s/template" | |
| valueFrom: | |
| template: "{{ (index .TKR_DATA .builtin.controlPlane.version).osImageRef.template | |
| }}" | |
| - op: replace | |
| path: "/s/t/s/template" | |
| valueFrom: | |
| template: "{{ (index .TKR_DATA .builtin.machineDeployment.version).osImageRef.template | |
| }}" | |
| selector: | |
| apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 | |
| kind: VSphereMachineTemplate | |
| matchResources: | |
| machineDeploymentClass: | |
| names: | |
| - tkg-worker | |
| - tkg-worker-windows |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import json | |
| a = [ | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes", | |
| "value": [] | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "KCP_INIT_APISERVER_EMPTY_EXTRAVOLUMES_ARRAY" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/etcd/local/extraArgs", | |
| "valueFrom": { | |
| "template": "{{ $containCipherSuites := false }}\n{{- range $key, $val := .etcdExtraArgs }}\n{{- if eq $key \"cipher-suites\" }}\n {{- $containCipherSuites = \"true\" }}\n{{- end }}\n{{ $key -}} : \"{{ $val }}\"\n{{- end }}\n{{- if not $containCipherSuites }}\ncipher-suites: \"{{ .tlsCipherSuites }}\"\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "etcdExtraArgs" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs", | |
| "valueFrom": { | |
| "template": "{{ $containCipherSuites := false }}\n{{ $containCloudProvider := false }}\n{{- range $key, $val := .apiServerExtraArgs }}\n{{- if eq $key \"tls-cipher-suites\" }}\n {{- $containCipherSuites = \"true\" }}\n{{- end }}\n{{- if eq $key \"cloud-provider\" }}\n {{- $containCloudProvider = \"true\" }}\n{{- end }}\n{{ $key -}} : \"{{ $val }}\"\n{{- end }}\n{{- if not $containCipherSuites }}\ntls-cipher-suites: \"{{ .tlsCipherSuites }}\"\n{{- end }}\n{{- if not $containCloudProvider }}\ncloud-provider: external\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "apiServerExtraArgs" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/scheduler/extraArgs", | |
| "valueFrom": { | |
| "template": "{{ $containCipherSuites := false }}\n{{- range $key, $val := .kubeSchedulerExtraArgs }}\n{{- if eq $key \"tls-cipher-suites\" }}\n {{- $containCipherSuites = \"true\" }}\n{{- end }}\n{{ $key -}} : \"{{ $val }}\"\n{{- end }}\n{{- if not $containCipherSuites }}\ntls-cipher-suites: \"{{ .tlsCipherSuites }}\"\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "kubeSchedulerExtraArgs" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/controllerManager/extraArgs", | |
| "valueFrom": { | |
| "template": "{{ $containCipherSuites := false }}\n{{ $containCloudProvider := false }}\n{{- range $key, $val := .kubeControllerManagerExtraArgs }}\n{{- if eq $key \"tls-cipher-suites\" }}\n {{- $containCipherSuites = \"true\" }}\n{{- end }}\n{{- if eq $key \"cloud-provider\" }}\n {{- $containCloudProvider = \"true\" }}\n{{- end }}\n{{ $key -}} : \"{{ $val }}\"\n{{- end }}\n{{- if not $containCipherSuites }}\ntls-cipher-suites: \"{{ .tlsCipherSuites }}\"\n{{- end }}\n{{- if not $containCloudProvider }}\ncloud-provider: external\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "kubeControllerManagerExtraArgs" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs", | |
| "valueFrom": { | |
| "template": "{{ $containCipherSuites := false }}\n{{ $containCloudProvider := false }}\n{{- range $key, $val := .controlPlaneKubeletExtraArgs }}\n{{- if eq $key \"tls-cipher-suites\" }}\n {{- $containCipherSuites = \"true\" }}\n{{- end }}\n{{- if eq $key \"cloud-provider\" }}\n {{- $containCloudProvider = \"true\" }}\n{{- end }}\n{{ $key -}} : \"{{ $val }}\"\n{{- end }}\n{{- if not $containCipherSuites }}\ntls-cipher-suites: \"{{ .tlsCipherSuites }}\"\n{{- end }}\n{{- if not $containCloudProvider }}\ncloud-provider: external\n{{- end }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs", | |
| "valueFrom": { | |
| "template": "{{ $containCipherSuites := false }}\n{{ $containCloudProvider := false }}\n{{- range $key, $val := .controlPlaneKubeletExtraArgs }}\n{{- if eq $key \"tls-cipher-suites\" }}\n {{- $containCipherSuites = \"true\" }}\n{{- end }}\n{{- if eq $key \"cloud-provider\" }}\n {{- $containCloudProvider = \"true\" }}\n{{- end }}\n{{ $key -}} : \"{{ $val }}\"\n{{- end }}\n{{- if not $containCipherSuites }}\ntls-cipher-suites: \"{{ .tlsCipherSuites }}\"\n{{- end }}\n{{- if not $containCloudProvider }}\ncloud-provider: external\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "controlPlaneKubeletExtraArgs" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/joinConfiguration/nodeRegistration/kubeletExtraArgs", | |
| "valueFrom": { | |
| "template": "{{ $containCipherSuites := false }}\n{{ $containCloudProvider := false }}\n{{- range $key, $val := .workerKubeletExtraArgs }}\n{{- if eq $key \"tls-cipher-suites\" }}\n {{- $containCipherSuites = \"true\" }}\n{{- end }}\n{{- if eq $key \"cloud-provider\" }}\n {{- $containCloudProvider = \"true\" }}\n{{- end }}\n{{ $key -}} : \"{{ $val }}\"\n{{- end }}\n{{- if not $containCipherSuites }}\ntls-cipher-suites: \"{{ .tlsCipherSuites }}\"\n{{- end }}\n{{- if not $containCloudProvider }}\ncloud-provider: external\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker", | |
| "tkg-worker-windows" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "name": "workerKubeletExtraArgs" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/controlPlaneEndpoint", | |
| "valueFrom": { | |
| "template": "host: '{{ .apiServerEndpoint }}'\nport: 6443\n" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/thumbprint", | |
| "valueFrom": { | |
| "variable": "vcenter.tlsThumbprint" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/server", | |
| "valueFrom": { | |
| "variable": "vcenter.server" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1", | |
| "kind": "VSphereClusterTemplate", | |
| "matchResources": { | |
| "infrastructureCluster": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "vsphereClusterTemplate" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/identityRef", | |
| "valueFrom": { | |
| "template": "{{ if .identityRef -}}\nkind: {{ .identityRef.kind }}\nname: {{ .identityRef.name }}\n{{- else -}}\nkind: Secret\nname: '{{ .builtin.cluster.name }}'\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1", | |
| "kind": "VSphereClusterTemplate", | |
| "matchResources": { | |
| "infrastructureCluster": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "vSphereClusterIdentityRef" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/numCPUs", | |
| "valueFrom": { | |
| "variable": "controlPlane.machine.numCPUs" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/diskGiB", | |
| "valueFrom": { | |
| "variable": "controlPlane.machine.diskGiB" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/memoryMiB", | |
| "valueFrom": { | |
| "variable": "controlPlane.machine.memoryMiB" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/cloneMode", | |
| "valueFrom": { | |
| "variable": "vcenter.cloneMode" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/network", | |
| "valueFrom": { | |
| "variable": "vcenter.network" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/datacenter", | |
| "valueFrom": { | |
| "variable": "vcenter.datacenter" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/datastore", | |
| "valueFrom": { | |
| "variable": "vcenter.datastore" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/folder", | |
| "valueFrom": { | |
| "variable": "vcenter.folder" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/resourcePool", | |
| "valueFrom": { | |
| "variable": "vcenter.resourcePool" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/storagePolicyName", | |
| "valueFrom": { | |
| "variable": "vcenter.storagePolicyID" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/server", | |
| "valueFrom": { | |
| "variable": "vcenter.server" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/template", | |
| "valueFrom": { | |
| "template": "{{ (index .TKR_DATA .builtin.controlPlane.version).osImageRef.template }}" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1", | |
| "kind": "VSphereMachineTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "controlPlaneMachineTemplate" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/numCPUs", | |
| "valueFrom": { | |
| "variable": "worker.machine.numCPUs" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/diskGiB", | |
| "valueFrom": { | |
| "variable": "worker.machine.diskGiB" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/memoryMiB", | |
| "valueFrom": { | |
| "variable": "worker.machine.memoryMiB" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/cloneMode", | |
| "valueFrom": { | |
| "variable": "vcenter.cloneMode" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/network", | |
| "valueFrom": { | |
| "variable": "vcenter.network" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/datacenter", | |
| "valueFrom": { | |
| "variable": "vcenter.datacenter" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/datastore", | |
| "valueFrom": { | |
| "variable": "vcenter.datastore" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/folder", | |
| "valueFrom": { | |
| "variable": "vcenter.folder" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/resourcePool", | |
| "valueFrom": { | |
| "variable": "vcenter.resourcePool" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/storagePolicyName", | |
| "valueFrom": { | |
| "variable": "vcenter.storagePolicyID" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/server", | |
| "valueFrom": { | |
| "variable": "vcenter.server" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/template", | |
| "valueFrom": { | |
| "template": "{{ (index .TKR_DATA .builtin.machineDeployment.version).osImageRef.template }}" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1", | |
| "kind": "VSphereMachineTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker", | |
| "tkg-worker-windows" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "name": "workerMachineTemplate" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/users", | |
| "valueFrom": { | |
| "template": "- name: capv\n sshAuthorizedKeys:\n {{- range .user.sshAuthorizedKeys }}\n - ' {{- . -}} '\n {{- end }}\n sudo: ALL=(ALL) NOPASSWD:ALL\n" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/imageRepository", | |
| "valueFrom": { | |
| "template": "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/etcd/local/imageRepository", | |
| "valueFrom": { | |
| "template": "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/etcd/local/imageTag", | |
| "valueFrom": { | |
| "template": "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.etcd.imageTag}}" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/dns/imageRepository", | |
| "valueFrom": { | |
| "template": "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}" | |
| } | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/dns/imageTag", | |
| "valueFrom": { | |
| "template": "{{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.coredns.imageTag}}" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "name": "kubeadmControlPlaneTemplate" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/users", | |
| "valueFrom": { | |
| "template": "- name: capv\n sshAuthorizedKeys:\n {{- range .user.sshAuthorizedKeys }}\n - ' {{- . -}} '\n {{- end }}\n sudo: ALL=(ALL) NOPASSWD:ALL\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "name": "KubeadmConfigTemplate" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "valueFrom": { | |
| "template": "owner: root:root\npath: /etc/kubernetes/manifests/kube-vip.yaml\ncontent: |\n ---\n apiVersion: v1\n kind: Pod\n metadata:\n creationTimestamp: null\n name: kube-vip\n namespace: kube-system\n spec:\n containers:\n - args:\n - manager\n env:\n - name: cp_enable\n value: \"true\"\n - name: svc_enable\n value: \"{{ .kubeVipLoadBalancerProvider }}\"\n - name: vip_arp\n value: \"true\"\n - name: vip_leaderelection\n value: \"true\"\n - name: address\n value: {{ .apiServerEndpoint }}\n {{- if and (not .aviControlPlaneHAProvider) .apiServerPort }}\n - name: port\n value: \"{{ .apiServerPort }}\"\n {{- end }}\n - name: vip_interface\n value: {{ .vipNetworkInterface }}\n - name: vip_leaseduration\n value: \"30\"\n - name: vip_renewdeadline\n value: \"20\"\n - name: vip_retryperiod\n value: \"4\"\n image: {{(index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository}}/kube-vip:{{(index (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec \"kube-vip\").imageTag}}\n imagePullPolicy: IfNotPresent\n name: kube-vip\n resources: {}\n securityContext:\n capabilities:\n add:\n - NET_ADMIN\n - NET_RAW\n volumeMounts:\n - mountPath: /etc/kubernetes/admin.conf\n name: kubeconfig\n hostNetwork: \"true\"\n hostAliases:\n - hostnames:\n - kubernetes\n ip: 127.0.0.1\n volumes:\n - hostPath:\n path: /etc/kubernetes/admin.conf\n type: FileOrCreate\n name: kubeconfig\n status: {}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not .aviAPIServerHAProvider }}", | |
| "name": "kubeVIPPod" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/network", | |
| "valueFrom": { | |
| "template": "devices:\n- networkName: {{ .vcenter.network }}\n {{ if .controlPlane.network.nameservers -}}\n nameservers:\n {{- range .controlPlane.network.nameservers }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{ if .controlPlane.network.searchDomains -}}\n searchDomains:\n {{- range .controlPlane.network.searchDomains }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{ if list \"IPv4\" \"DualStack\" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp4: \"true\" {{- end }}\n {{ if list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp6: \"true\" {{- end }}\n {{ if .network.addressesFromPools -}}\n addressesFromPools:\n {{- range .network.addressesFromPools }}\n - apiGroup: {{ .apiGroup }}\n kind: {{ .kind }}\n name: {{ .name }}\n {{- end }}\n {{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1", | |
| "kind": "VSphereMachineTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/network", | |
| "valueFrom": { | |
| "template": "devices:\n- networkName: {{ .vcenter.network }}\n {{ if .worker.network.nameservers -}}\n nameservers:\n {{- range .worker.network.nameservers }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{ if .controlPlane.network.searchDomains -}}\n searchDomains:\n {{- range .controlPlane.network.searchDomains }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{ if list \"IPv4\" \"DualStack\" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp4: \"true\" {{- end }}\n {{ if list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily | and (empty .network.addressesFromPools) -}} dhcp6: \"true\" {{- end }}\n {{ if .network.addressesFromPools -}}\n addressesFromPools:\n {{- range .network.addressesFromPools }}\n - apiGroup: {{ .apiGroup }}\n kind: {{ .kind }}\n name: {{ .name }}\n {{- end }}\n {{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1", | |
| "kind": "VSphereMachineTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker", | |
| "tkg-worker-windows" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "name": "networkConfiguration" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "echo \"::1 localhost\" >> /etc/hosts" | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "echo \"::1 localhost\" >> /etc/hosts" | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily }}", | |
| "name": "ipv6localhost" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/controlPlaneEndpoint/port", | |
| "valueFrom": { | |
| "variable": "apiServerPort" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1", | |
| "kind": "VSphereClusterTemplate", | |
| "matchResources": { | |
| "infrastructureCluster": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not (empty .apiServerPort) }}", | |
| "name": "clusterApiServerPort" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/initConfiguration/localAPIEndpoint", | |
| "valueFrom": { | |
| "template": "{{ if .builtin.cluster.network.ipFamily | eq \"IPv6\" | or (.builtin.cluster.network.ipFamily | eq \"DualStack\" | and (.network.ipv6Primary | default false)) -}}\n advertiseAddress: '::/0'\n{{- else -}}\n advertiseAddress: '0.0.0.0'\n{{- end }}\nbindPort: {{ .apiServerPort }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/joinConfiguration/controlPlane", | |
| "valueFrom": { | |
| "template": "localAPIEndpoint:\n {{ if .builtin.cluster.network.ipFamily | eq \"IPv6\" | or (.builtin.cluster.network.ipFamily | eq \"DualStack\" | and (.network.ipv6Primary | default false)) -}}\n advertiseAddress: '::/0'\n {{- else -}}\n advertiseAddress: '0.0.0.0'\n {{- end }}\n bindPort: {{ .apiServerPort }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ and (not .aviAPIServerHAProvider) (not (empty .apiServerPort)) }}", | |
| "name": "apiServerEndpointConfiguration" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs/node-ip", | |
| "value": "::" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-ip", | |
| "value": "::" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/advertise-address", | |
| "valueFrom": { | |
| "variable": "apiServerEndpoint" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/bind-address", | |
| "value": "::" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/controllerManager/extraArgs/bind-address", | |
| "value": "::" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/scheduler/extraArgs/bind-address", | |
| "value": "::" | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-ip", | |
| "value": "::" | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ .builtin.cluster.network.ipFamily | eq \"DualStack\" | and (.network.ipv6Primary | default false) }}", | |
| "name": "bindAddressConfiguration" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "value": { | |
| "content": "", | |
| "owner": "root:root", | |
| "path": "/etc/sysconfig/kubelet", | |
| "permissions": "0640" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "echo \"KUBELET_EXTRA_ARGS=--node-ip=$(ip -6 -json addr show dev eth0 scope global | jq -r .[0].addr_info[0].local)\" >> /etc/sysconfig/kubelet" | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ and (.builtin.cluster.network.ipFamily | eq \"IPv6\" | or (.builtin.cluster.network.ipFamily | eq \"DualStack\" | and (.network.ipv6Primary | default false))) (not .aviAPIServerHAProvider) }}", | |
| "name": "ipv6KubeletNodeIPConfiguration" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/initConfiguration/nodeRegistration/kubeletExtraArgs/node-labels", | |
| "valueFrom": { | |
| "template": "{{ $first := \"true\" }}\n{{- range $key, $val := (index .TKR_DATA .builtin.controlPlane.version).labels }}\n{{- if regexMatch \"^(?:[a-zA-z])(?:[-\\\\w\\\\.]*[a-zA-z])$\" $val }}\n{{- if $first }}\n {{- $first = false }}\n{{- else -}}\n ,\n{{- end }}\n{{- $key -}} = {{- $val }}\n{{- end }}\n{{- end }}\n{{- if .controlPlane.nodeLabels -}}\n {{- if (index .TKR_DATA .builtin.controlPlane.version).labels -}}\n ,\n {{- end -}}\n {{- $first := \"true\" }}\n {{- range .controlPlane.nodeLabels }}\n {{- if $first }}\n {{- $first = false }}\n {{- else -}}\n ,\n {{- end }}\n {{- .key -}} = {{- .value -}}\n {{ end }}\n{{ end }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-labels", | |
| "valueFrom": { | |
| "template": "{{ $first := \"true\" }}\n{{- range $key, $val := (index .TKR_DATA .builtin.controlPlane.version).labels }}\n{{- if regexMatch \"^(?:[a-zA-z])(?:[-\\\\w\\\\.]*[a-zA-z])$\" $val }}\n{{- if $first }}\n {{- $first = false }}\n{{- else -}}\n ,\n{{- end }}\n{{- $key -}} = {{- $val }}\n{{- end }}\n{{- end }}\n{{- if .controlPlane.nodeLabels -}}\n {{- if (index .TKR_DATA .builtin.controlPlane.version).labels -}}\n ,\n {{- end -}}\n {{- $first := \"true\" }}\n {{- range .controlPlane.nodeLabels }}\n {{- if $first }}\n {{- $first = false }}\n {{- else -}}\n ,\n {{- end }}\n {{- .key -}} = {{- .value -}}\n {{ end }}\n{{ end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/joinConfiguration/nodeRegistration/kubeletExtraArgs/node-labels", | |
| "valueFrom": { | |
| "template": "{{ $first := \"true\" }}\n{{- range $key, $val := (index .TKR_DATA .builtin.machineDeployment.version).labels }}\n{{- if regexMatch \"^(?:[a-zA-z])(?:[-\\\\w\\\\.]*[a-zA-z])$\" $val }}\n{{- if $first }}\n {{- $first = false }}\n{{- else -}}\n ,\n{{- end }}\n{{- $key -}} = {{- $val }}\n{{- end }}\n{{- end }}\n{{- if .nodePoolLabels -}}\n ,\n {{- $first := \"true\" }}\n {{- range .nodePoolLabels }}\n {{- if $first }}\n {{- $first = false }}\n {{- else -}}\n ,\n {{- end }}\n {{- .key -}} = {{- .value -}}\n {{ end }}\n{{ end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker", | |
| "tkg-worker-windows" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "name": "nodeLabels" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "valueFrom": { | |
| "template": "content: |\n [Service]\n Environment=\"HTTP_PROXY= {{- .proxy.httpProxy -}} \"\n Environment=\"HTTPS_PROXY= {{- .proxy.httpsProxy -}} \"\n Environment=\"NO_PROXY= {{- list \"localhost\" \"127.0.0.1\" \".svc\" \".svc.cluster.local\" ((list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily) | ternary \"::1\" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join \",\" -}} \"\nowner: root:root\npath: /etc/systemd/system/containerd.service.d/http-proxy.conf\npermissions: \"0640\"\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "valueFrom": { | |
| "template": "content: |\n [Service]\n Environment=\"HTTP_PROXY= {{- .proxy.httpProxy -}} \"\n Environment=\"HTTPS_PROXY= {{- .proxy.httpsProxy -}} \"\n Environment=\"NO_PROXY= {{- list \"localhost\" \"127.0.0.1\" \".svc\" \".svc.cluster.local\" ((list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily) | ternary \"::1\" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join \",\" -}} \"\nowner: root:root\npath: /usr/lib/systemd/system/kubelet.service.d/http-proxy.conf\npermissions: \"0640\"\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "systemctl daemon-reload" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "systemctl stop containerd" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "systemctl start containerd" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "export HTTP_PROXY= {{- .proxy.httpProxy }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "export HTTPS_PROXY= {{- .proxy.httpsProxy }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "export NO_PROXY= {{- list \"localhost\" \"127.0.0.1\" \".svc\" \".svc.cluster.local\" ((list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily) | ternary \"::1\" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join \",\" }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/files/-", | |
| "valueFrom": { | |
| "template": "content: |\n [Service]\n Environment=\"HTTP_PROXY= {{- .proxy.httpProxy -}} \"\n Environment=\"HTTPS_PROXY= {{- .proxy.httpsProxy -}} \"\n Environment=\"NO_PROXY= {{- list \"localhost\" \"127.0.0.1\" \".svc\" \".svc.cluster.local\" ((list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily) | ternary \"::1\" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join \",\" -}} \"\nowner: root:root\npath: /etc/systemd/system/containerd.service.d/http-proxy.conf\npermissions: \"0640\"\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/files/-", | |
| "valueFrom": { | |
| "template": "content: |\n [Service]\n Environment=\"HTTP_PROXY= {{- .proxy.httpProxy -}} \"\n Environment=\"HTTPS_PROXY= {{- .proxy.httpsProxy -}} \"\n Environment=\"NO_PROXY= {{- list \"localhost\" \"127.0.0.1\" \".svc\" \".svc.cluster.local\" ((list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily) | ternary \"::1\" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join \",\" -}} \"\nowner: root:root\npath: /usr/lib/systemd/system/kubelet.service.d/http-proxy.conf\npermissions: \"0640\"\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "systemctl daemon-reload" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "systemctl restart containerd" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "export HTTP_PROXY= {{- .proxy.httpProxy }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "export HTTPS_PROXY= {{- .proxy.httpsProxy }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "export NO_PROXY= {{- list \"localhost\" \"127.0.0.1\" \".svc\" \".svc.cluster.local\" ((list \"IPv6\" \"DualStack\" | has .builtin.cluster.network.ipFamily) | ternary \"::1\" nil) | concat .proxy.noProxy .builtin.cluster.network.services .builtin.cluster.network.pods | uniq | sortAlpha | join \",\" }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not (empty .proxy) }}", | |
| "name": "httpProxy" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "! which rehash_ca_certificates.sh 2>/dev/null || rehash_ca_certificates.sh" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "! which update-ca-certificates 2>/dev/null || (mv /etc/ssl/certs/tkg-custom-ca.pem /usr/local/share/ca-certificates/tkg-custom-ca.crt && update-ca-certificates)" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "! which update-ca-trust 2>/dev/null || (update-ca-trust force-enable && mv /etc/ssl/certs/tkg-custom-ca.pem /etc/pki/ca-trust/source/anchors/tkg-custom-ca.crt && update-ca-trust extract)" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "systemctl restart containerd" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "valueFrom": { | |
| "template": "path: /etc/ssl/certs/tkg-custom-ca.pem\n{{- $proxy := \"\" }}\n{{- range .trust.additionalTrustedCAs }}\n {{- if eq .name \"proxy\" }}\n {{- $proxy = .data }}\n {{- end }}\n{{- end }}\ncontent: {{ $proxy }}\nencoding: base64\npermissions: \"0444\"\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "! which rehash_ca_certificates.sh 2>/dev/null || rehash_ca_certificates.sh" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "! which update-ca-certificates 2>/dev/null || (mv /etc/ssl/certs/tkg-custom-ca.pem /usr/local/share/ca-certificates/tkg-custom-ca.crt && update-ca-certificates)" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "! which update-ca-trust 2>/dev/null || (update-ca-trust force-enable && mv /etc/ssl/certs/tkg-custom-ca.pem /etc/pki/ca-trust/source/anchors/tkg-custom-ca.crt && update-ca-trust extract)" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "systemctl restart containerd" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/files/-", | |
| "valueFrom": { | |
| "template": "path: /etc/ssl/certs/tkg-custom-ca.pem\n{{- $proxy := \"\" }}\n{{- range .trust.additionalTrustedCAs }}\n {{- if eq .name \"proxy\" }}\n {{- $proxy = .data }}\n {{- end }}\n{{- end }}\ncontent: {{ $proxy }}\nencoding: base64\npermissions: \"0444\"\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ $hasProxyCert := false }} {{- range .trust.additionalTrustedCAs }} {{- if .name | eq \"proxy\" }} {{- $hasProxyCert = \"true\" }} {{- end }} {{- end }} {{- $hasProxyCert }}", | |
| "name": "httpProxyCACert" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "sed -i 's|\".*/pause|\" {{- or .imageRepository.host (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository -}} /pause|' /etc/containerd/config.toml\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "sed -i 's|\".*/pause|\" {{- or .imageRepository.host (index .TKR_DATA .builtin.machineDeployment.version).kubernetesSpec.imageRepository -}} /pause|' /etc/containerd/config.toml\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not (empty .imageRepository.host) }}", | |
| "name": "customizedImageRepo" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "{{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository | splitList \"/\") 0 -}}\necho '[plugins.\"io.containerd.grpc.v1.cri\".registry.configs.\" {{- $host -}} \".tls]' >> /etc/containerd/config.toml\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "{{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository | splitList \"/\") 0 }}\n{{- $val := list \"ca_file = \\\"/etc/containerd/\" $host \".crt\\\"\" | join \"\" }}\n{{- with .imageRepository }}\n {{- if .tlsCertificateValidation | eq false }}\n {{- $val = \"insecure_skip_verify = \"true\"\" }}\n {{- end }}\n{{- end -}}\n{{- define \"echo\" -}}\n echo ' {{ . -}} ' >> /etc/containerd/config.toml\n{{- end }}\n{{- template \"echo\" $val -}}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/-", | |
| "value": "systemctl restart containerd" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "valueFrom": { | |
| "template": "path: /etc/containerd/ {{- index (or .imageRepository.host (index .TKR_DATA .builtin.controlPlane.version).kubernetesSpec.imageRepository | splitList \"/\") 0 -}} .crt\n{{- $proxy := \"\" }}\n{{- $image := \"\" }}\n{{- range .trust.additionalTrustedCAs }}\n {{- if eq .name \"proxy\" }}\n {{- $proxy = .data }}\n {{- end }}\n {{- if eq .name \"imageRepository\" }}\n {{- $image = .data }}\n {{- end }}\n{{- end }}\ncontent: {{or $proxy $image}}\nencoding: base64\npermissions: \"0444\"\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "{{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.machineDeployment.version).kubernetesSpec.imageRepository | splitList \"/\") 0 -}}\necho '[plugins.\"io.containerd.grpc.v1.cri\".registry.configs.\" {{- $host -}} \".tls]' >> /etc/containerd/config.toml\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "valueFrom": { | |
| "template": "{{- $host := index (or .imageRepository.host (index .TKR_DATA .builtin.machineDeployment.version).kubernetesSpec.imageRepository | splitList \"/\") 0 }}\n{{- $val := list \"ca_file = \\\"/etc/containerd/\" $host \".crt\\\"\" | join \"\" }}\n{{- with .imageRepository }}\n {{- if .tlsCertificateValidation | eq false }}\n {{- $val = \"insecure_skip_verify = \"true\"\" }}\n {{- end }}\n{{- end -}}\n{{- define \"echo\" -}}\n echo ' {{ . -}} ' >> /etc/containerd/config.toml\n{{- end }}\n{{- template \"echo\" $val -}}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/preKubeadmCommands/-", | |
| "value": "systemctl restart containerd" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/files/-", | |
| "valueFrom": { | |
| "template": "path: /etc/containerd/{{ index (or .imageRepository.host (index .TKR_DATA .builtin.machineDeployment.version).kubernetesSpec.imageRepository | splitList \"/\") 0 }}.crt\n{{- $proxy := \"\" }}\n{{- $image := \"\" }}\n{{- range .trust.additionalTrustedCAs }}\n {{- if eq .name \"proxy\" }}\n {{- $proxy = .data }}\n {{- end }}\n {{- if eq .name \"imageRepository\" }}\n {{- $image = .data }}\n {{- end }}\n{{- end }}\ncontent: {{or $proxy $image}}\nencoding: base64\npermissions: \"0444\"\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not (empty .trust.additionalTrustedCAs) }}", | |
| "name": "registryCACert" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-path", | |
| "value": "/var/log/kubernetes/audit.log" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-policy-file", | |
| "value": "/etc/kubernetes/audit-policy.yaml" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxage", | |
| "value": "30" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxbackup", | |
| "value": "10" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/audit-log-maxsize", | |
| "value": "100" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-", | |
| "value": { | |
| "hostPath": "/etc/kubernetes/audit-policy.yaml", | |
| "mountPath": "/etc/kubernetes/audit-policy.yaml", | |
| "name": "audit-policy" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-", | |
| "value": { | |
| "hostPath": "/var/log/kubernetes", | |
| "mountPath": "/var/log/kubernetes", | |
| "name": "audit-logs" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "value": { | |
| "content": "---\napiVersion: audit.k8s.io/v1\nkind: Policy\nrules:\n #! The following requests were manually identified as high-volume and low-risk,\n #! so drop them.\n - level: None\n users: [\"system:serviceaccount:kube-system:kube-proxy\"]\n verbs: [\"watch\"]\n resources:\n - group: \"\" #! core\n resources: [\"endpoints\", \"services\", \"services/status\"]\n - level: None\n userGroups: [\"system:nodes\"]\n verbs: [\"get\"]\n resources:\n - group: \"\" #! core\n resources: [\"nodes\", \"nodes/status\"]\n - level: None\n users:\n - system:kube-controller-manager\n - system:kube-scheduler\n - system:serviceaccount:kube-system:endpoint-controller\n verbs: [\"get\", \"update\"]\n namespaces: [\"kube-system\"]\n resources:\n - group: \"\" #! core\n resources: [\"endpoints\"]\n - level: None\n users: [\"system:apiserver\"]\n verbs: [\"get\"]\n resources:\n - group: \"\" #! core\n resources: [\"namespaces\", \"namespaces/status\", \"namespaces/finalize\"]\n #! Don't log HPA fetching metrics.\n - level: None\n users:\n - system:kube-controller-manager\n verbs: [\"get\", \"list\"]\n resources:\n - group: \"metrics.k8s.io\"\n #! Don't log these read-only URLs.\n - level: None\n nonResourceURLs:\n - /healthz*\n - /version\n - /swagger*\n #! Don't log events requests.\n - level: None\n resources:\n - group: \"\" #! core\n resources: [\"events\"]\n #! Don't log TMC service account performing read operations because they are high-volume.\n - level: None\n userGroups: [\"system:serviceaccounts:vmware-system-tmc\"]\n verbs: [\"get\", \"list\", \"watch\"]\n #! Don't log read requests from garbage collector because they are high-volume.\n - level: None\n users: [\"system:serviceaccount:kube-system:generic-garbage-collector\"]\n verbs: [\"get\", \"list\", \"watch\"]\n #! node and pod status calls from nodes are high-volume and can be large, don't log responses for expected updates from nodes\n - level: Request\n userGroups: [\"system:nodes\"]\n verbs: [\"update\",\"patch\"]\n resources:\n - group: \"\" #! core\n resources: [\"nodes/status\", \"pods/status\"]\n omitStages:\n - \"RequestReceived\"\n #! deletecollection calls can be large, don't log responses for expected namespace deletions\n - level: Request\n users: [\"system:serviceaccount:kube-system:namespace-controller\"]\n verbs: [\"deletecollection\"]\n omitStages:\n - \"RequestReceived\"\n #! Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data,\n #! so only log at the Metadata level.\n - level: Metadata\n resources:\n - group: \"\" #! core\n resources: [\"secrets\", \"configmaps\"]\n - group: authentication.k8s.io\n resources: [\"tokenreviews\"]\n omitStages:\n - \"RequestReceived\"\n #! Get repsonses can be large; skip them.\n - level: Request\n verbs: [\"get\", \"list\", \"watch\"]\n resources:\n - group: \"\" #! core\n - group: \"admissionregistration.k8s.io\"\n - group: \"apiextensions.k8s.io\"\n - group: \"apiregistration.k8s.io\"\n - group: \"apps\"\n - group: \"authentication.k8s.io\"\n - group: \"authorization.k8s.io\"\n - group: \"autoscaling\"\n - group: \"batch\"\n - group: \"certificates.k8s.io\"\n - group: \"extensions\"\n - group: \"metrics.k8s.io\"\n - group: \"networking.k8s.io\"\n - group: \"policy\"\n - group: \"rbac.authorization.k8s.io\"\n - group: \"settings.k8s.io\"\n - group: \"storage.k8s.io\"\n omitStages:\n - \"RequestReceived\"\n #! Default level for known APIs\n - level: RequestResponse\n resources:\n - group: \"\" #! core\n - group: \"admissionregistration.k8s.io\"\n - group: \"apiextensions.k8s.io\"\n - group: \"apiregistration.k8s.io\"\n - group: \"apps\"\n - group: \"authentication.k8s.io\"\n - group: \"authorization.k8s.io\"\n - group: \"autoscaling\"\n - group: \"batch\"\n - group: \"certificates.k8s.io\"\n - group: \"extensions\"\n - group: \"metrics.k8s.io\"\n - group: \"networking.k8s.io\"\n - group: \"policy\"\n - group: \"rbac.authorization.k8s.io\"\n - group: \"settings.k8s.io\"\n - group: \"storage.k8s.io\"\n omitStages:\n - \"RequestReceived\"\n #! Default level for all other requests.\n - level: Metadata\n omitStages:\n - \"RequestReceived\"\n", | |
| "owner": "root:root", | |
| "path": "/etc/kubernetes/audit-policy.yaml", | |
| "permissions": "0600" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ .auditLogging.enabled }}", | |
| "name": "auditLogging" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/initConfiguration/nodeRegistration/taints", | |
| "value": [] | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/joinConfiguration/nodeRegistration/taints", | |
| "value": [] | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not .controlPlaneTaint }}", | |
| "name": "controlPlaneTaint" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/rolloutBefore", | |
| "valueFrom": { | |
| "template": "certificatesExpiryDays: {{ .controlPlaneCertificateRotation.daysBefore }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ .controlPlaneCertificateRotation.activate }}", | |
| "name": "kcptCertificateRotation" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "remove", | |
| "path": "/spec/template/spec/useExperimentalRetryJoin" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/joinConfiguration/nodeRegistration/criSocket", | |
| "value": "npipe:////./pipe/containerd-containerd" | |
| }, | |
| { | |
| "op": "remove", | |
| "path": "/spec/template/spec/joinConfiguration/nodeRegistration/kubeletExtraArgs/tls-cipher-suites" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/joinConfiguration/nodeRegistration/kubeletExtraArgs/register-with-taints", | |
| "value": "os=windows:NoSchedule" | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/joinConfiguration/nodeRegistration/name", | |
| "value": "{{ ds.meta_data.hostname }}" | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/preKubeadmCommands", | |
| "valueFrom": { | |
| "template": "- echo | set /p=\"::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6\" > C:\\etc\\hosts & echo. >> C:\\etc\\hosts\n- echo | set /p=\"127.0.0.1 {{\" {{ ds.meta_data.hostname }} \"}} localhost localhost.localdomain localhost4 localhost4.localdomain4\" >> C:\\etc\\hosts\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/files/-", | |
| "value": { | |
| "content": "Set-Service -Name \"wuauserv\" -StartupType Disabled -Status Stopped\n", | |
| "path": "C:\\k\\prevent_windows_updates.ps1" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/postKubeadmCommands/-", | |
| "value": "powershell c:/k/prevent_windows_updates.ps1 -ExecutionPolicy Bypass" | |
| }, | |
| { | |
| "op": "replace", | |
| "path": "/spec/template/spec/users", | |
| "valueFrom": { | |
| "template": "- name: capv\n groups: Administrators\n sshAuthorizedKeys:\n {{- range .user.sshAuthorizedKeys }}\n - ' {{- . -}} '\n {{- end }}\n sudo: ALL=(ALL) NOPASSWD:ALL\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker-windows" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "name": "windows" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/files/-", | |
| "value": { | |
| "content": "function WaitForSaToken($KubeCfgFile, $ServiceAcctName) {\n $SaToken = $null\n $LoopCount = 400\n do {\n $LoopCount = $LoopCount - 1\n if ($LoopCount -eq 0) {\n break\n }\n sleep 5\n $SaToken=$(kubectl --kubeconfig=$KubeCfgFile get secrets -n kube-system -o jsonpath=\"{.items[?(@.metadata.annotations['kubernetes\\.io/service-account\\.name']=='$ServiceAcctName')].data.token}\")\n } while ($SaToken -eq $null)\n return $SaToken\n}\n\n# Disable firewall temporarily for SSH and other internal ports access\nSet-NetFirewallProfile -Profile Domain,Public,Private -Enabled False\n\n$TempFolder = 'C:\\programdata\\temp'\n$AntreaInTempFolder = \"$TempFolder\\antrea-windows-advanced.zip\"\n$KubeproxyInTempFolder = \"$TempFolder\\kube-proxy.exe\"\n\n# Create Folders\n$folders = @('C:\\k\\antrea', 'C:\\var\\log\\antrea', 'C:\\k\\antrea\\bin', 'C:\\var\\log\\kube-proxy', 'C:\\opt\\cni\\bin', 'C:\\etc\\cni\\net.d')\nforeach ($f in $folders) {\n New-Item -ItemType Directory -Force -Path $f\n}\n\n# Add Windows Defender Options\n$avexceptions = @('C:\\program files\\containerd\\ctr.exe', 'C:\\program files\\containerd\\containerd.exe')\nforeach ($e in $avexceptions) {\n Add-MpPreference -ExclusionProcess $e\n}\n\n# Extract Antrea, Antrea binary should be packed into windows OVA already\n$antreaZipFile = 'C:\\k\\antrea\\antrea-windows-advanced.zip'\nif (!(Test-Path $antreaZipFile)) {\n cp $AntreaInTempFolder $antreaZipFile\n}\nExpand-Archive -Force -Path $antreaZipFile -DestinationPath C:\\k\\antrea\ncp C:\\k\\antrea\\bin\\antrea-cni.exe C:\\opt\\cni\\bin\\antrea.exe -Force\ncp C:\\k\\antrea\\bin\\host-local.exe C:\\opt\\cni\\bin\\host-local.exe -Force\ncp C:\\k\\antrea\\etc\\antrea-cni.conflist C:\\etc\\cni\\net.d\\10-antrea.conflist -Force\n\n# Get HostIP and set in kubeadm-flags.env\n[Environment]::SetEnvironmentVariable(\"NODE_NAME\", (hostname).ToLower())\n$env:HostIP = (\n Get-NetIPConfiguration |\n Where-Object {\n $_.IPv4DefaultGateway -ne $null -and $_.NetAdapter.Status -ne \"Disconnected\"\n }\n).IPv4Address.IPAddress\n$file = 'C:\\var\\lib\\kubelet\\kubeadm-flags.env'\n$newstr = \"--node-ip=\" + $env:HostIP\n$raw = Get-Content -Path $file -TotalCount 1\n$raw = $raw -replace \".$\"\n$new = \"$($raw) $($newstr)`\"\"\nSet-Content $file $new\n\n$KubeConfigFile = 'C:\\etc\\kubernetes\\kubelet.conf'\n\n# Wait for antrea-agent token to be ready, the token will be used by Install-AntreaAgent\n$AntreaAgentToken = (WaitForSaToken $KubeConfigFile 'antrea-agent')\n\n# Setup Kube-Proxy config file\n$KubeProxyToken = (WaitForSaToken $KubeConfigFile 'kube-proxy-windows')\n$KubeProxyConfig = 'C:\\k\\antrea\\etc\\kube-proxy.conf'\n$KubeAPIServer = $(kubectl --kubeconfig=$KubeConfigFile config view -o jsonpath='{.clusters[0].cluster.server}')\n$KubeProxyToken = $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($KubeProxyToken)))\nkubectl config --kubeconfig=$KubeProxyConfig set-cluster kubernetes --server=$KubeAPIServer --insecure-skip-tls-verify\nkubectl config --kubeconfig=$KubeProxyConfig set-credentials kube-proxy-windows --token=$KubeProxyToken\nkubectl config --kubeconfig=$KubeProxyConfig set-context kube-proxy-windows@kubernetes --cluster=kubernetes --user=kube-proxy-windows\nkubectl config --kubeconfig=$KubeProxyConfig use-context kube-proxy-windows@kubernetes\n\n# kube-proxy.exe should be packed into windows OVA\nif (!(Test-Path 'C:\\k\\kube-proxy.exe')) {\n cp $KubeproxyInTempFolder 'C:\\k\\kube-proxy.exe'\n}\n\n# Install antrea-agent & OVS\nImport-Module C:\\k\\antrea\\helper.psm1\n& Install-AntreaAgent -KubernetesHome \"C:\\k\" -KubeConfig \"C:\\etc\\kubernetes\\kubelet.conf\" -AntreaHome \"C:\\k\\antrea\" -AntreaVersion \"1.7.1\"\nNew-KubeProxyServiceInterface\n& C:\\k\\antrea\\Install-OVS.ps1 -ImportCertificate $false -LocalFile C:\\k\\antrea\\ovs-win64.zip\n\n# Setup Services\n$nssm = (Get-Command nssm).Source\n& $nssm set kubelet start SERVICE_AUTO_START\n& $nssm install kube-proxy \"C:\\k\\kube-proxy.exe\" \"--proxy-mode=userspace --kubeconfig=$KubeProxyConfig --log-dir=C:\\var\\log\\kube-proxy --logtostderr=false --alsologtostderr\"\n& $nssm install antrea-agent \"C:\\k\\antrea\\bin\\antrea-agent.exe\" \"--config=C:\\k\\antrea\\etc\\antrea-agent.conf --logtostderr=false --log_dir=C:\\var\\log\\antrea --alsologtostderr --log_file_max_size=100 --log_file_max_num=4\"\n& $nssm set antrea-agent DependOnService kube-proxy ovs-vswitchd\n& $nssm set antrea-agent Start SERVICE_AUTO_START\n\n# Start Services\nstart-service kubelet\nstart-service kube-proxy\nstart-service antrea-agent\n", | |
| "path": "C:\\Temp\\antrea.ps1" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/postKubeadmCommands/-", | |
| "value": "powershell C:/Temp/antrea.ps1 -ExecutionPolicy Bypass" | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker-windows" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ .cni | eq \"antrea\" }}", | |
| "name": "windows-antrea" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/ntp", | |
| "valueFrom": { | |
| "template": "enabled: \"true\"\nservers:\n {{- range .ntpServers }}\n- {{ . }}\n {{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| }, | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/ntp", | |
| "valueFrom": { | |
| "template": "enabled: \"true\"\nservers:\n {{- range .ntpServers }}\n- {{ . }}\n {{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "bootstrap.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmConfigTemplate", | |
| "matchResources": { | |
| "machineDeploymentClass": { | |
| "names": [ | |
| "tkg-worker" | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not (empty .ntpServers) }}", | |
| "name": "ntpServers" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/certSANs", | |
| "valueFrom": { | |
| "template": "{{- range .additionalFQDN }}\n- {{ . }}\n{{- end }}\n" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "enabledIf": "{{ not (empty .additionalFQDN) }}", | |
| "name": "additionalFQDN" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/admission-control-config-file", | |
| "value": "/etc/kubernetes/admission-control-config.yaml" | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-", | |
| "valueFrom": { | |
| "template": "name: admin-control-conf\nhostPath: /etc/kubernetes/admission-control-config.yaml\nmountPath: /etc/kubernetes/admission-control-config.yaml\nreadOnly: \"true\"\npathType: \"File\"\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "valueFrom": { | |
| "template": "path: /etc/kubernetes/admission-control-config.yaml\ncontent: |-\n apiVersion: apiserver.config.k8s.io/v1\n kind: AdmissionConfiguration\n plugins:\n {{- if and (not .podSecurityStandard.deactivated) (semverCompare \">= v1.24\" .builtin.controlPlane.version) }}\n {{ $namespace_exemptions := printf \"%q, %q\" \"kube-system\" \"tkg-system\" -}}\n {{ $defaultWarnAudit := \"baseline\" }}\n {{- if .podSecurityStandard.exemptions.namespaces -}}\n {{ range $namespace := .podSecurityStandard.exemptions.namespaces -}}\n {{ $namespace_exemptions = printf \"%s, %q\" $namespace_exemptions $namespace -}}\n {{- end -}}\n {{- end -}}\n - name: PodSecurity\n configuration:\n apiVersion: pod-security.admission.config.k8s.io/v1beta1\n kind: PodSecurityConfiguration\n defaults:\n enforce: \"{{ if .podSecurityStandard.enforce -}}\n {{ .podSecurityStandard.enforce }}\n {{- end }}\"\n enforce-version: \"{{ .podSecurityStandard.enforceVersion -}}\"\n audit: \"{{ if .podSecurityStandard.audit -}}\n {{ .podSecurityStandard.audit }}\n {{- else -}}\n {{ $defaultWarnAudit }}\n {{- end }}\"\n audit-version: \"{{ .podSecurityStandard.auditVersion -}}\"\n warn: \"{{ if .podSecurityStandard.warn -}}\n {{ .podSecurityStandard.warn }}\n {{- else -}}\n {{ $defaultWarnAudit }}\n {{- end }}\"\n warn-version: \"{{ .podSecurityStandard.warnVersion -}}\"\n exemptions:\n usernames: []\n runtimeClasses: []\n namespaces: [{{ $namespace_exemptions }}]\n {{- end }}\n {{- if .eventRateLimitConf }}\n - name: EventRateLimit\n path: eventConfig.yaml\n {{- end }}" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "description": "Adds an admission configuration for kube-apiserver.", | |
| "enabledIf": "{{ or (and (not .podSecurityStandard.deactivated) (semverCompare \">= v1.24\" .builtin.controlPlane.version)) (.eventRateLimitConf) }}", | |
| "name": "podSecurityStandard" | |
| }, | |
| { | |
| "definitions": [ | |
| { | |
| "jsonPatches": [ | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraArgs/enable-admission-plugins", | |
| "valueFrom": { | |
| "template": "{{ $containEnableAdmissionPlugin := false }}\n{{- $admissionPlugins := \"\" }}\n{{- range $key, $val := .apiServerExtraArgs }}\n{{- if eq $key \"enable-admission-plugins\" }}\n {{- $containEnableAdmissionPlugin = \"true\" }}\n {{- $admissionPlugins = $val }}\n{{- end }}\n{{- end }}\n{{- if not $containEnableAdmissionPlugin }}\nNodeRestriction,EventRateLimit\n{{- else -}}\n{{- $admissionPlugins -}},EventRateLimit\n{{- end }}\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/apiServer/extraVolumes/-", | |
| "valueFrom": { | |
| "template": "name: event-conf\nhostPath: /etc/kubernetes/eventConfig.yaml\nmountPath: /etc/kubernetes/eventConfig.yaml\nreadOnly: \"true\"\n, pathType: \"File\"\n" | |
| } | |
| }, | |
| { | |
| "op": "add", | |
| "path": "/spec/template/spec/kubeadmConfigSpec/files/-", | |
| "valueFrom": { | |
| "template": "path: /etc/kubernetes/eventConfig.yaml\nencoding: base64\ncontent: {{ .eventRateLimitConf}}" | |
| } | |
| } | |
| ], | |
| "selector": { | |
| "apiVersion": "controlplane.cluster.x-k8s.io/v1beta1", | |
| "kind": "KubeadmControlPlaneTemplate", | |
| "matchResources": { | |
| "controlPlane": "true" | |
| } | |
| } | |
| } | |
| ], | |
| "description": "Adds an admission configuration for EventRateLimit.", | |
| "enabledIf": "{{ not (empty .eventRateLimitConf) }}", | |
| "name": "eventRateLimitConf" | |
| } | |
| ] | |
| x = 0 | |
| valid = 0 | |
| invalid = 0 | |
| # Verify that entry of the patches has a "definitions" stanze | |
| for deff in a: | |
| if "definitions" in deff: | |
| valid = valid + 1 | |
| else: | |
| invalid = invalid + 1 | |
| #print("Verified definitions:", valid, invalid) | |
| import pprint | |
| # Group of selectorws... i.e. KubeadmControlPlaneTemplate, | |
| # KubeadmConfigTemplate, VSphereClusterTemplate, ... | |
| selector = {} | |
| for definitions in a: | |
| #print("\t", len(definitions["definitions"])) | |
| for deff in definitions["definitions"]: | |
| key = deff["selector"]["kind"] | |
| if key not in selector: | |
| selector[key] = {} | |
| selector[key]["jsonPatches"] = {} | |
| selector[key]["selector"] = {} | |
| # deduplicate all patches under the same "path" | |
| for patch in deff["jsonPatches"]: | |
| ### Make easier to read by replacing spec/template/spec | |
| patch["path"] = patch["path"].replace("/spec/template/spec/","/s/t/s/") | |
| if patch["path"] not in selector[key]["jsonPatches"]: | |
| selector[key]["jsonPatches"][patch["path"]]=[] | |
| selector[key]["jsonPatches"][patch["path"]].append(patch) | |
| selector[key]["selector"] = deff["selector"] | |
| o = json.dumps(selector) | |
| print(o) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment