consul 配置信息迁移

一,使用快照命令snapshot

在原consul 容器中导出快照:

1,进入原有consul镜像中
在这里插入图片描述

2,执行 consul snapshot save --http-addr=http://localhost:8500 -token=password consul-state-v2.snap
在这里插入图片描述

3,然后退出当前容器,复制容器中的快照到宿主机
docker cp game-consul:/consul-state-v2.snap .

根据old镜像主密码生成consul容器:

4,宿主机新建一个目录比如config(方便挂载到consul容器的/consul/config目录),目录中新建acl.hcl 主配置文件(跟原有镜像的一样,特别是密码)

acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
tokens = {
master = "old镜像password一致"
}
}

5,编写docker-compose.yml

version: '3.0'

services:
  test-consul:
	image: consul:latest
	container_name: consul.test
	restart: always
	command: agent -server -bootstrap -ui -client=0.0.0.0
	volumes:
	  - /opt/config:/consul/config
	ports:
	  - 18500:8500
	  - 18300:8300
	  - 18600:8600/udp

在这里插入图片描述

在新生成consul容器中导入快照:

6,进入镜像consul.test执行导入快照命令
consul snapshot restore --http-addr=http://localhost:8500 -token=acl.hcl文件的密码 consul-state-v2.snap"
在这里插入图片描述
或者不进入镜像consul.test里面,在宿主机执行docker exec -it consul.test /bin/sh -c "consul snapshot restore --http-addr=http://localhost:8500 -token=acl.hcl文件的密码 consul-state-v2.snap" 是一样的导入方法

7,登录consul UI 使用acl.hcl文件的密码 登录 就会看到与原来的consul 配置(我这里主要对比了k/v,token,policies,roles 的设置信息)一样了

在这里插入图片描述

二,根据k/v,token,policies,roles 配置信息执行API接口

导出原有consul容器的k/v:

1,导出k/v
consul kv export --http-addr=http://localhost:8500 -token=acl.hcl密码 '' >kv.json

2,将容器中的kv.json 复制到宿主机
docker cp game-consul:/kv.json .

3,将方法一的4,5步骤执行,生成新的consul.test 容器

执行policies,roles,token 新建API:

4,进入consul.test容器,执行policies,roles,token 新建API
可以参考consul官网https://www.consul.io/api-docs/acl/tokens

4.1,创建policy.json

{
"Name": "test",
"Description": "Grants read access to all node information",
"Rules": "node_prefix \"\" { policy = \"write\" } service_prefix \"\" { policy = \"write\" } key_prefix \"\" { policy = \"write\" }",  
"Datacenters": ["dc1"]
}
curl --request PUT \
--data @payload.json \ http://127.0.0.1:8500/v1/acl/policy?token=old镜像password一致

在这里插入图片描述

4.2,创建role.json

{
"Name": "game",
"Description": "Showcases all input parameters",
"Policies": [
{
"ID": "ecf51e3f-8ff3-eec9-6aa6-2376f046eee8" #上面一步返回的ID
},
{
"Name": "test" #policy.json中的name
}
],
#以下配置看自己原有镜像是否有
"ServiceIdentities": [
{
"ServiceName": "web"
},
{
"ServiceName": "db",
"Datacenters": ["dc1"]
}
],
"NodeIdentities": [
{
"NodeName": "node-1",
"Datacenter": "dc2"
}
]
}
curl --request PUT \
    --data @role.json \
    http://127.0.0.1:8500/v1/acl/role?token=old镜像password一致

在这里插入图片描述
4.3,创建token.json

{
"Description": "Agent token for 'game'",
"Policies": [
{
"ID": "ecf51e3f-8ff3-eec9-6aa6-2376f046eee8" #上面一步返回的ID
},
{
"Name": "test"
}
],
"Local": false
}
curl --request PUT \
 --data @token.json \
http://127.0.0.1:8500/v1/acl/token?token=old镜像password一致

在这里插入图片描述

导入kv.json:

5,进入容器导入kv.json
consul kv import --http-addr=http://localhost:8500 -token=可以是client-token(上面图生成的SecretID)也可以是master-token @kv.json

6,登陆ip:18500 可以看到配置信息都已生成。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值