OpenVPN Klienta v Kubernetes Pod

0

Otázka

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

Najlepšiu odpoveď

2

Tu je minimálnym príklad podu s OpenVPN klienta. Použil som kylemanna/openvpn ako server a vygenerovať základné klienta config. Len som pridal dva trasy vygenerovaný config, aby to fungovať. Pozrite sa nižšie:

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

vďaka za pomoc, je to riešenie, ktoré som hľadal.
Melardev
0

Skúste Tailscale. https://tailscale.com/ je To oveľa jednoduchšie. A majú cool free-tier

2021-11-25 08:21:17

Vďaka za radu, nevedela som, o, ale to nie je presne to, čo som hľadal
Melardev

Som si to beží v k8s klastra. To je brána VPN na klastra tak vidím struky na môj lokálny stroj, ako keby boli na mojej lokálnej sieti. To je 10 mn inštaláciu a je len ...funguje. Tam je openVPN porovnaní tu : tailscale.com/kb/1170/tailscale-vs-openvpn
Pierre

V iných jazykoch

Táto stránka je v iných jazykoch

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