Kubernetes Bölmesinde OpenVPN İstemcisi

0

Soru

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
kubernetes networking openvpn vpn
2021-11-24 00:17:46
2

En iyi cevabı

2

İşte OpenVPN istemcisine sahip bir bölmenin minimal bir örneği. Kylemanna/openvpn'i sunucu olarak ve temel bir istemci yapılandırması oluşturmak için kullandım. Çalışmasını sağlamak için oluşturulan yapılandırmaya yalnızca iki yol ekledim. Aşağıya bakınız:

apiVersion: v1
kind: Pod
metadata:
  name: ovpn
  namespace: default
spec:
  containers:
    - name: ovpn
      image: debian:buster
      args:
        - bash
        - -c
        # install OpenVPN and curl; use curl in an endless loop to print external IP
        - apt update && apt install -y openvpn curl && cd /config && openvpn client & while sleep 5; do echo $(date; curl --silent ifconfig.me/ip); done
      volumeMounts:
        - mountPath: /dev/net/tun
          readOnly: true
          name: tun-device
        - mountPath: /config
          name: config
      securityContext:
        capabilities:
          add: ["NET_ADMIN"]
  volumes:
    - name: tun-device
      hostPath:
        path: /dev/net/tun
    - name: config
      secret:
        secretName: ovpn-config
---
apiVersion: v1
kind: Secret
metadata:
  name: ovpn-config
  namespace: default
stringData:
  client: |

    # A sample config generated by https://github.com/kylemanna/docker-openvpn server
    client
    nobind
    dev tun

    # Remote server params
    remote PASTE.SERVER.IP.HERE 1194 udp

    # Push all traffic through the VPN
    redirect-gateway def1
    # except these two k8s subnets
    route 10.43.0.0 255.255.0.0 net_gateway
    route 10.42.0.0 255.255.0.0 net_gateway

    # Below goes irrelevant TLS config
    remote-cert-tls server
    <key>
    -----BEGIN PRIVATE KEY-----
    -----END PRIVATE KEY-----
    </key>
    <cert>
    -----BEGIN CERTIFICATE-----
    -----END CERTIFICATE-----
    </cert>
    <ca>
    -----BEGIN CERTIFICATE-----
    -----END CERTIFICATE-----
    </ca>
    key-direction 1
    <tls-auth>
    #
    # 2048 bit OpenVPN static key
    #
    -----BEGIN OpenVPN Static key V1-----
    -----END OpenVPN Static key V1-----
    </tls-auth>
2021-11-24 18:42:15

yardımın için teşekkürler, aradığım çözüm buydu.
Melardev
0

Tailscale'i dene. https://tailscale.com Çok daha basit. Ve serin bir serbest kademeye sahipler

2021-11-25 08:21:17

Öneriniz için teşekkürler, bilmiyordum, ama tam olarak aradığım şey bu değildi
Melardev

Bir k8s kümesinde çalıştırıyorum. Kümeye bir VPN ağ geçidi yapar, böylece yerel makinemdeki bölmeleri yerel ağımdaymış gibi görürüm. Bu bir 10 mn kurulumu ve sadece ...işler. Burada bir OpenVPN karşılaştırması var : tailscale.com/kb/1170/tailscale-vs-openvpn
Pierre

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................