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
|