OpenVPN Klient v Kubernetes Pod

0

Otázka

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

Nejlepší odpověď

2

Zde je minimální příklad modulu s OpenVPN klienta. Kdysi jsem kylemanna/openvpn jako serveru a generovat základní klient config. Jen jsem přidal dvě trasy generované config aby to pracovat. Viz níže:

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

díky za pomoc, tohle je řešení, které jsem hledal.
Melardev
0

Zkuste Tailscale. https://tailscale.com/ je To mnohem jednodušší. A mají cool zdarma-tier

2021-11-25 08:21:17

Díky za tip, nevěděl jsem o tom, ale to není přesně to, co jsem hledal
Melardev

Mám to běží v k8s clusteru. To je VPN brána do clusteru, tak vidím lusky na mém lokálním počítači, jako kdyby oni byli v místní síti. Je to 10 mn nainstalovat a prostě to funguje. Tam je openVPN srovnání zde : tailscale.com/kb/1170/tailscale-vs-openvpn
Pierre

V jiných jazycích

Tato stránka je v jiných jazycích

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