Teším sa na to, ako urobiť OpenVPN klienta práce na pod kontajner, som sa vysvetliť to, čo robím, ale môžete preskočiť všetky moje vysvetlenie a ponúknuť svoje riešenie priamo, nezaujíma ma, výmena všetkých nižšie s vaše kroky, ak to funguje, chcem, aby sa moje kontajner na použitie VPN (ExpressVPN napríklad) tak, aby vonkajšie aj vnútorné sietí funguje.
Mám docker obraz, ktorý je OpenVPN Klienta, funguje to nájsť pomocou príkazu:
docker run --rm -it --cap-add=NET_ADMIN --device=/dev/net/tun my-app /bin/bash
Na docker obrázok mal 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 pohode, ale keď som sa nasadiť ako kontajner v K8S Pod, to rozbije, je pochopiteľné, K8S zoskupení je potrebné vnútornej siete komunikácia medzi uzlami, takže VPN rozbije ju ... ako môžem, aby to fungovalo? Google vyhľadávanie bolo frustrujúce, žiadne riešenia pracovali a boli tam len pár, je tam jeden s podobný problém: OpenVPN Klient-Pod na K8s - Miestna sieť je nedostupná Ale nechápem to veľmi dobre, prosím pomôžte.
Od IPVanish je dobre známe, poďme ich ovpn príklad som pomocou iného predajcu, ale mali prí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
Súhlasím reakcie v Golang alebo YAML nezáleží na tom, aj keď som použiť go-klient, môj kód pod vzniku, 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ôžem pridať NET_ADMIN
spôsobilosti, ale potrebujem aj poskytnúť prístup k /dev/net/tun
zariadenie, a to je ten problém, ale aj Keď som sa nájsť spôsob, to bude poškodiť vnútorné sietí.
Aktualizácia jeden
Urobil som externých sietí práce, pridať nasledujúce dva riadky v mojom 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