使用 openvpn 与集群内部服务通信

当我们访问集群内部服务,如postgresredistraefik Dashboardgitlab 时,如果直接暴露在公网中,会造成很大的安全隐患,而使用 Basic AuthWhiteList 等也稍微有些繁琐

此时在开发环境使用 VPN 连接集群是一个不错的选择

Q: 在集群中如何保证私有服务的安全性

<!--more-->

部署 openvpn

我们使用 docker-compose 部署 openvpn

准备 docker-compose.yaml 如下,我们同样把它置于网络 traefik-default 下。traefik-defaulttraefik 用以服务发现的所有应用的入口网关,详情可参考上一节 traefik 简易入门

关于配置文件,我维护在我的 github 仓库 shfshanyue/op-note:compose
version: '3'
services:
  openvpn:
    cap_add:
      - NET_ADMIN
    image: kylemanna/openvpn
    container_name: openvpn
    ports:
      - "1194:1194/udp"
    restart: always
    volumes:
      - ./openvpn-data/conf:/etc/openvpn

networks:
  default:
    external:
      name: traefik_default

初始化配置文件,注意替换掉你真实的公网IP,并且需要在 iptables 或者阿里云安全组中 1194 端口接收端口转发

$ docker run -v $(pwd)/openvpn-data/conf:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://<IP>

初始化证书,此时需要交互式确认密码

$ docker run -v $(pwd)/openvpn-data/conf:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

生成客户端证书

$ docker run -v $(pwd)/openvpn-data/conf:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full shanyue nopass

生成客户端配置文件 shanyue.ovpn,成功生成后需要把该文件传到本地。

$ docker run -v $(pwd)/openvpn-data/conf:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient shanyue > shanyue.ovpn

客户端连接

使用 rsync 把生成的配置文件传到本地环境

rsync -avhzP dev:/path/openvpn/shanyue.ovpn .

下载并使用工具 tunnelblick 打开生成的配置文件,点击连接 vpn,连接成功

访问内部集群

traefik 简易入门 中,我们在集群中配置了 whoami.docker.localhost 用以访问 whoami 服务。

查看 traefik 的网络 IP

$ docker network inspect traefik-default

        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },

找到 IP 后,我们通过 curl 查看服务是否可以正常访问,服务正常

$ curl -H Host:whoami.docker.localhost http://172.18.0.1
Hostname: eb290c85a325
IP: 127.0.0.1
IP: 172.18.0.2
RemoteAddr: 172.18.0.3:34012
GET / HTTP/1.1
Host: whoami.docker.localhost
User-Agent: curl/7.54.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 172.18.0.1
X-Forwarded-Host: whoami.docker.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 11e1f03c87ef
X-Real-Ip: 172.18.0.1

关于 Host

此时我们访问 whoami.docker.localhost 仍然是通过指定 Host 的方式

$ curl -H Host:whoami.docker.localhost http://172.18.0.1

那我们为什么不能直接 curl whoami.docker.localhost 来访问服务呢?

因为 DNS 无法解析到正确的地址

那我们使用 IP 地址又不是很方便,这时应该怎么办?

使用 dnsmasq 为内部集群搭建本地 DNS 服务器

本地 DNS 设置

使用 dnsmasq 为内部集群搭建本地 DNS 服务器,搭建好本地 DNS 服务器后,此时我们需要做的是在连接上openVPN时自动修改/etc/resolv.conf

这里有关于 openvpn 配置文件的官方文档: Openvpn How To

修改服务器中的配置文件 openvpn-data/conf/openvpn.conf,添加一行,如下所示。它会修改客户端的 DNS nameserver 地址为 172.18.0.1

# 在所有客户端设置 DNS 服务器为 172.18.0.1
push "dhcp-option DNS 172.18.0.1"

重启服务

docker-compose restart

客户端 DNS 测试

当客户端连接 openvpn 时,会自动修改 /etc/resolv.conf 文件,查看文件,修改成功

search openvpn
nameserver 172.18.0.1

此时可以直接 curl 该地址,连接成功

