在minio中开启https访问以及使用rclone备份minio桶

背景和环境

根据上一篇文章搭建好了Choerodon,启动的Minio文件服务使用docker安装,文件存储在本地属于单点存储,具有数据丢失的风险。现在需要对minio存储的文件进行备份到另外一台机器,通过调研决定使用rclone进行备份。在实际操作中发现rclone需要让minio开启https访问。以下是使用的相关组件及其版本信息:

minio:RELEASE.2020-01-03T19-12-21Z

rclone:v1.51.0

minio开启https

自签证书

#1 生成服务器端私钥
openssl genrsa -out server.key 2048
#2 生成服务器端公钥
openssl rsa -in server.key -pubout -out server.pem

# 生成CA证书
#3 生成 CA 私钥
openssl genrsa -out ca.key 2048
#4
openssl req -new -key ca.key -out ca.csr
#5 生成CA证书
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -days 3650

# 生成服务器证书
#6 服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件
openssl req -new -key server.key -out server.csr
#7 向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt -d
#8 生成cer文件 使用openssl 进行转换
openssl x509 -in server.crt -out server.cer -outform der -days 3650

ycyin大约 3 分钟云原生miniorclone
在多机Docker环境下部署Choerodon的解决方案

背景

我们的Choerodon部署在测试网段的K8S中,现在需要给另一部门在办公网部署一套Choerodon的敏捷管理模块。 首先为了减少在在Docker中部署与在k8s中部署Choerodon(SpringCloud)微服务项目的差异性,我们选择使用docker-compose来部署,这样微服务之间仍然可以使用服务名进行互相访问。 由于只给了两台8C16G的机器,我们先是将需要存储空间的基础组件(MySQL、Redis和MinIO)部署在其中一台带有1T硬盘机器, 其它Choerodon的微服务使用docker-compose部署在另外一台机器上,这样在docker-compose中只需要为每一个service指定一个相同的type:bridge桥接网络就可以互通了。 但是后来发现,所有的微服务部署在一台机器上内存不够用,需要将两台机器的Docker网络打通进行部署。


ycyin大约 9 分钟云原生DockerChoerodon
Prometheus中Monitor添加对SpringBoot Actuator的Basic认证

背景

一般地,我们使用Prometheus对SpringBoot应用进行监控时,没有做任何认证,监控接口是完全开放的,我们直接访问暴露出来的指标接口http://localhost:8081/actuator/prometheus就可以拿到指标接口,这在某些程度上不安全。。

我们需要给我们的监控指标接口添加一个Base认证。

应用添加Basic认证

我这里是SpringBoot2.3.9版本,在添加spring-boot-starter-actuator和micrometer-registry-prometheus做指标暴露外,还在此基础之上还需要添加spring-boot-starter-security包。


ycyin大约 3 分钟云原生PrometheusSpring Boot
在Nginx的容器镜像中隐藏Nginx的Server响应头

背景

前端应用部署在K8s中,Nginx以容器的方式运行。由于一些安全因素,我们需要将Nginx返回的响应头中Server隐藏掉不让访问者知道我们的服务器信息(包括服务器类型和版本号)。

方案

对于隐藏版本号,我们可以在配置文件中,http区段中插入server_tokens off;后重新载入配置文件即可实现。

对于隐藏服务类型,目前了解到有两种方案:方案一是修改源码,重新编译Nginx;方案二是加载headers-more-nginx-module这个模块。因为我们是在容器中运行的Nginx,所以我们考虑方案二更为简单。


ycyin大约 3 分钟云原生DockerNginx
Grafana中的邮件报警和截图插件grafana-image-enderer

Grafana Image Renderer是一个 Grafana 后端插件,它使用无头浏览器 (Chromium) 将面板和仪表板渲染为 PNG。比如下面的邮件通知,Include image功能则需要这个插件。

本文中的Grafana在Docker容器中运行,用的Grafana7和Grafana8.5的镜像都实验了,如果是二进制本地化安装可能很多经验不适用。

本文将在Grafana的邮件报警通知,Grafana容器中安装grafana-image-renderer插件独立运行grafana-image-renderer插件镜像作为远程服务,遇到的坑这几个方便做个记录。


ycyin大约 5 分钟云原生k8s
K8s中跨命名空间(NameSpace)服务调用探索

我们都知道在k8s中,NameSpace是资源隔离的,那如何在命名空间A中调用B中的服务呢?

先说答案:第一种方式:在NameSpace A中创建无Selecter选择运算符的Service,然后手动创建EndPoints指向NameSpace B中的Service IP。或者第二种方式使用ExternalName 类型的Service

其实原理很简单,和我们创建平时创建普通Service一样:创建Service时一般会使用selecter选择Pod,会创建一个与Serivce同名EndPoints去调用Pod,使用kubectl get endpoints -n ns xxx -o yaml可以看到在EndPoints中指定了Pod Ip和端口。


ycyin大约 3 分钟云原生k8s
K8s中flexvolume插件驱动的安装

K8s中flexvolume插件驱动的安装只需要将对应驱动文件放到对应宿主机目录下,k8s 1.17及其之前需要重启kubelet组件生效

二进制集群环境默认路径:/usr/libexec/kubernetes/kubelet-plugins/volume/exec/<vendor~driver>/

Rancher集群环境默认路径:/var/lib/kubelet/volumeplugins/<vendor~driver>/

Install the vendor driver on all nodes (also on master nodes if "--enable-controller-attach-detach" Kubelet option is enabled) in the plugin path. Path for installing the plugin: <plugindir>/<vendor~driver>/<driver>. The default plugin directory is /usr/libexec/kubernetes/kubelet-plugins/volume/exec/. It can be changed in kubelet via the --volume-plugin-dir flag, and in controller manager via the --flex-volume-plugin-dir flag.

For example to add a cifs driver, by vendor foo install the driver at: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/foo~cifs/cifs

The vendor and driver names must match flexVolume.driver in the volume spec, with '~' replaced with '/'. For example, if flexVolume.driver is set to foo/cifs, then the vendor is foo, and driver is cifs.


ycyin小于 1 分钟云原生k8scoredns
2