mirror of
https://github.com/kairos-io/entangle.git
synced 2025-05-07 07:47:10 +00:00
88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
package controllers
|
|
|
|
import (
|
|
entanglev1alpha1 "github.com/kairos-io/entangle/api/v1alpha1"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
v1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
)
|
|
|
|
func genDaemonsetOwner(ent entanglev1alpha1.VPN) []metav1.OwnerReference {
|
|
return []metav1.OwnerReference{
|
|
*metav1.NewControllerRef(&ent.ObjectMeta, schema.GroupVersionKind{
|
|
Group: entanglev1alpha1.GroupVersion.Group,
|
|
Version: entanglev1alpha1.GroupVersion.Version,
|
|
Kind: "VPN",
|
|
}),
|
|
}
|
|
}
|
|
|
|
func (r *VPNReconciler) genDaemonset(ent entanglev1alpha1.VPN) (*appsv1.DaemonSet, error) {
|
|
objMeta := metav1.ObjectMeta{
|
|
Name: ent.Name,
|
|
Namespace: ent.Namespace,
|
|
OwnerReferences: genDaemonsetOwner(ent),
|
|
}
|
|
|
|
privileged := true
|
|
serviceAccount := false
|
|
|
|
v := ent.Spec.Env
|
|
v = append(v, v1.EnvVar{
|
|
Name: "EDGEVPNTOKEN",
|
|
ValueFrom: &v1.EnvVarSource{
|
|
SecretKeyRef: &v1.SecretKeySelector{
|
|
Key: "network_token",
|
|
LocalObjectReference: v1.LocalObjectReference{
|
|
Name: *ent.Spec.SecretRef,
|
|
},
|
|
},
|
|
},
|
|
})
|
|
|
|
expose := v1.Container{
|
|
SecurityContext: &v1.SecurityContext{
|
|
Privileged: &privileged,
|
|
Capabilities: &v1.Capabilities{
|
|
Add: []v1.Capability{"NET_ADMIN"},
|
|
},
|
|
},
|
|
ImagePullPolicy: v1.PullAlways,
|
|
Name: "vpn",
|
|
Image: r.EntangleServiceImage,
|
|
Env: v,
|
|
Command: []string{"/usr/bin/edgevpn"},
|
|
VolumeMounts: []v1.VolumeMount{v1.VolumeMount{Name: "dev-net-tun", MountPath: "/dev/net/tun"}},
|
|
}
|
|
|
|
pod := v1.PodSpec{
|
|
Containers: []v1.Container{expose},
|
|
AutomountServiceAccountToken: &serviceAccount,
|
|
HostNetwork: true,
|
|
Volumes: []v1.Volume{v1.Volume{Name: "dev-net-tun", VolumeSource: v1.VolumeSource{HostPath: &v1.HostPathVolumeSource{Path: "/dev/net/tun"}}}},
|
|
}
|
|
|
|
deploymentLabels := getnDaemonsetLabel(ent.Name)
|
|
|
|
return &appsv1.DaemonSet{
|
|
ObjectMeta: objMeta,
|
|
|
|
Spec: appsv1.DaemonSetSpec{
|
|
Selector: &metav1.LabelSelector{MatchLabels: deploymentLabels},
|
|
Template: v1.PodTemplateSpec{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Labels: deploymentLabels,
|
|
},
|
|
Spec: pod,
|
|
},
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func getnDaemonsetLabel(s string) map[string]string {
|
|
return map[string]string{
|
|
"vpn.kairos.io": s,
|
|
}
|
|
}
|