6

我正在尝试设置一个运行 pptp 客户端的 pod。

我想访问 VPN 后面的一台机器,这在本地运行良好,我的 docker 容器将记录添加到我的本地主机的路由表中,一切都很好。

ip route add x.x.x.x dev ppp0

只要 privileged 设置为 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"

这似乎用 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

我还尝试添加功能: 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

但这没有启用 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.

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

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

任何帮助是极大的赞赏!

4

0 回答 0