OpenVPN istemcisinin bir kapsülün kapsayıcısı üzerinde nasıl çalışacağına bakıyorum, ne yaptığımı açıklıyorum, ancak tüm açıklamamı atlayabilir ve çözümünüzü doğrudan sunabilirsiniz, aşağıdaki tüm adımları değiştirmeyi umursamıyorum çalışırsa, kapsayıcımın hem harici hem de dahili ağın çalışacağı şekilde bir VPN (örneğin ExpressVPN) kullanmasını sağlamak istiyorum.
OpenVPN İstemcisi olan bir docker resmim var, komutla birlikte çalışıyor:
docker run --rm -it --cap-add=NET_ADMIN --device=/dev/net/tun my-app /bin/bash
Docker görüntüsünde bir giriş noktası bash betiği vardı:
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
İyi çalışıyor, ancak bir K8S Bölmesinde bir kapsayıcı olarak dağıttığımda kırılıyor, anlaşılabilir, K8S kümelerinin düğümler arasında dahili ağ iletişimine ihtiyacı var, bu yüzden VPN onu kırıyor ... nasıl başaracağım? Google araması sinir bozucuydu, çözümlerin hiçbiri işe yaramadı ve sadece birkaçı vardı, benzer bir sorunu olan bir tane var: OpenVPN-K8'lerde İstemci Bölmesi - Yerel ağa erişilemiyor Ama çok iyi anlamadım, lütfen yardım edin.
IPVanish iyi bilindiğinden, ovpn örneğini ele alalım, başka bir satıcı kullanıyorum ancak bir IPVanish hesabına erişimim vardı ve bu da çalışmıyor:
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
Golang veya yaml'de yanıtları kabul ediyorum, go-client kullanmama rağmen, pod oluşturma kodum önemli değil:
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{})
Ekleyebilirim NET_ADMIN
yetenek, ama aynı zamanda erişim izni vermem gerekiyor /dev/net/tun
cihaz ve sorun bu, ama bir yol bulsam bile, dahili ağı kıracak.
Birini güncelle
Docker'ımın giriş noktasına aşağıdaki iki satırı ekleyerek harici ağ çalışması yaptım:
# 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