$ curl whoami.docker.localhost
Hostname: fe78f4e43924
IP: 127.0.0.1
IP: 172.18.0.2
RemoteAddr: 172.18.0.3:51600
GET / HTTP/1.1
Host: whoami.docker.localhost
User-Agent: curl/7.54.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 172.18.0.1
X-Forwarded-Host: whoami.docker.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 9d783174aca9
X-Real-Ip: 172.18.0.1
我是山月,可以加我微信 shanyue94 与我交流,备注交流。另外可以关注我的公众号【全栈成长之路】

如果你对全栈面试,前端工程化,graphql,devops,个人服务器运维以及微服务感兴趣的话,可以关注我

Image placeholder
Yaojj
未设置
  45人点赞

没有讨论,发表一下自己的看法吧

推荐文章
美团大规模微服务通信框架及治理体系OCTO核心组件开源

微服务通信框架及治理平台OCTO作为美团基础架构设施的重要组成部分,目前已广泛应用于公司技术线,稳定承载上万应用、日均支撑千亿级的调用。业务基于OCTO提供的标准化技术方案,能够轻松实现服务注册/发现

访问 laradock 服务器内部 http 服务器

在laradock中创建了一个http服务器之后,在workspace容器中,通curl127.0.0.1:9588,可以返回helloworld。但是在本地,通过浏览器访问127.0.0.1:958

RTSP-ONVIF协议安防视频监控流媒体服务解决方案EasyNVR在Windows重启时提示“进程意外终止”问题解析

什么是ONVIFOpenNetworkVideoInterfaceForum,开放型网络视频接口论坛,以公开、开放的原则共同制定开放性行业标准。是一个提供开放网络视频接口的论坛组织。ONVIF规范描述

安防摄像头RTSP/Onvif协议网页无插件直播视频流媒体服务器EasyNVR之按需直播如何有效利用最大上行带宽

介绍一般情况下,直播默认的播放方式是非按需直播,但很多情况下,不少用户会选择按需直播。按需直播能够减少带宽流量和服务器性能占用,最优的提高服务器的使用效率。下面我们来系统介绍下EasyNVR中按需直播

DeepFakes进化版DeepNude惊现!一键“脱衣“,火到宕机

大数据文摘出品作者:蒋宝尚、赵伟人工智能的黑暗面能有多黑?这边DeepFake带来的余震还没有被平息,本周,又一AI偏门应用爆出,一键直接“脱掉”女性的衣服!海外媒体Motherboard测试图片显然

一键“脱”衣应用DeepNude迅速下线,来看看它涉及的图像修复技术

大数据文摘出品来源:Github发布者:yuanxiaosc上周,又一AI偏门应用DeepNude爆出,一键直接“脱掉”女性的衣服,火爆全球。应用也很容易上手,只需要给它一张照片,即可借助神经网络技术

Onvif/RTSP海康大华网络安防摄像机网页无插件直播方案EasyNVR如何使用Excel将通道配置简单化?

进入移动互联网时代以来,企业微信公众号已成为除官网以外非常重要的宣传渠道,当3.2亿直播用户与9亿微信用户的势能累加,在微信上开启直播已成为越来越多企业的必然选择。EasyNVR核心在于摄像机的音视频

Go语言高级编程_2.5 内部机制

2.5内部机制 对于刚刚接触CGO用户来说,CGO的很多特性类似魔法。CGO特性主要是通过一个叫cgo的命令行工具来辅助输出Go和C之间的桥接代码。本节我们尝试从生成的代码分析Go语言和C语言函数直接

三个月5位老员工离职!苹果健康团队被曝内部分歧严重,员工扎堆儿离开

大数据文摘编辑部出品一年一度的秋季发布会召开前夕,苹果健康团队忽然被曝,大批老员工高调离职。据外媒CNBC报道,最近几个月,苹果的医疗保健团队紧张氛围愈加严重,这种氛围据内部人士称已经持续了一段时间,

MongoDB 存储引擎与内部原理

一、存储引擎(Storage)mongodb3.0默认存储引擎为MMAPV1,还有一个新引擎wiredTiger可选,或许可以提高一定的性能。mongodb中有多个databases,每个databa

全球数据泄露报告:内部威胁成数据安全最大风险!

一份最新报告显示,由现任和离职员工引起的内部威胁使公司容易遭受破坏,并使公司数据面临风险。Code42发布的《2019年全球数据泄露报告》还质疑,是否需要资助和部署正确的数据安全解决方案来阻止内部威胁

Redis的数据结构和内部编码

redis是单线程,一次只执行一条命令,那为什么可以这么快: 纯内存 非阻塞IO 避免线程切换和竞态消耗 在使用过程中要注意: 一次只运行一条命令 避免长(慢)命令,例如keys、flushall、f

PHP-FPM 与 Nginx 的通信机制总结

PHP-FPM介绍 CGI协议与FastCGI协议 每种动态语言(PHP,Python等)的代码文件需要通过对应的解析器才能被服务器识别,而CGI协议就是用来使解释器与服务器可以互相通信。PHP文件在

react-native中IOS的webview和js层通信 - UIWebview

前言在9012的最后一篇写到了在rn中安卓的webview的通信原理,而作为0202年的第一篇,继续讨论上年rn中webview通信剩下的部分。背景:对于webview,了解过的人都知道在ios端会存

使用kubei一步部署k8s高可用集群(包含docker安装、k8s组件安装、master初始化和加入nodes节点)

kubei(kubernetesinstaller)是一个go开发的用来部署kubernetes高可用集群的命令行工具,该工具可在Windows、Linux、Mac中运行kubei原理:通过ssh连接

Onvif/RTSP海康大华网络安防摄像机网页无插件直播方案EasyNVR中直播页面和视频列表页面的区别介绍

背景分析随着平安城市、智慧城市、雪亮工程、智能交通等各项建设的持续开展,安防逐渐得到普及,面对如此广阔的市场,对安防企业来说不仅仅是机遇更多的是挑战。现今大多数摄像头一直没能摆脱人工监控的传统监控方式

Onvif/RTSP海康大华网络安防摄像机网页无插件直播方案EasyNVR登陆用户名密码失效问题解决方案

背景分析随着互联网基础设施建设的发展,4G/5G/NB-IoT各种网络技术的大规模商用,视频随时随地可看、可控的诉求越来越多,互联网思维、架构和技术引入进传统监控行业里,成为新形势下全终端监控的基础需

vue引入swiper vue使用swiper vue脚手架使用swiper /引入js文件/引入css文件

vue引入swipervue使用swipervue脚手架使用swiper/引入js文件/引入css文件欢迎加入前端交流群来获取视频资料以及前端学习资料:749539640转载文章请注明出处! 如果只是

influxDB集群模式实践

influxDB数据库以其优秀的时序数据存储和查询能力,在处理和分析类似资源监控等时序数据方面得到了广泛的应用。而influxDB自带的各种特殊函数如求平均值、标准差、随机取数据,使数据分析变得十分方

美团点评Kubernetes集群管理实践

背景作为国内领先的生活服务平台,美团点评很多业务都具有非常显著、规律的“高峰”和“低谷”特征。尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长。这对集群中心的资源弹性和可用性有非常高的要求

PB级数据实时查询,滴滴Elasticsearch多集群架构实践

Elasticsearch是基于Lucene实现的分布式搜索引擎,提供了海量数据实时检索和分析能力。Elastic 公司开源的一系列产品组成的ElasticStack,可以为日志服务、搜索引擎、系统监

如何在生产环境中部署Kubernetes集群?

如果把kubernetes集群应用于生产环境中,需要做哪些准备?我们先要弄清楚一个词,什么是“生产就绪”?生产就绪,是我们经常听到的一个专业术语,大概意思是已经准备好并已处于即将生产的状态。但是,到底

运营商大规模数据集群治理的实践指南

写在开头的话Q: 军哥,你们运营商行业的大规模集群,都有啥特点啊?A: 我们集群主要是承载B域、信令和互联网日志等去标识化数据,简单的说,有三个特点:1)集群规模较大:数千节点规模,近百PB数据量,日

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

摘要:作为noSql中的kv数据库的王者,redis以其高性能,低时延,丰富的数据结构备受开发者青睐,但是由于redis在水平伸缩性上受限,如何做到能够水平扩容,同时对业务无侵入性是很多使用redis