Dívám se na to, jak udělat OpenVPN klienta pracovat na modulu kontejneru, jsem vysvětlit, co jsem to udělat, ale můžete přeskočit všechny moje vysvětlení a nabídnout své řešení přímo, nezajímá mě, nahrazující všechny níže se vaše kroky, pokud to funguje, chci, aby mé kontejner používat VPN (ExpressVPN například) tak, že vnější i vnitřní sítě funguje.
Mám docker image, že se OpenVPN Klient, funguje to najít pomocí příkazu:
docker run --rm -it --cap-add=NET_ADMIN --device=/dev/net/tun my-app /bin/bash
Docker obraz měl vstupní bod bash skript:
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
Funguje to v pohodě, ale když jsem se jej nasadit jako kontejner v K8S Pod, to se zlomí, to je pochopitelné, K8S klastry potřebují vnitřní síťová komunikace mezi uzly, tak VPN přestávky to ... jak to mám udělat, aby to fungovalo? vyhledávání Google byla frustrující, žádná z řešení fungovalo a bylo tam jen pár, je tu někdo s podobným problémem: OpenVPN-Client Modul na K8s - Místní síti nedostupný Ale nechápal to velmi dobře, prosím, pomozte.
Od IPVanish je dobře známé, pojďme se jejich ovpn příklad, já používám jiný prodejce, ale měl přístup k IPVanish účet, a to nefunguje, a to buď:
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
Přijímám odpovědi v Golang nebo YAML nezáleží na tom, i když jsem použít jet-klient, můj kód pro modul tvorba je:
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{})
Můžu přidat NET_ADMIN
schopnosti, ale potřebuji také, aby přístup k /dev/net/tun
zařízení, a to je problém, ale i Když jsem najít způsob, jak to bude poškodit vnitřní sítě.
Aktualizovat jeden
Udělal jsem externí sítě práce, přidáním následující dva řádky v mém docker je vstupní bod:
# 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