Establecimiento de connection PPTP en Kubernetes POD

Estoy tratando de configurar un pod ejecutando un cliente pptp.

Quiero acceder a una sola máquina detrás de la VPN y esto funciona bien localmente, mi contenedor acoplador agrega loggings a la tabla de routing de mi server local, todo está bien.

ip route add xxxx dev ppp0 

Solo puedo establecer una connection con el server VPN siempre que el privilegio se establezca en verdadero y el modo_networking se establezca en "host"

El entorno de producción es un poco diferente, el "localhost" sería uno de nuestros tres nodos operativos en nuestro cluster de Contenedores de Google.

No sé si la ruta agregada después de la connection establecida solo sería accesible por los contenedores que funcionan dentro de ese nodo … pero este es un problema posterior.

docker-compose.yml

 version: '2' services: pptp-tunnel: build: ./ image: eu.gcr.io/project/image environment: - VPN_SERVER=XXXX - VPN_USER=XXXX - VPN_PASSWORD=XXXX privileged: true network_mode: "host" 

Esto parece ser más difícil de lograr con kubernetes, aunque ambas opciones existen y se declaran como se puede ver en mi manifiesto. (hostNetwork, privilegiado)

Versión de Kubernetes

Versión 1.6.6

pptp-tunnel.yml

 apiVersion: v1 kind: Service metadata: name: pptp-tunnel namespace: default labels: spec: type: ClusterIP selector: app: pptp-tunnel ports: - name: pptp port: 1723 --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: pptp-tunnel namespace: default spec: replicas: 1 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate selector: matchLabels: app: pptp-tunnel template: metadata: labels: app: pptp-tunnel spec: hostNetwork: true containers: - name: pptp-tunnel env: - name: VPN_SERVER value: XXXX - name: VPN_USER value: XXXX - name: VPN_PASSWORD value: 'XXXXX' securityContext: privileged: true capabilities: add: ["NET_ADMIN"] image: eu.gcr.io/project/image imagePullPolicy: Always ports: - containerPort: 1723 

También intenté agregar capacidades: NET_ADMIN como puedes ver, sin efecto. Establecer el contenedor en modo privilegiado debe desactivar la security, no debería necesitar ambos.

Sería bueno no tener que configurar el contenedor en modo privilegiado y simplemente confiar en las capacidades para poner en marcha la interfaz ppp0 y agregar el routing.

Lo que sucede cuando el POD comienza es que el cliente pptp simplemente sigue enviando requestes y times de espera. (Esto también ocurre con mi contenedor docker localmente hasta que active "host" network_mode).

 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa43cd4b4> <pcomp> <accomp>] LCP: timeout sending Config-Requests 

Pero esto es sin la HostNetwork habilitada, si lo habilito, simplemente obtengo una única request enviada, y luego cuelgo el módem.

 using channel 42 Using interface ppp0 Connect: ppp0 <--> /dev/pts/0 sent [LCP ConfReq id=0x7 <asyncmap 0x0> <magic 0xcdae15b8> <pcomp> <accomp>] Script ?? finished (pid 59), status = 0x0 Script pptp XX.XX.XX.XX --nolaunchpppd finished (pid 60), status = 0x0 Script ?? finished (pid 67), status = 0x0 Modem hangup Connection terminated. 

Declarar el boolean de HostNetwork me permite ver múltiples interfaces compartidas desde el host, por lo que esto está funcionando pero de alguna manera no puedo establecer una connection, no puedo entender por qué.

Tal vez hay una mejor solución? Todavía necesitaré establecer una connection con el server VPN, pero agregar un logging de routing al host puede no ser la mejor solución.

¡Cualquier ayuda es muy apreciada!