@@ -29,6 +29,18 @@ func (scope *kmcScope) reconcileIngress(ctx context.Context, kmc *km.Cluster) er
2929 return fmt .Errorf ("failed to patch haproxy configmap for ingress: %w" , err )
3030 }
3131
32+ configMap , err = scope .generateKonnectivityIngressConfigMap (kmc )
33+ if err != nil {
34+ return fmt .Errorf ("failed to generate ingress manifests configmap: %w" , err )
35+ }
36+ _ = kcontrollerutil .SetExternalOwnerReference (kmc , & configMap , scope .client .Scheme (), scope .externalOwner )
37+
38+ err = scope .client .Patch (ctx , & configMap , client .Apply , patchOpts ... )
39+
40+ if err != nil {
41+ return fmt .Errorf ("failed to patch haproxy configmap for ingress: %w" , err )
42+ }
43+
3244 var foundManifest bool
3345 for _ , manifest := range kmc .Spec .Manifests {
3446 if manifest .Name == kmc .GetIngressManifestsConfigMapName () {
@@ -46,6 +58,15 @@ func (scope *kmcScope) reconcileIngress(ctx context.Context, kmc *km.Cluster) er
4658 },
4759 },
4860 },
61+ }, corev1.Volume {
62+ Name : "konnectivity" ,
63+ VolumeSource : corev1.VolumeSource {
64+ ConfigMap : & corev1.ConfigMapVolumeSource {
65+ LocalObjectReference : corev1.LocalObjectReference {
66+ Name : kmc .GetIngressManifestsConfigMapName () + "-konnectivity" ,
67+ },
68+ },
69+ },
4970 })
5071 }
5172
@@ -173,6 +194,115 @@ spec:
173194 return configMap , nil
174195}
175196
197+ func (scope * kmcScope ) generateKonnectivityIngressConfigMap (kmc * km.Cluster ) (corev1.ConfigMap , error ) {
198+ configMap := corev1.ConfigMap {
199+ TypeMeta : metav1.TypeMeta {
200+ Kind : "ConfigMap" ,
201+ APIVersion : "v1" ,
202+ },
203+ ObjectMeta : metav1.ObjectMeta {
204+ Name : kmc .GetIngressManifestsConfigMapName () + "-konnectivity" ,
205+ Namespace : kmc .Namespace ,
206+ Annotations : kcontrollerutil .AnnotationsForK0smotronCluster (kmc ),
207+ },
208+ Data : map [string ]string {
209+ "konnectivity-agent.yaml" : fmt .Sprintf (`apiVersion: rbac.authorization.k8s.io/v1
210+ kind: ClusterRoleBinding
211+ metadata:
212+ name: system:konnectivity-server
213+ labels:
214+ kubernetes.io/cluster-service: "true"
215+ roleRef:
216+ apiGroup: rbac.authorization.k8s.io
217+ kind: ClusterRole
218+ name: system:auth-delegator
219+ subjects:
220+ - apiGroup: rbac.authorization.k8s.io
221+ kind: User
222+ name: system:konnectivity-server
223+ ---
224+ apiVersion: v1
225+ kind: ServiceAccount
226+ metadata:
227+ name: konnectivity-agent
228+ namespace: kube-system
229+ labels:
230+ kubernetes.io/cluster-service: "true"
231+ ---
232+ apiVersion: apps/v1
233+ kind: DaemonSet
234+ metadata:
235+ labels:
236+ k8s-app: konnectivity-agent
237+ namespace: kube-system
238+ name: konnectivity-agent
239+ spec:
240+ selector:
241+ matchLabels:
242+ k8s-app: konnectivity-agent
243+ template:
244+ metadata:
245+ labels:
246+ k8s-app: konnectivity-agent
247+ annotations:
248+ prometheus.io/scrape: 'true'
249+ prometheus.io/port: '8093'
250+ spec:
251+ securityContext:
252+ runAsNonRoot: true
253+ supplementalGroups: [0]
254+ nodeSelector:
255+ kubernetes.io/os: linux
256+ priorityClassName: system-cluster-critical
257+ tolerations:
258+ - operator: Exists
259+ containers:
260+ - image: quay.io/k0sproject/apiserver-network-proxy-agent:v0.33.0
261+ imagePullPolicy: IfNotPresent
262+ name: konnectivity-agent
263+ command: ["/proxy-agent"]
264+ env:
265+ - name: NODE_IP
266+ valueFrom:
267+ fieldRef:
268+ fieldPath: status.hostIP
269+ args:
270+ - --logtostderr=true
271+ - --ca-cert=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
272+ - --proxy-server-host=%s
273+ - --proxy-server-port=%d
274+ - --service-account-token-path=/var/run/secrets/tokens/konnectivity-agent-token
275+ - --agent-identifiers=host=$(NODE_IP)
276+ - --agent-id=$(NODE_IP)
277+ volumeMounts:
278+ - mountPath: /var/run/secrets/tokens
279+ name: konnectivity-agent-token
280+ livenessProbe:
281+ httpGet:
282+ port: 8093
283+ path: /healthz
284+ initialDelaySeconds: 15
285+ timeoutSeconds: 15
286+ readinessProbe:
287+ httpGet:
288+ port: 8093
289+ path: /readyz
290+ initialDelaySeconds: 15
291+ timeoutSeconds: 15
292+ serviceAccountName: konnectivity-agent
293+ volumes:
294+ - name: konnectivity-agent-token
295+ projected:
296+ sources:
297+ - serviceAccountToken:
298+ path: konnectivity-agent-token
299+ audience: system:konnectivity-server` , kmc .Spec .Ingress .KonnectivityHost , kmc .Spec .Ingress .Port ),
300+ },
301+ }
302+
303+ return configMap , nil
304+ }
305+
176306func (scope * kmcScope ) generateIngress (kmc * km.Cluster ) v1.Ingress {
177307 annotations := kcontrollerutil .AnnotationsForK0smotronCluster (kmc )
178308 if annotations == nil {
0 commit comments