Softether VPN 打通 Kubernetes 调试网络

简介: 通过 Softether VPN 打通 Kubernetes 调试网络,其中包括无拆分隧道限制的版本,可以自定义推送路由

介绍

Kubernetes 提供了多种对外暴露服务的方式

对于开发调试来说,使用 VPN 方式打通 本机开发环境 与 Cluster 之间的网络,会变得十分方便

SoftEther VPN

选用 SoftEther VPN 主要原因是

  • 支持通过单端口多种VPN接入方式,比如 SoftEtherVPN ClientOpenVPN
  • 有统一的账户管理、分组管理、权限控制、拆分隧道 等功能

部署介绍

  • 自定义部署:支持拆分隧道功能,需要下载客户端进行管理
  • 无配置快速部署:不支持拆分隧道功能,可以不连接远程管理,开箱即用

自定义部署

使用镜像 abyssviper/softethervpn ,该镜像编译基于 alpine  基础镜像编译,仅保留了 vpnserver, 非常轻量

并且去除了 拆分隧道 限制,可以向 VPN 客户端  推送定制路由

完整配置文件

创建发布配置文件  deployment-softethervpn.yaml

apiVersion: apps/v1
kind: Deployment
metadata:  name: vpn
  namespace: devops
spec:  selector:   matchLabels:     app: softether-vpnserver
  template:    metadata:      labels:        app: softether-vpnserver
    spec:      containers:      - name: softether-vpn-alpine
        image: abyssviper/softethervpn
        imagePullPolicy: IfNotPresent
        ports:        - containerPort: 5555          name: connect
          protocol: TCP
        livenessProbe:          tcpSocket:            port: 5555          initialDelaySeconds: 60          timeoutSeconds: 5          failureThreshold: 12        readinessProbe:          tcpSocket:            port: 5555        resources:          limits:            cpu: 1000m
            memory: 200Mi
          requests:            cpu: 500m
            memory: 100Mi
        volumeMounts:        - name: softether-vpn-storge
          subPath: softethervpn/vpn_server.config
          mountPath: /opt/vpnserver/vpn_server.config
        - name: softether-vpn-storge
          subPath: softethervpn/server_log
          mountPath: /opt/vpnserver/server_log
        - name: softether-vpn-storge
          subPath: softethervpn/packet_log
          mountPath: /opt/vpnserver/packet_log
        - name: softether-vpn-storge
          subPath: softethervpn/security_log
          mountPath: /opt/vpnserver/security_log
      volumes:      - name: softether-vpn-storge
        persistentVolumeClaim:          claimName: vpn-pvc
---apiVersion: v1
kind: Service
metadata:  name: vpn
  namespace: devops
spec:  selector:    app: softether-vpnserver
  type: NodePort
  ports:  - name: connect
    port: 5555    nodePort: 30003


创建PV, PVC配置文件  pvc-softethervpn.yaml  本文使用 NFS

apiVersion: v1
kind: PersistentVolume
metadata:  name: vpn-pv
spec:  capacity:    storage: 100Gi
  accessModes:  - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  nfs:    server: 192.168.7.40    path: /data/kubernetes
---apiVersion: v1
kind: PersistentVolumeClaim
metadata:  name: vpn-pvc
  namespace: devops
spec:  accessModes:    - ReadWriteMany
  resources:    requests:      storage: 1Gi


首先创建发布 PV, PVC 配置

kubectl apply -f pvc-softethervpn.yaml
kubectl apply -f deployment-softethervpn.yaml


管理

管理工具下载

通过 SoftEtherVPN 官方提供的 Manager 工具进行管理(下载地址

网络异常,图片无法展示
|


连接配置

配置服务端地址以及端口, 第一次连接需要手动设置管理密码

网络异常,图片无法展示
|


配置 SecureNAT 和 用户

连接成功后,通过 管理虚拟HUB(A) —》虚拟 NAT 和 虚拟 DHCP 服务器(V) —》启用 SecureNAT(E) —》SecureNAT配置(C)

网络异常,图片无法展示
|

  • 网关配置:如果填写,则本地VPN客户端流量默认路由走服务端,不需要推送路由;推荐使用本地网关+路由推送的方式
  • DNS配置:如果需要使用DNS解析(example: my-nginx.default.svc.cluster.local),需要配置集群内 CoreDNS 的 Service 地址
  • 路由推送:路由推送格式如图所示,IP网络地址/子网掩码/网关IP地址,网关IP地址填写 SecureNAT 配置的网关地址; 一般需要推送 Kubernetes Calico 网段 以及 SVC网段


在  管理虚拟HUB(A) 中,添加一个用户

网络异常,图片无法展示
|

配置OpenVPN

通过 VPN 管理工具,启用 OpenVPN 功能,生成 OpenVPN Client 配置样本文件

网络异常,图片无法展示
|

解压后,对 access_l3.ovpn 进行编辑

网络异常,图片无法展示
|

按照如下的配置进行修改,其中

  • remote: 上述 Kubernetes 发布 VPN 配置文件的 Service 地址
  • proto: 使用 TCP 作为连接协议,也可以使用 UDP,注意修改发布 VPN 时 YAML 配置文件的 端口映射配置
  • ca:  添加 ca标签,填写 VPN Server 配置中的 证书信息,证书信息获取方式见后面

```ini

dev tun
proto tcp
remote 192.168.7.200 30003cipher AES-128-CBC
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
client
verb 3auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
从如下配置中获取
-----END CERTIFICATE-----
</ca>


可以通过打开 编辑设置(D) 找到证书信息 或  加密与网络(E) 导出配置文件

网络异常,图片无法展示
|

网络异常,图片无法展示
|

连接

SoftEtherVPN Client

通过官网下载连接客户端,适用于 Windows / Linux;推荐 Linux 与 OSX 中使用 OpenVPN 的方式

  • 需要填写 主机名、端口号、虚拟HUB名、账号密码
  • SoftEtherVPN Client 支持同时连接多个VPNServer,只需要创建多个虚拟网络适配器即可

网络异常,图片无法展示
|

OpenVPN

下载Open VPN 客户端: Windows下载地址OSX下载地址

通过上述配置的配置文件即可进行连接

  • SoftEtherVPN Server 可以设置多个虚拟 HUB;对于OpenVPN来说,通过 用户名@HUB 的方式指定 HUB,直接使用用户名默认是 Default HUB
  • 例如:VPN HUB中的 test 用户,用户名为:test@VPN

网络异常,图片无法展示
|

验证

VPN连接成功后,可以进行 DNS 解析设置 以及 访问测试

网络异常,图片无法展示
|

ArgoCD 为例进行访问测试

网络异常,图片无法展示
|

数据持久化

  • 配置的持久化: 只需要持久化 vpn_server.config 即可
  • 日志的持久化: server_logpacket_logsecurity_log 三个文件夹持久化即可
  • 注意点: 需要注意的是,SoftEtherVPN Server 并不会在更改配置(添加用户,更改SecuretNAT等)后马上写入 vpn_server.config, 需要等待一段时间间隔才会落地到 vpn_server.config 文件

无配置快速部署

快速部署配置,选型的镜像为 siomiz/softethervpn, 该镜像同样有基于 alpine 版本,并且会启动容器时进行快速初始化,并创建可用的账户,非常方便;不过该镜像 不支持拆分隧道功能 ,无法推送定制路由

配置文件

创建发布配置文件  deployment-softethervpn.yaml

apiVersion: apps/v1
kind: Deployment
metadata:  name: vpn
  namespace: devops
spec:  selector:   matchLabels:     app: softether-vpnserver
  template:    metadata:      labels:        app: softether-vpnserver
    spec:      containers:      - name: softether-vpn-alpine
        image: siomiz/softethervpn
        imagePullPolicy: IfNotPresent
        ports:        - containerPort: 5555          name: connect
          protocol: TCP
        livenessProbe:          tcpSocket:            port: 5555          initialDelaySeconds: 60          timeoutSeconds: 5          failureThreshold: 12        readinessProbe:          tcpSocket:            port: 5555        resources:          limits:            cpu: 1000m
            memory: 200Mi
          requests:            cpu: 500m
            memory: 100Mi
---apiVersion: v1
kind: Service
metadata:  name: vpn
  namespace: devops
spec:  selector:    app: softether-vpnserver
  type: NodePort
  ports:  - name: connect
    port: 5555    nodePort: 30003


发布到 Kubernetes 中

kubectl apply -f deployment-softethervpn.yaml


查看连接信息

通过 logs 查看日志信息,从中查看默认生成的 SoftEtherVPN 账户 以及 OpenVPN 配置文件

kubectl logs -f-n devops vpn-b55fb8f4-jmxqh

如下,可以看出 用户名为 user9703 密码为 6758.1071.6532.2086.9735, OpenVPN 配置文件 等信息

  • OpenVPN 连接的 proto 以及 remote 信息需要更改为合适的,具体参照自定义部署
# [!!] This image requires --cap-add NET_ADMIN# ========================# user9703# 6758.1071.6532.2086.9735# ========================# Version 4.34 Build 9745   (English)dev tun
proto udp
remote _unregistered_vpn528125132.v4.softether.net 1194;http-proxy-retry
;http-proxy [proxy server] [proxy port]
cipher AES-128-CBC
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
client
verb 3auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
MIIDyjCCArKgAwIBAgIBADANBgkqhkiG9w0BAQsFADBkMRswGQYDVQQDDBJ2cG4t
YjU1ZmI4ZjQtam14cWgxGzAZBgNVBAoMEnZwbi1iNTVmYjhmNC1qbXhxaDEbMBkG
A1UECwwSdnBuLWI1NWZiOGY0LWpteHFoMQswCQYDVQQGEwJVUzAeFw0yMDA4MzEx
NjM2NDNaFw0zNzEyMzExNjM2NDNaMGQxGzAZBgNVBAMMEnZwbi1iNTVmYjhmNC1q
bXhxaDEbMBkGA1UECgwSdnBuLWI1NWZiOGY0LWpteHFoMRswGQYDVQQLDBJ2cG4t
YjU1ZmI4ZjQtam14cWgxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEA9j++0cYr7/1enukSjhzA37s01SWNazUcpgEjrclfikuzKiw0
M7bJGEjM8eJTUqvtIwJOkWVbrVfVTX1zV/yCenFns05WRSud2oEGyXWh0oa8aChv
w/S+KYdGub4sLkwDbIfGEhJQIXO3iQ9ecdjX+QFUlOL7PdCDyxc6wao2ZsjwCeLt
oamj8AOVH+w0E24OC0H3eiJ5YMKWo56JwH0spbwl/xONq1PfUuP494dG6C7sOMWS
DIW3OD3Bo071B9A5OGtE/fRUe56ZxsOZySlhaI1Yl8LZvZtSdkAhLByKYTjmKd7J
NbCWJUMiLCSIxRFAjxCDjmBrEBGkAtM4v+PC1wIDAQABo4GGMIGDMA8GA1UdEwEB
/wQFMAMBAf8wCwYDVR0PBAQDAgH2MGMGA1UdJQRcMFoGCCsGAQUFBwMBBggrBgEF
BQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDBQYIKwYBBQUHAwYGCCsG
AQUFBwMHBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQELBQADggEBALRC
1HKokh3KwpgKjznMwOR83bPu8QveHWr0GrlzseKxqHGJcTy0sxnkfk3mAu9v8m4a
UACj3H0opouRAqOTdbogCWXcERwLM1084wehyeUZKX9gfcWGbAPWVjcY1kC5KePs
IXWhEMC56wIGMFs4mS5vx7aNVE9k4Ssrnf7T3mkM/ACrN9dg+/H2CVxNr5FTQIwy
IGTC3AP5WLPVfEk5SByEOZqFRiBIDDhvKU4gT4cD2+FHLM6OM8Z09qGs8uq6KLr6
LfUjc/c5CI+FInmm1hLB3NZug17TEaVchXeQNs921wKOOWoCKucToOPXkwYE1V/c
zc7doXSaSkrKyIwCqCY=-----END CERTIFICATE-----
</ca>
;<cert>
;-----BEGIN CERTIFICATE-----
;
;-----END CERTIFICATE-----
;</cert>
;<key>
;-----BEGIN RSA PRIVATE KEY-----
;
;-----END RSA PRIVATE KEY-----
;</key>
# Creating user(s): user9703# [initial setup OK]


验证

SoftEtherVPN Client 连接后,访问验证

网络异常,图片无法展示
|

其他配置

该镜像提供了很多初始化配置信息,具体可以参考官方配置信息



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
23天前
|
运维 Kubernetes Cloud Native
探索Kubernetes的大二层网络:原理、优势与挑战🚀
在云原生领域,Kubernetes (K8s) 已经成为容器编排的事实标准☁️📦。为了支撑其灵活的服务发现和负载均衡🔍🔄,K8s采用了大二层网络的设计理念🕸️。本文将深入探讨大二层网络的工作原理、带来的好处✨,以及面临的挑战和解决方案❗🛠️。
探索Kubernetes的大二层网络:原理、优势与挑战🚀
|
5月前
|
网络协议
使用网络调试助手时,踩坑
使用网络调试助手时,踩坑
59 0
|
5月前
|
Kubernetes Cloud Native Docker
云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
140 0
|
17天前
|
JSON Kubernetes 网络架构
Kubernetes CNI 网络模型及常见开源组件
【4月更文挑战第13天】目前主流的容器网络模型是CoreOS 公司推出的 Container Network Interface(CNI)模型
|
2月前
|
Kubernetes Shell Docker
K8S核心插件-Flannel网络插件
K8S核心插件-Flannel网络插件
47 0
|
2月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
41 5
|
4月前
|
Linux 网络安全 芯片
linux系统中详解u-boot之网络移植与调试
linux系统中详解u-boot之网络移植与调试
203 0
|
5月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|centos7下离线化部署kubesphere-3.3.2---基于kubernetes-1.22.16(从网络插件开始记录)
云原生|kubernetes|centos7下离线化部署kubesphere-3.3.2---基于kubernetes-1.22.16(从网络插件开始记录)
83 0
|
7月前
|
网络虚拟化
MPLS VPN跨域C2 RR反射器方案(二)
MPLS VPN跨域C2 RR反射器方案
55 0

推荐镜像

更多