L B T

记 录 过 去 的 经 验

环境信息

  • elasticsearch 8.8.2

安全相关配置管理

更新 transport ssl 证书

在启用安全配置(xpack.security.enabled: true)的情况下,Elasticsearch 集群节点间通信(transport 默认端口 9300)必须使用 TLS (xpack.security.transport.ssl.enabled: true)。默认使用的证书文件位于 /etc/elasticsearch/certs/。若需要更新或者重新生成此证书,可以参考以下步骤

  1. 生成 CA,如果已有 CA 可跳过此步骤。此命令会生成一个 CA 证书文件,默认名称为 /usr/share/elasticsearch/elastic-stack-ca.p12。根据提示使用 证书密码,如果不配置密码,使直接Enter
    elasticsearch-certutil ca
  2. 为 Elasticsearch 生成 TLS 证书,证书使用 CA 进行签名,根据提示输入 CA 证书密码等信息,如果无密码,使直接Enter 键。默认生成文件 /usr/share/elasticsearch/elastic-certificates.p12
    elasticsearch-certutil cert --ca elastic-stack-ca.p12
  3. 执行以下命令,将 CA 证书密码和服务器证书密码写入 /etc/elasticsearch/elasticsearch.keystore
    # elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
    Setting xpack.security.transport.ssl.keystore.secure_password already exists. Overwrite? [y/N]y
    Enter value for xpack.security.transport.ssl.keystore.secure_password:

    # elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
    Setting xpack.security.transport.ssl.truststore.secure_password already exists. Overwrite? [y/N]y
    Enter value for xpack.security.transport.ssl.truststore.secure_password:
  4. 将上面生成的 CA 证书服务器证书 以及 证书密码文件 拷贝到 Elasticsearch 集群的所有节点的 /etc/elasticsearch/certs/ 下,并修改权限
    chmod 660 /etc/elasticsearch/certs/*
    chown root:elasticsearch /etc/elasticsearch/certs/*
  5. 重启 Elasticsearch 集群的所有节点
    systemctl restart elasticsearch
  6. 检查集群状态
    # curl --user newadmin:password localhost:9200/_cluster/health?pretty
    {
    "cluster_name" : "es-cluster1",
    "status" : "green",
    "timed_out" : false,
    "number_of_nodes" : 3,
    "number_of_data_nodes" : 3,
    "active_primary_shards" : 18,
    "active_shards" : 37,
    "relocating_shards" : 0,
    "initializing_shards" : 0,
    "unassigned_shards" : 0,
    "delayed_unassigned_shards" : 0,
    "number_of_pending_tasks" : 0,
    "number_of_in_flight_fetch" : 0,
    "task_max_waiting_in_queue_millis" : 0,
    "active_shards_percent_as_number" : 100.0
    }

重置用户密码

可以使用以下命令,创建新的超级管理员账号。首先要 确保集群状态正常

elasticsearch-users useradd newadmin -p password -r superuser

接下来使用刚刚创建的账号密码对原有的账号(如 elastic) 进行密码重置

# curl -s --user newadmin:password -XPUT "http://localhost:9200/_security/user/elastic/_password?pretty" -H 'Content-Type: application/json' -d '{
"password": "password1"
}'


密码重置成功后,尝试使用新账号密码访问集群

# curl --user elastic:password1 localhost:9200/_cluster/health?pretty
{
"cluster_name" : "es-cluster1",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 19,
"active_shards" : 39,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
阅读全文 »

530 Login incorrect

报错信息: 登录时报错 530 Login incorrect
错误原因

/etc/pam.d/vsftpd
auth  required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed 

默认情况下,/etc/vsftpd/ftpusers里面的用户是被拒绝登录的,确保要登录的用户不在此文件中

/etc/pam.d/vsftpd
auth       required    pam_shells.so  

此配置指定,只允许登录shell为/etc/shells中的shell的用户登录
如果用户shell为/sbin/nologin,则不允许登录,可改为pam_nologin.so

阅读全文 »

环境信息

  • Centos 7
  • Vsftpd 3.0.2

vsftpd虚拟用户通过映射系统用户权限的方式,使虚拟用户具有和本地系统用户一样的权限,或者灵活的控制虚拟用户的权限(不和本地用户权限相同,不能高于本地权限),达到访问权限的灵活控制,同时防止大批vsftpd用户添加到系统账号库中,使系统用户管理变动臃肿。

阅读全文 »

场景

远程登录 windows 失败,报错:

由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开,请跟服务器管理员联系

解决方法

  1. 打开 cmd,执行以下命令远程登录无法登录的 Windows 主机
    mstsc /v:1.1.1.1 /admin
  2. 打开注册表


3. 找到路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\GracePeriod.如果超过120天后RCM下面会有一个GracePeriod,先备份这项注册表,再删除除了默认的的注册表项。

  1. 重启电脑后生效.

环境信息

  • Centos 7
  • predixy-1.0.5

安装

下载地址, clone或下载最新的版本或指定版本下载后解压

yum install libstdc++-static -y
cd predixy-1.0.5
make
cp src/predixy /usr/local/bin/

需要依赖 libstdc++-static, 否则make会报错:
/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make[1]: *** [predixy] Error 1
make[1]: Leaving directory `/root/predixy-1.0.5/src’
make: *** [default] Error 2

配置文件说明

  • predixy.conf,整体配置文件,会引用下面的配置文件

  • cluster.conf,用于Redis Cluster时,配置后端redis信息

  • sentinel.conf,用于Redis Sentinel时,配置后端redis信息

  • auth.conf,访问权限控制配置,可以定义多个验证密码,可每个密码指定读、写、管理权限,以及定义可访问的健空间

  • dc.conf,多数据中心支持,可以定义读写分离规则,读流量权重分配

  • latency.conf, 延迟监控规则定义,可以指定需要监控的命令以及延时时间间隔

启动

predixy /predixy/conf/predixy.conf

使用默认的配置文件predixy.conf, predixy将监听地址0.0.0.0:7617,后端的redis是Redis Cluster 127.0.0.1:6379

环境信息

  • Mysql 5.7 之后版本支持多主一从

配置步骤

分别在Master_1和Master_2上导出需要同步的数据库

分别在Master_1和Master_2上执行以下命令,导出需要同步的数据库备份

Master_1
mysqldump -uroot -p123456 --master-data=2 --single-transaction --databases  --add-drop-database  db1  > db1.sql
Master_2
mysqldump -uroot -p123456 --master-data=2 --single-transaction --databases  --add-drop-database  db2  > db2.sql

备份完成后,将备份数据拷贝到从库服务器上面

阅读全文 »

Mysql 主从同步基本原理

复制的基本过程如下:

  1. Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

  2. Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程,根据请求信息,读取指定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;

  3. Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;

  4. Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容,获得在Master端真实执行的那些可执行的内容,并在自身执行。

双主情况下,禁止同时写入,建议还是按照主从的方式工作,防止数据冲突。双主场景下,主要是切换主备方便。

阅读全文 »

模板中需要循环中循环,{% for i in alist %},假如i是个元组或列表,需要继续循环:

{% for i in alist %}
{% with temp=I %}
{% for k in temp %}

{% endfor %}
{% endwith %}
{%endfor%}

或使用如下方式,data = [[1,2],[3,4]]:

{% for l in data%}

{% for temp in l % }
{% if forloop.first % }
'{{temp}}',
{% else %}
{{temp}}
{% endif %}
{% endfor %}

{%endfor%}

class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('datepublished')

def__str__(self):
returnself.question_text

class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)

def__str__(self):
returnself.choice_text


上例中,Choice引用了Question作为外键,在模板中通过Question对象获取所有引用了Question对象的Choice对象,可以使用以下方法:

{% for choice in question.choice_set.all %}
<li>{{choice.choice_text}}</li>
{%endfor%}

使用question.choice_set.all的方式获取所有引用question对象的Choice对象实例

HCL AppScan(原名IBM Security AppScan)是原IBM的Rational软件部门的一组网络安全测试和监控工具,2019年被HCL技术公司收购。AppScan旨在在开发过程中对Web应用程序的安全漏洞进行测试。

阅读全文 »

环境信息

  • Centos 7
  • logstash 8.8

一个 Logstash 管道(pipeline) 至少要包含 2 个组件: inputoutput,可以包含可选组件 filter [2]

  • input - 负责从数据源获取数据
  • filter - 负责按照配置修改数据
  • output - 负责将数据写入目标存储,如 Elasticsearch

安装

Logstash 官方安装文档

yum 安装

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

$ cat /etc/yum.repos.d/logstash.repo
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

$ sudo yum install logstash

$ systemctl enable --now logstash

运行 Logstash 后,可以使用最基本的 Logstash Pipeline 测试 Logstash 运行是否正常

/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
  • -e - 选项用来在 command line 中指定配置

运行之后在 shell 中输入内容,Logstash 会为数据添加元数据后输出到 stdout,表明 Logstash 运行正常

hello world
{
"@timestamp" => 2023-07-21T02:52:50.191084777Z,
"host" => {
"hostname" => "worker1"
},
"message" => "hello world",
"@version" => "1",
"event" => {
"original" => "hello world"
}
}

logstash 服务默认端口 5044

阅读全文 »

环境信息

  • elasticsearch 8.8.2

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene [1] 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库 — 无论是开源还是私有。

但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。 [1]

Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。

Elasticsearch 官方安装文档

Elasticsearch 官方安装包下载路径

Elasticsearch 是 面向文档 的,意味着它存储整个对象或 文档。Elasticsearch 不仅存储文档,而且 索引 每个文档的内容,使之可以被检索。在 Elasticsearch 中,我们对文档进行索引、检索、排序和过滤—而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch 能支持复杂全文检索的原因。 [2]

Elasticsearch 使用 JSON 作为文档的序列化格式 [2]

Elasticsearch 集群内的原理

端口说明

elasticsearch 主要使用以下端口

  • 9200 - elasticsearch 服务的监听端口,客户端访问 9200 和 Elasticsearch 进行通信。
  • 9300 - 集群中的节点通过 9300 端口彼此通信,如果这个端口没有开,节点将无法形成一个集群

Elasticsearch 配置文件说明

Elasticsearch 的主要配置文件为,配置文件路径可以用环境变量 ES_PATH_CONF 指定。 [8]

  • elasticsearch.yml
  • jvm.options
  • log4j2.properties

Elasticsearch 已经有了 很好 的默认值,特别是涉及到性能相关的配置或者选项。 如果你有疑问,最好就不要动它。我们已经目睹了数十个因为错误的设置而导致毁灭的集群, 因为它的管理者总认为改动一个配置或者选项就可以带来 100 倍的提升。 [8]

配置文件格式支持 YAML扁平 格式 [8]

YAML 格式示例

YAML
path:
data: /var/lib/elasticsearch
logs: /var/log/elasticsearch

discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com

扁平 格式示例

flattened
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11", "seeds.mydomain.com"]

集群及节点名称

Elasticsearch 默认启动的集群名字叫 elasticsearch生产环境中建议修改集群名称,防止其他使用默认集群名称的节点意外加入集群 [8]

同样,最好也修改你的节点名字。就像你现在可能发现的那样, Elasticsearch 会在节点启动的时候随机给它指定一个名字。你可能会觉得这很有趣,但是当凌晨 3 点钟的时候, 你还在尝试回忆哪台物理机是 Tagak the Leopard Lord 的时候,你就不觉得有趣了。

更重要的是,这些名字是在启动的时候产生的,每次启动节点, 它都会得到一个新的名字。这会使日志变得很混乱,因为所有节点的名称都是不断变化的[8]

elasticsearch.yml
cluster.name: elasticsearch
node.name: elasticsearch_005_data

网络配置

监听接口相关配置

elasticsearch.yml
# 多网卡情况下,建议指定 IP 地址,以防止集群使用网络不通的 IP。#
# 如果需要监听多个 IP 地址,使用以下配置
# network.host: ["127.0.0.1", "192.168.1.1"]
network.host: 0.0.0.0
http.port: 9200

阅读全文 »

策略使用 HCL 或是 JSON 语法编写,描述了一个人类用户或是应用程序允许访问 Vault 中哪些路径。[1]

策略管理

创建策略

命令格式

$ vault policy write policy-name policy-file.hcl

以下示例创建一个只读策略

$ cat readonly_policy.hcl 
path "kv/*" {
capabilities = ["read"]
}

$ vault policy write readonly_policy readonly_policy.hcl


更新策略使用和创建策略一样的命令,使用的是已有的策略名

查看策略

$ vault policy list
default
readonly_policy
root

读取策略内容

$ vault policy read readonly_policy
path "kv/*" {
capabilities = ["read"]
}

关联策略

创建 token 时关联策略

使用以下命令在创建 token 时附加策略,否则创建的 token 默认关联当前身份(如 token)的策略

$ vault token create -policy=readonly_policy -policy=logs

Key Value
--- -----
token hvs.CAESICUghHrXAe3mFG9YEnEq8IXdtGPN-63VRRxqPOEzidpvGh4KHGh2cy5RMUhkbmU1M2FFdk52a3lFRTNiMmR6Um8
token_accessor iRixdShkSeHNTgS5JBLWW2Ta
token_duration 768h
token_renewable true
token_policies ["default" "logs" "readonly_policy"]
identity_policies []
policies ["default" "logs" "readonly_policy"]

关联策略时,如果关联的策略不存在,创建 token 只会给出相关策略不存在的 warnning,创建 token 不会失败

使用新建的 token 登陆并尝试更新相关键

$ vault login
Token (will be hidden):
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

Key Value
--- -----
token hvs.CAESICUghHrXAe3mFG9YEnEq8IXdtGPN-63VRRxqPOEzidpvGh4KHGh2cy5RMUhkbmU1M2FFdk52a3lFRTNiMmR6Um8
token_accessor iRixdShkSeHNTgS5JBLWW2Ta
token_duration 767h55m32s
token_renewable true
token_policies ["default" "logs" "readonly_policy"]
identity_policies []
policies ["default" "logs" "readonly_policy"]

读取键,可以看到只能读取键值,无法写入

$ vault kv list
Not enough arguments (expected 1, got 0)
~/vault_policy $ vault kv list kv
Error listing kv: Error making API request.

URL: GET http://127.0.0.1:8200/v1/kv?list=true
Code: 403. Errors:

* 1 error occurred:
* permission denied


$ vault kv get kv/ms/fm/qzx/qzapp/api/config
===== Data =====
Key Value
--- -----
db_host 127.0.0.1
db_type mysql
db_user password
tk test key


$ vault kv put kv/ms/fm/qzx/qzapp/api/config key=value
Error writing data to kv/ms/fm/qzx/qzapp/api/config: Error making API request.

URL: PUT http://127.0.0.1:8200/v1/kv/ms/fm/qzx/qzapp/api/config
Code: 403. Errors:

* 1 error occurred:
* permission denied

参考链接

Vault 中文参考

脚注

环境信息

  • Centos 7
  • Redis 6

redis Cluster 部署

下载已经编译好的 redis6-cluster 安装文件

wget https://s.csms.tech/redis6-cluster.tar
tar -xf redis6-cluster.tar -C /usr/local/

本示例安装 3 master 3 slave 的 redis cluster,假设使用端口为 7380-7385。数据存放路径为 /data/redis/7380,日志路径为 /data/logs/redis-cluster/7380/,其他端口的 redis 服务配置以此类推,主要是修改对应端口。

创建服务启动需要的数据目录及日志目录

for i in 1 2 3 4 5 0 ; do mkdir -p /data/redis/738${i} ; done

for i in 1 2 3 4 5 0 ; do mkdir -p /data/logs/redis-cluster/738${i} ; done

7380 服务使用如下配置文件

7380.conf
bind 0.0.0.0
protected-mode no
port 7380
tcp-backlog 511
timeout 600
tcp-keepalive 60
daemonize yes
supervised no
pidfile /var/run/redis_7380.pid
loglevel notice
logfile /data/logs/redis-cluster/7380/redis.log
databases 16
always-show-logo yes
save ""
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis/7380
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass redisPassword
masterauth redisPassword
maxclients 30000
maxmemory-policy volatile-lru
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes
cluster-node-timeout 5000
cluster-require-full-coverage no
slowlog-log-slower-than 3000
slowlog-max-len 200
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 0 0 0
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

若要根据以上 7380 端口的服务配置文件复制出其他服务端口的配置文件,可以参考以下命令

cp 7380.conf 7381.conf
sed -i 's/7380/7381/g' 7381.conf

cp 7380.conf 7382.conf
sed -i 's/7380/7382/g' 7382.conf

分别启动服务(7380-7385)

/usr/local/redis6-cluster/src/redis-server /usr/local/redis6-cluster/7380.conf

阅读全文 »

环境信息

  • Kubernetes 1.24
  • Vault 1.14.0

kv

Key/Value 机密引擎是一个通用的键值存储,用于在 Vault 使用的物理存储中存储任意秘密。该后端可以以两种模式之一运行 [1]

  • kv v1 - 可以将其配置为存储密钥的单个值,只有最近写入的值会被保存下来
  • kv v2 - 开启版本控制并存储每个键的一定数量版本的值。默认保留 10 个版本的值。

kv Version 1

Version 1 的 KV Secret Engine 相比 v2 版本,有以下限制:

  • 不能使用 vault kvmetadatapatch 命令
  • 使用 vault kv put 写入的值会覆盖之前的内容,即只保存了最后一次写入的值。

启用 version 1 的 kv 存储,没有 -version 选项时默认开启 version 1 版本的 kv:

$ vault secrets enable -version=1 kv

与其他 Secret Engine 不同,kv 机密引擎不会强制执行 TTL 过期。即使设置了 ttl,kv Secret Engine 也不会自行删除数据。 [1]

写入数据

$ vault kv put kv/mycorp/mydepartment/myproject/myapp/myapp-api/config db_type=mysql
Success! Data written to: kv/mycorp/mydepartment/myproject/myapp/myapp-api/config

$ vault kv put kv/mycorp/mydepartment/myproject/myapp/myapp-api/config db_host=127.0.0.1
Success! Data written to: kv/mycorp/mydepartment/myproject/myapp/myapp-api/config

$ vault kv put kv/mycorp/mydepartment/myproject/myapp/myapp-api/config db_port=3306
Success! Data written to: kv/mycorp/mydepartment/myproject/myapp/myapp-api/config

列出键

$ vault secrets list
Path Type Accessor Description
---- ---- -------- -----------
cubbyhole/ cubbyhole cubbyhole_e5c17df6 per-token private secret storage
identity/ identity identity_f0404cf8 identity store
kv/ kv kv_618be90b n/a
sys/ system system_053aea79 system endpoints used for control, policy and debugging
transit/ transit transit_aaaaf63d n/a


$ vault kv list kv
Keys
----
mycorp/

$ vault kv list kv/mycorp
Keys
----
mydepartment/

$ vault kv list kv/mycorp/mydepartment
Keys
----
myproject/

$ vault kv list kv/mycorp/mydepartment/myproject/myapp/myapp-api
Keys
----
config

$ vault kv list kv/mycorp/mydepartment/myproject/myapp/myapp-api/config
No value found at kv/mycorp/mydepartment/myproject/myapp/myapp-api/config

读取键值

$ vault kv get kv/mycorp/mydepartment/myproject/myapp/myapp-api/config
===== Data =====
Key Value
--- -----
db_port 3306

以上输出中,键 kv/mycorp/mydepartment/myproject/myapp/myapp-api/config 的内容为 db_port=3306,之前写入的其他数据被覆盖,只保留有最后一个写入

删除键

$ vault kv delete kv/mycorp/mydepartment/myproject/myapp/myapp-api/config
Success! Data deleted (if it existed) at: kv/mycorp/mydepartment/myproject/myapp/myapp-api/config

$ vault kv get kv/mycorp/mydepartment/myproject/myapp/myapp-api/config
No value found at kv/mycorp/mydepartment/myproject/myapp/myapp-api/config

阅读全文 »

Policy

Vault 模拟了一个文件系统,Vault 中的所有信息,包括 Secret、配置等,都是依照各自的路径来使用和授权的。 [1]

使用 Vault 策略,可以使用声明式的语法来赋予或者禁止对特定路径的特定操作。Vault 策略默认情况下拒绝一切访问,所以一个空的策略不会赋予对系统的任何访问权限。 [1]

身份认证及授权流程

策略语法

策略使用 HCL 或者 Json 语法编写,描述了一个人或者应用程序允许访问 Vault 中的哪些路径 [1]

参考链接

Vault 中文参考手册-策略

脚注

环境信息

  • centos7 5.4.212-1.el7
  • kubernetes Server Version: v1.25.0
  • Helm 3.10.0

安装

  1. 下载 需要的版本

    wget https://get.helm.sh/helm-v3.10.0-linux-amd64.tar.gz
  2. 解压

    tar -xf helm-v3.10.0-linux-amd64.tar.gz
  3. 在解压目中找到 helm 程序,移动到需要的目录中

    cp linux-amd64/helm /usr/local/bin/
  4. 验证

    $ helm version
    version.BuildInfo{Version:"v3.10.0", GitCommit:"ce66412a723e4d89555dc67217607c6579ffcb21", GitTreeState:"clean", GoVersion:"go1.18.6"}

常见用法

查看已安装的 release

helm ls

helm ls -A

卸载

$ helm ls -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
cert-manager cert-manager 1 2022-11-01 09:57:11.373366484 +0800 CST failed cert-manager-v1.7.1 v1.7.1
rancher cattle-system 1 2022-11-01 10:05:07.370131566 +0800 CST failed rancher-2.6.9 v2.6.9

$ helm uninstall rancher -n cattle-system
W1101 10:21:32.764269 11113 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W1101 10:21:34.043445 11113 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W1101 10:21:39.809766 11113 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
release "rancher" uninstalled

查看导入的 repo

$ helm repo ls
NAME URL
rancher-stable https://releases.rancher.com/server-charts/stable
jetstack https://charts.jetstack.io
hashicorp https://helm.releases.hashicorp.com

搜索/查看可用的 repo

$ helm search repo hashicorp/vault
NAME CHART VERSION APP VERSION DESCRIPTION
hashicorp/vault 0.25.0 1.14.0 Official HashiCorp Vault Chart
hashicorp/vault-secrets-operator 0.1.0 0.1.0 Official Vault Secrets Operator Chart

查看可用的 releases

$ helm search repo hashicorp/vault -l
NAME CHART VERSION APP VERSION DESCRIPTION
hashicorp/vault 0.25.0 1.14.0 Official HashiCorp Vault Chart
hashicorp/vault 0.24.1 1.13.1 Official HashiCorp Vault Chart
hashicorp/vault 0.24.0 1.13.1 Official HashiCorp Vault Chart
hashicorp/vault 0.23.0 1.12.1 Official HashiCorp Vault Chart
hashicorp/vault 0.22.1 1.12.0 Official HashiCorp Vault Chart
hashicorp/vault 0.22.0 1.11.3 Official HashiCorp Vault Chart

安装

$ helm install vault hashicorp/vault --version 0.25.0
NAME: vault
LAST DEPLOYED: Mon Jul 10 14:59:13 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
Thank you for installing HashiCorp Vault!

Now that you have deployed Vault, you should look over the docs on using
Vault with Kubernetes available here:

https://www.vaultproject.io/docs/


Your release is named vault. To learn more about the release, try:

$ helm status vault
$ helm get manifest vault