为了账号安全,请及时绑定邮箱和手机立即绑定

利用Docker容器创建简单易用的Open***服务

标签:
Docker


本文简要说明在Ubuntu Docker环境搭建Open***服务的步骤和需要注意和考虑的问题。在宿主机上直接搭建Open***可以参阅《CentOS6.7安装Open***服务端》,文章中的版本比较老,可以参考Open*** GitHub查看最新的搭建方法。

注:本文假设读者具备Linux网络及运维基础、路由交换、Docker、基本的英语等相关技能,如需获得帮助可在本文下方留言处留言。

环境与先决条件:

1.服务端:Ubuntu 14 LTS

2.服务端:Docker Server/Client version 1.13.1,API version:  1.26

3.服务端与客户端时间保持一致

4.客户端操作系统不作要求,Linux\Windows\Mac OSX都可以

服务端基本信息:

p_w_picpath

安装Docker服务端

安装Docker很简单,主要是要区分Ubuntu版本和认真参阅Docker文档,此处简单列下命令,一带而过:

# Install docker engine on Ubuntu 16 LTS and Ubuntu 14 LTS

sudo apt-get update

sudo apt-get install -y --no-install-recommends \

    apt-transport-https \

    ca-certificates \

    curl \

    software-properties-common

curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -

sudo apt-get install apt-transport-https ca-certificates

sudo apt-key adv \

                --keyserver hkp://ha.pool.sks-keyservers.net:80 \

                --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

# echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list

sudo add-apt-repository \

       "deb https://apt.dockerproject.org/repo/ \

       ubuntu-$(lsb_release -cs) \

       main"

apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D

sudo apt-get update -y

apt-cache policy docker-engine

apt-cache madison docker-engine

sudo apt-get upgrade -y

sudo reboot

    # For Ubuntu 14.04 LTS

    # sudo apt-get install linux-p_w_picpath-generic-lts-xenial linux-generic-lts-xenial

    # sudo reboot

    sudo apt-get install -y --no-install-recommends \

        linux-p_w_picpath-extra-$(uname -r) \

        linux-p_w_picpath-extra-virtual

    #

# use next cmd line to decrease time for install docker-engine

# wget -c https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.13.1-0~ubuntu-trusty_amd64.deb

# sudo apt-get install -y aufs-tools cgroup-lite libltdl7 libsystemd-journal0

# sudo dpkg -i docker-engine_1.13.1-0~ubuntu-trusty_amd64.deb

sudo apt-get install docker-engine -y

sudo sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"/g' /etc/default/grub

sudo update-grub

sudo service docker restart || sudo systemctl restart docker.service 

sudo service docker status || sudo systemctl status docker.service 

# sudo groupadd docker

sudo usermod -aG docker $USER

sudo groups $USER

# Install docker Client utilities

cd /tmp; wget -c https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.tar.gz

tar xzvf util-linux-2.29.tar.gz

cd util-linux-2.29

./configure --without-ncurses && make nsenter

sudo cp nsenter '/usr/local/bin'

cd

rm -rf /tmp/util-linux-2.29

wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;

echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc

使用的Docker镜像是来自https://store.docker.com/community/p_w_picpaths/kylemanna/open***,文档很清晰,可以参考它的github,https://github.com/kylemanna/docker-open***,更为详细的文档在https://github.com/kylemanna/docker-open***/tree/master/docs

部署Open***容器关键点

部署Open***容器很简单,只需要注意查看docker容器运行日志(docker logs <container id> | <container name>)和宿主机需要开启的内核参数。

临时调整内核参数可以使用下面三行命令:

sudo sysctl -w net.ipv4.conf.default.accept_source_route=1   

sudo sysctl -w net.ipv4.conf.all.rp_filter=0    

sudo sysctl -w net.ipv4.ip_forward=1

永久调整可以编辑 sysctl.conf以及include目录(/etc/sysctl.d/)下的自定义文件( End-users can use 60-*.conf and above, or use /etc/sysctl.conf directly),也可参考/etc/sysctl.d/README文件获得配置内核参数的最佳实践。

更为需要注意的是,最新版本的Docker增加了Linux Capabilities(可允许普通用户和进程执行一些root才能执行的特殊权限),需要设置正确的的cap参数,NET_RAW和NET_ADMIN,因为默认策略是Drop,在docker run时使用--cap-add NET_ADMIN --cap-add NET_RAW参数添加。具体的可以参考:https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities

服务端简要的步骤如下:

# References:

# https://store.docker.com/community/p_w_picpaths/kylemanna/open***

# https://github.com/kylemanna/docker-open***

# https://github.com/kylemanna/docker-open***/tree/master/docs

# Create Open*** container persistent storage using docker volume

O***_DATA="o***-data"

docker volume create --name $O***_DATA

# Generate Open*** Server configuration file

docker run -v $O***_DATA:/etc/open*** --rm kylemanna/open*** o***_genconfig -u tcp://<ip address or fqdn>

# Initialize Open*** Server PKI

docker run -v $O***_DATA:/etc/open*** --rm -it kylemanna/open*** o***_initpki 

# Adjust Linux host kernel configutration

sudo sysctl -w net.ipv4.conf.default.accept_source_route=1

sudo sysctl -w net.ipv4.conf.all.rp_filter=0

sudo sysctl -w net.ipv4.ip_forward=1 

# Create Open*** Server container

# https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities

# NET_RAW   Use RAW and PACKET sockets. Such as "iptables"

# NET_ADMIN Perform various network-related operations.

docker run -v $O***_DATA:/etc/open*** -d --name "open***" --hostname="open***" -v /etc/localtime:/etc/localtime -p 1194:1194 --cap-add NET_ADMIN --cap-add NET_RAW kylemanna/open***

# Gen Open*** client configuration file

docker run -v $O***_DATA:/etc/open*** --rm -it kylemanna/open*** easyrsa build-client-full dinggd nopass

docker run -v $O***_DATA:/etc/open*** --rm kylemanna/open*** o***_getclient dinggd > dinggd.o***

# Get Open*** Client List

docker run --rm -it -v $O***_DATA:/etc/open*** kylemanna/open*** o***_listclients

# Revoking Client Certificates

docker run --rm -it -v $O***_DATA:/etc/open*** kylemanna/open*** easyrsa revoke dinggd

docker run --rm -it -v $O***_DATA:/etc/open*** kylemanna/open*** easyrsa gen-crl

通过上述步骤后,会在当前目录下获得dinggd.o***配置文件(dinggd是Open***用户的用户名),可以直接用于Open***客户端配置文件。

这个镜像的优点是:

1.服务器证书以及客户端证书、key是放在Open***的客户端配置文件中的,大大提高了文件系统整洁性,一个用户安装Open***客户端后,只需要一个Open***客户端配置文件就可以完成整个Open***连接操作;

2.利用docker容器中的脚本&命令可以很方便的添加、删除客户端用户,对于Open***的管理者来说配置简单,使用方便;

这个镜像的缺点是:

1.默认不打印日志到数据存储(这个操作是可以配置的,如在服务端配置文件中添加log /var/log/open***/open***.log和log-append  /var/log/open***/open***.log)

2.另外一个缺点是默认生成的客户端的日志同样也是打印到syslog中,这个也是可以配置的,配置与上近同。

简要的排错技巧:

1.逐个排除法排除,先排除服务器端,包括服务器端的配置文件的合法性,留意docker 容器的启动日志中的报错

2.服务端需要正确设置内核参数,根据Docker Server版本的不同注意Linux cap的参数配置,参照本文上文提示

3.排除服务端问题后,检查路由器、防火墙和代理设置,NAT环境下认真设置正确的端口转发

4.排除客户端问题,认真查看系统日志或自定义的Open***客户端日志,检查路由器、防火墙和代理设置

5.注意客户端和服务端时间一致的问题

tag: Open***容器化,Open***故障排除,Open***常见问题

--end--

©著作权归作者所有:来自51CTO博客作者urey_pp的原创作品,如需转载,请注明出处,否则将追究法律责任

Open***容器化解决方案


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消