蓝鲸智云-堡垒机-新手入门¶
简单介绍¶
OpsAny Bastion是基于开源的bk-paas编写的SaaS,目前测试通过修改可以兼容蓝鲸社区版和企业版。但是当前由于bk-paas和社区版的paas不一致,有一些需要手工调整。
建议使用手工部署,可以了解和掌握堡垒机的部署和运行方式,自动化部署脚本准备中。
蓝鲸智云paas平台操作¶
创建堡垒机数据库¶
- 获取当前蓝鲸社区版的MySQL和Redis密码
[root@VM-16-3-centos install]# grep "BK_PAAS_MYSQL_PASSWORD" /data/install/bin/01-generate/paas.env
BK_PAAS_MYSQL_PASSWORD='82ZtsizPUf_F'
[root@VM-16-3-centos install]# grep "BK_PAAS_REDIS_PASSWORD" /data/install/bin/01-generate/paas.env
BK_PAAS_REDIS_PASSWORD=8_UV2Yv5dU3D
如果你没有修改过蓝鲸社区版的MySQL和Redis的密码,可以从以下文件中获取。OpsAny堡垒机需要使用MySQL和Redis,建议直接使用蓝鲸社区版自带的。
- 创建堡垒机使用的数据库,并进行授权
[root@VM-16-3-centos ~]# mysql --login-path=default-root
create database bastion DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all on bastion.* to paas@'%' identified by "上面获取到的paas的密码";
grant all on bastion.* to bastion@'%' identified by "OpsAny@2020";
社区版的Smart应用,上传部署的时候会自动创建数据库和授权,这个当前无法完全兼容,需要手工创建数据库bastion并进行授权,仅支持修改密码。数据库名和用户名不要修改。
堡垒机SAAS部署¶
需要先将堡垒机打包为蓝鲸Smart应用的包,然后就可以直接在开发者中心上传部署。
- Smart包打包方式
yum -y install git lrzsz wget
cd /opt && git clone https://gitee.com/chriscentos/opsany-bastion.git
wget -c http://bkopen-1252002024.file.myqcloud.com/common/py36_e.tgz -O /opt/py.tgz
wget -c https://raw.githubusercontent.com/shpdnkti/saas-builder/main/build.sh -O /tmp/build.sh
tar xf /opt/py.tgz -C /opt
chmod +x /tmp/build.sh
2.配置国内的pip源
mkdir -p ~/.pip/
cat > ~/.pip/pip.conf<<EOF
[global]
index-url = https://mirrors.cloud.tencent.com/pypi/simple
trusted-host = mirrors.cloud.tencent.com
EOF
3.开始进行打包
cd /opt/opsany-bastion/
bash /tmp/build.sh -s ./ -d /tmp/release --python3-home /opt/py36_e/bin/python3 --app-code bastion --app-version 1.0.0
4.将打包后的文件下载到本地。
cd /tmp/release
sz -y bastion_V1.0.0.tar.gz
- 在开发中心上传并部署OpsAny Bastion
打开蓝鲸【开发者中心】->【S-mart应用】->【上传部署新应用】->【上传文件】进行部署。
- 设置环境变量
#自定义修改配置文件
BKAPP_MYSQL_PASSWORD=82ZtsizPUf_F
BKAPP_MYSQL_HOST=192.168.1.1
BKAPP_MYSQL_PORT=3306
BKAPP_REDIS_HOST=192.168.1.1
BKAPP_REDIS_PORT=6379
BKAPP_REDIS_PASSWORD=8_UV2Yv5dU3D
# 获取pass平台的帐户密码
grep -E "BK_PAAS_ADMIN_USERNAME|BK_PAAS_ADMIN_PASSWORD" /data/install/bin/04-final/usermgr.env
# 配置hosts文件解析
echo "192.168.1.1 paas.bktencent.com" >>/etc/hosts
#执行脚本,讲环境变量写入到PaaS
cd /opt/opsany-bastion/install/
python add_env_blueking.py --username admin --password eoyTRFGOpo7p --paas_url http://paas.bktencent.com
目前Smart的配置优先获取环境变量,当环境变量获取不到时,使用默认配置,所以需要使用脚本写入环境变量。
2.打开蓝鲸【开发者中心】->【S-mart应用】->配置环境变量
生成堡垒机Websocket配置¶
- 准备websocket配置文件。
配置文件也存放在opsany-bastion项目中。
#从配置模板生成配置文件
cd /opt/opsany-bastion/install && cp install.config.example install.config
#设置为蓝鲸社区版的访问域名
DOMAIN_NAME=192.168.1.1
#设置本机的内网IP地址
LOCAL_IP=192.168.1.1
# 获取上面部署的堡垒机的APP_TOKEN,有时也叫做SECRET_KEY。因为要保证Websocket和Bastion的该值一致,才能通过验证。
BASTION_APP_TOKEN=xxx
#批量修改访问域名和IP地址
sed -i "s/demo.opsany.com/${DOMAIN_NAME}/g" install.config
sed -i "s/192.168.56.11/${LOCAL_IP}/g" install.config
sed -i "s#/data/bkce/opsany-bastion#/opt/opsany#g" install.config
#准备配置文件
source install.config
mkdir -p /opt/opsany/{conf,uploads}
/bin/cp conf/settings_production.py.websocket ${INSTALL_PATH}/conf/
/bin/cp conf/settings_production.py.websocket.init ${INSTALL_PATH}/conf/
# 输出变量内容,检查变量是否为空(默认不能为空)
echo ${INSTALL_PATH}
echo ${WEBSOCKET_GUACD_HOST}
echo ${REDIS_SERVER_IP}
echo ${REDIS_SERVER_PASSWORD}
echo ${MYSQL_SERVER_IP}
echo ${MYSQL_OPSANY_PASSWORD}
echo ${PAAS_PAAS_IP}
echo ${BASTION_APP_TOKEN}
# 给变量为空的重新附值
REDIS_SERVER_PASSWORD=8_UV2Yv5dU3D
MYSQL_OPSANY_PASSWORD=OpsAny@2020
# Websocket
sed -i "s/WEBSOCKET_GUACD_HOST/${WEBSOCKET_GUACD_HOST}/g" ${INSTALL_PATH}/conf/settings_production.py.websocket
sed -i "s/REDIS_SERVER_IP/${REDIS_SERVER_IP}/g" ${INSTALL_PATH}/conf/settings_production.py.websocket
sed -i "s/REDIS_SERVER_PASSWORD/${REDIS_SERVER_PASSWORD}/g" ${INSTALL_PATH}/conf/settings_production.py.websocket
sed -i "s/MYSQL_SERVER_IP/${MYSQL_SERVER_IP}/g" ${INSTALL_PATH}/conf/settings_production.py.websocket
sed -i "s/MYSQL_OPSANY_PASSWORD/${MYSQL_OPSANY_PASSWORD}/g" ${INSTALL_PATH}/conf/settings_production.py.websocket
sed -i "s/dev.opsany.cn/${PAAS_PAAS_IP}/g" ${INSTALL_PATH}/conf/settings_production.py.websocket.init
sed -i "s/73a828d2-0cc1-11ec-bea7-00163e105ceb/${BASTION_APP_TOKEN}/g" ${INSTALL_PATH}/conf/settings_production.py.websocket.init
# 手工检查和修改配置,需要修改APP
vim ${INSTALL_PATH}/conf/settings_production.py.websocket.init
BK_URL = os.getenv("BK_PAAS_HOST", "http://paas.bktencent.com/")
vim ${INSTALL_PATH}/conf/settings_production.py.websocket
# 打包配置文件
cd /opt/
tar zcf opsany.tar.gz opsany
# 将打包的配置文件分发到Websocket机器上
scp opsany.tar.gz 192.168.1.13:/opt/
部署堡垒机Websocket容器¶
解压Websocket配置文件
cd /opt/
tar xf opsany.tar.gz
安装docker软件
yum install -y docker
启动docker
systemctl start docker
加入开机自启动
systemctl enable docker
配置镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1v0q5mvy.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
systemctl status docker
拉取websocket容器镜像
docker pull registry.cn-beijing.aliyuncs.com/opsany/opsany-paas-websocket:v3.2.9
启动Websocket容器
INSTALL_PATH=/opt/opsany
docker run -d --restart=always --name opsany-paas-websocket \
-p 8004:8004 -v ${INSTALL_PATH}/logs:/opt/opsany/logs \
-v ${INSTALL_PATH}/uploads:/opt/opsany/uploads \
-v ${INSTALL_PATH}/conf/settings_production.py.websocket:/opt/opsany/websocket/config/prod.py \
-v ${INSTALL_PATH}/conf/settings_production.py.websocket.init:/opt/opsany/websocket/config/__init__.py \
-v /etc/localtime:/etc/localtime:ro \
registry.cn-beijing.aliyuncs.com/opsany/opsany-paas-websocket:v3.2.9
进入到Websocket容器里增加hosts
docker exec -it opsany-paas-websocket /bin/sh
echo "192.168.1.1 paas.bktencent.com" >>/etc/hosts
对接堡垒机Websocket容器¶
进入到bastion容器里增加hosts
docker exec -it bastion-1646961998 /bin/sh
echo "192.168.1.1 paas.bktencent.com" >>/etc/hosts
修改蓝鲸PaaS的Openresty配置,增加以下内容。
yum -y install vim
vim /etc/consul-template/templates/paas.conf
upstream OPEN_PAAS_CONSOLE {
server 192.168.1.13:8004;
}
# CONTROL WebSocket
location /ws/bastion/ {
proxy_pass http://OPEN_PAAS_CONSOLE;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
systemctl reload consul-template
vim /usr/local/openresty/nginx/conf/conf.d/paas.conf
/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx -s reload
对接堡垒机的iam权限¶
进入到bastion容器里增加iam权限
docker exec -it bastion-1646961998 /bin/sh
cd /data/app/code/bastion/utils/
python init_iam_system.py
# 初始化访问主机权限
vi init_action.py
res.json()
add_action_to_system()
python init_action.py
# 初始化其他权限
vi init_action_v2.py
res.json()
add_action_to_system()
python init_action_v2.py
# 初始化访问网络代理权限
vi init_action_v3.py
res.json()
add_action_to_system()
python init_action_v3.py
对接堡垒机的开发api权限¶
-
ESB组件的添加:
-
修改ESB配置文件:
# 修改DOMAIN
cd /opt/opsany-bastion/
将 install/bastion_esb/bastion/toolkit/configs.py line10处,修改成正确的DOMAIN
host = SmartHost(
# 需要填入系统正式环境的域名地址
host_prod='paas.bktencent.com',
)
- 将组件移动至目标路径:
# 在项目的install/bastion_esb/下有一个bastion目录
cd /opt/opsany-bastion/install/bastion_esb/
PAAS_INSTALL_PATH=/data/bkce/open_paas
cp -rf bastion/ ${PAAS_INSTALL_PATH}/esb/components/generic/apis/
- 页面创建系统,添加组件:
打开:http://{DOMAIN}/esb/manager/system/list/,点击添加系统
系统名称:BASTION
系统标签:OpsAny堡垒机
文档分类:默认分类
打开:http://{DOMAIN}/esb/manager/channel/list/,点击添加通道
通道名称:获取堡垒机登录用Token
通道路径:/bastion/get_cache_token/
所属系统:[BASTION]OpsAny堡垒机
对应组件代号:generic.bastion.get_cache_token
API类型:执行API
- 创建ESB组件文档,并重启ESB:
# 创建组件文档
source /root/.bkrc
source $CTRL_DIR/functions
export BK_ENV=production
export BK_FILE_PATH=/data/bkce/open_paas/cert/saas_priv.txt
export PAAS_LOGGING_DIR=/data/bkce/logs/open_paas
workon open_paas-esb
python manage.py sync_api_docs
# 重启ESB
systemctl restart bk-paas-esb.service
出现的问题与解决方法¶
问题1: 堡垒机ssh登录一直点击无响应
docker exec -it bastion-1646961998 /bin/sh
vi /data/app/code/config/prod.py
# 配置redis地址和密码
sed -i "s#172.16.16.3#192.168.1.1#g" /data/app/code/config/prod.py
sed -i "s#DRwsgTKXUsEY#8_UV2Yv5dU3D#g" /data/app/code/config/prod.py
# 配置数据库的密码
'PASSWORD': os.getenv("BKAPP_MYSQL_PASSWORD", "OpsAny@2020"), # 数据库密码
获取redis密码的方式
grep "BK_PAAS_REDIS_PASSWORD" /data/install/bin/01-generate/paas.env
退出并重启容器
docker restart bastion-1646961998
docker exec -it bastion-1646961998 /bin/sh
echo "192.168.1.120 paas.bktencent.com" >>/etc/hosts
问题2: 堡垒机登录以后一直下划线闪烁
解决方法
docker exec -it opsany-paas-websocket /bin/sh
# vi /opt/opsany/websocket/bastion/models.py
## 注释一下代码即可
# icon_url = models.CharField(max_length=500, default="", verbose_name="............")
docker restart opsany-paas-websocket
docker exec -it opsany-paas-websocket /bin/sh
echo "192.168.1.1 paas.bktencent.com" >>/etc/hosts
堡垒机测试¶
恭喜您,完成了部署操作,这是一个经典的蓝鲸SAAS的手工部署流程。