Mă uit la cum să facă client OpenVPN lucra pe un pod containere, am explica ceea ce fac, dar puteți sări peste toate explicațiile mele și de a oferi soluții direct, nu-mi pasă înlocuirea tot mai jos, cu pași daca merge, vreau sa-mi fac container de a folosi un VPN (ExpressVPN de exemplu) într-un mod atât externe și interne de rețea funcționează.
Am un docher imagine care este un Client OpenVPN, funcționează găsi cu comanda:
docker run --rm -it --cap-add=NET_ADMIN --device=/dev/net/tun my-app /bin/bash
Docker imagine a avut un punct de intrare script bash:
curl https://vpnvendor/configurations.zip -o /app/configurations.zip
mkdir -p /app/open_vpn/ip_vanish/config
unzip /app/configurations.zip -d /app/open_vpn/config
printf "username\npassword\n" > /app/open_vpn/vpn-auth.conf
cd /app/open_vpn/config
openvpn --config ./config.ovpn --auth-user-pass /app/open_vpn/vpn-auth.conf
Aceasta funcționează bine, dar când am implementat ca un container într-un K8S Pod, se rupe, este de înțeles, K8S clustere nevoie de rețea internă de comunicare între noduri, deci VPN rupe ... cum fac să meargă? căutare Google a fost frustrant, niciuna dintre soluțiile de lucrat și acolo au fost doar câteva, nu este unul cu o problemă similară: OpenVPN Client-Pod pe K8s - rețea Locală de neatins Dar nu am inteles-o foarte bine, vă rugăm să ajute.
Deoarece IPVanish este bine cunoscut, să ia lor ovpn exemplu, eu folosesc alt furnizor, dar a avut acces la o IPVanish cont si nu merge nici:
client
dev tun
proto udp
remote lon-a52.ipvanish.com 443
resolv-retry infinite
nobind
persist-key
persist-tun
persist-remote-ip
ca ca.ipvanish.com.crt
verify-x509-name lon-a52.ipvanish.com name
auth-user-pass
comp-lzo
verb 3
auth SHA256
cipher AES-256-CBC
keysize 256
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-DSS-WITH-AES-256-CBC-SHA:TLS-RSA-WITH-AES-256-CBC-SHA
Accept răspunsuri în Golang sau YAML nu contează, deși eu folosesc go-client, codul meu pentru pod creație este:
podObj := &v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "mypod",
Namespace: "default",
},
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "worker1",
Image: "192.168.1.138:5000/myimage",
ImagePullPolicy: v1.PullAlways,
Stdin: true,
TTY: true,
/* Trying to simulate --device=/dev/net/tun I copied the below, but it does not work
// https://garunski.medium.com/openvpn-and-minikube-25511099f8de
VolumeMounts: []v1.VolumeMount{
{
ReadOnly: true,
Name: "dev-tun",
MountPath: "/dev/net/tun",
},
},*/
SecurityContext: &v1.SecurityContext{
// Taken from https://caveofcode.com/how-to-setup-a-vpn-connection-from-inside-a-pod-in-kubernetes/
Privileged: boolPtr(true),
Capabilities: &v1.Capabilities{
Add: []v1.Capability{
"NET_ADMIN",
},
},
},
},
},
NodeName: "worker-node01",
},
}
clientset.CoreV1().Pods("default").Create(context.Background(), podObj, metav1.CreateOptions{})
Nu pot adauga NET_ADMIN
capacitatea, dar trebuie, de asemenea, pentru a oferi acces la /dev/net/tun
dispozitiv și care e problema, dar chiar și Dacă am găsi o cale, se va rupe interne de rețea.
Update unul
Am făcut externe de rețele de muncă, prin adăugarea următoarelor două linii în docker este punctul de intrare:
# Taken from https://caveofcode.com/how-to-setup-a-vpn-connection-from-inside-a-pod-in-kubernetes/
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun