文章

安装K8s服务(五)-安装OpenVPN

安装K8s服务(五)-安装OpenVPN

1.创建 OpenVPN

1
2
3
4
5
6
7
8
9
10
11
12
13
OVPN_DATA="ovpn-data"
docker volume create --name $OVPN_DATA
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn:2.4 ovpn_genconfig -u udp://172.21.8.14
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn:2.4 ovpn_initpki

#Start OpenVPN server process:
docker run --name openvpn --restart=always --dns 10.96.0.10 --dns 114.114.114.114 -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn:2.4

#Generate a client certificate without a passphrase:
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn:2.4 easyrsa build-client-full randy_ywxt nopass

#Retrieve the client configuration with embedded certificates:
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn:2.4 ovpn_getclient randy_ywxt > randy_ywxt.ovpn

2.配置 OpenVPN

randy_ywxt.ovpn 示例文件:

randy_ywxt.ovpn

1
2
3
4
5
6
7
8
9
10
11
#本地开发需要使用K8S中的dns时,需要在客户端配置文件xxx.ovpn中添加如下配置:
#使用k8s中的dns
dhcp-option DNS 10.96.0.10
#本地服务搜索DNS时需要添加默认DOMAIN后缀
dhcp-option DOMAIN default.svc.cluster.local

#注意:
#只有配置本地所有流量走OpenVPN才能使用K8S中的DNS:
redirect-gateway def1
#如果有服务不需要走OpenVPN就要配置:
route 39.98.185.90 net_gateway

3.OpenVPN 验证

1
2
3
#本地试验:
nslookup 服务名.default.svc.cluster.local
nslookup consul.default.svc.cluster.local 10.96.0.10

4.K8s宿主机上添加路由

1
2
3
4
5
6
7
8
9
#K8s集群每台机器上都需要手工添加路由,用于Consul检查本机服务健康状态时,将网络请求转移到 OpenVPN Docker容器中去,只有这样,K8s中的Consul才能正常访问本机IP!

#K8s中:
#删除上次的路由配置
ip route delete 192.168.255.0/24 via 10.244.1.0 dev flannel.1 onlink
#在非OpenVPN机器上需要配置如下路由信息
#192.168.255.0/24为OpenVPN的IP范围,10.244.2.0为OpenVPN所在网络
ip route add 192.168.255.0/24 via 10.244.2.0 dev flannel.1 onlink
ip route show
#非K8s单机版:
#192.168.255.0/24为OpenVPN为本机生成的IP范围,172.17.0.2为OpenVPN容器的IP
ip route add 192.168.255.0/24 via 172.17.0.2

5.路由问题

1
2
3
4
5
6
7
#在OpenVPN所在机器上有一条特殊路由,当pod重启后此路由不会更新,那么就会导致服务无法注册到Consul中!
192.168.255.0/24 via 10.244.1.244 dev cni0
#所以每次重启OpenVPN的pod后需要手工更新此路由信息
#10.244.1.244为OpenVPN老Pod的IP
#10.244.1.155为OpenVPN新Pod的IP
ip route delete 192.168.255.0/24 via 10.244.1.244 dev cni0
ip route add 192.168.255.0/24 via 10.244.1.155 dev cni0

6.本机Spring程序访问

当本机服务需要注册到K8s中的consul上时,首先需要连接OpenVPN,然后在Spring Cloud配置文件中添加 OpenVPN的IP范围信息。

1
2
3
4
#设置Consul回调服务IP
spring.cloud.inetutils.preferred-networks=192.168.255.*
#显示服务的/actuator/health详细信息,用于debug
management.endpoint.health.show-details=always

7.路由相关命令

1
2
3
4
5
6
7
8
9
10
11
#显示路由表的多种方法:
ip route show
ip route list
route -n
netstat -rn

#路由追踪:非常有用,可以查看ip路由访问路径,用于判断网络是否通畅!
traceroute

#网络监听
tcpdump -i eth0 -nn src host 172.21.8.16 and dst net 192.168

8.OpenVPN相关命令

1
2
3
4
5
6
7
#注销已有用户的证书:
docker exec -it OPENVPN-CONTAINER easyrsa revoke MY-USER-CN
docker exec -it OPENVPN-CONTAINER easyrsa gen-crl

#重启openvpn容器
docker exec -it 51d0b5375b97 easyrsa revoke cyg_yaohua
docker exec -it 51d0b5375b97 easyrsa gen-crl

9.Nginx udp 代理配置

下载 netcat 软件:https://eternallybored.org/misc/netcat/

netcat-win32-1.11.zip

1
2
3
4
5
6
7
8
#安装udp代理模块
yum install nginx-mod-stream

#Linux测试udp端口
nc -vuz 172.21.8.14 30000

#Windows测试udp端口
nc.exe -vuz 172.21.8.14 30000
本文由作者按照 CC BY 4.0 进行授权