在Kubernetes POD中建立PPTP连接

Jaz*_*Cat 6 docker pptp kubernetes

我正在尝试设置一个运行pptp-client的pod.

我想访问VPN后面的一台机器,这在本地工作正常,我的docker容器将记录添加到我的localhost的路由表,一切都很好.

ip route add x.x.x.x dev ppp0
Run Code Online (Sandbox Code Playgroud)

只要特权设置为true并且network_mode设置为"host",我就只能建立到VPN服务器的连接

生产环境略有不同,"localhost"将是我们的Google Container集群中的三个操作节点之一.

我不知道在建立的连接之后添加的路由是否只能由在该节点内运行的容器访问..但这是后来的问题.

泊坞窗,compose.yml

version: '2'
services:
  pptp-tunnel:
    build: ./
    image: eu.gcr.io/project/image
    environment:
     - VPN_SERVER=X.X.X.X
     - VPN_USER=XXXX
     - VPN_PASSWORD=XXXX
    privileged: true
    network_mode: "host"
Run Code Online (Sandbox Code Playgroud)

使用kubernetes似乎更难以实现,尽管这两个选项都存在并且在我的清单中可以看到.(hostNetwork,特权)

Kubernetes版本

版本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: X.X.X.X
        - 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
Run Code Online (Sandbox Code Playgroud)

我也尝试过添加功能:你可以看到NET_ADMIN,没有效果.将容器设置为特权模式应禁用安全性,我不应该同时使用这两者.

很高兴不必将容器设置为特权模式,只需依靠功能来启动ppp0接口并添加路由.

POD启动时会发生什么,pptp-client只是继续发送请求和超时.(这在我的docker容器本地发生,直到我打开network_mode"host".)

sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa43cd4b4> <pcomp> <accomp>]
LCP: timeout sending Config-Requests
Run Code Online (Sandbox Code Playgroud)

但这没有启用hostNetwork,如果我启用它,我只需要发送一个请求,然后调制解调器挂起.

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.
Run Code Online (Sandbox Code Playgroud)

声明HostNetwork布尔让我看到从主机共享多个接口,所以这是工作但不知何故我无法建立连接,我不知道为什么.

也许有更好的解决方案?我仍然需要建立与VPN服务器的连接,但向主机添加路由记录可能不是最佳解决方案.

任何帮助是极大的赞赏!