Portainer.io安装并配置Docker远程访问及CA证书

2024-06-23 00:36

本文主要是介绍Portainer.io安装并配置Docker远程访问及CA证书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Portainer.io安装并配置Docker远程访问及CA证书

文章目录

    • Portainer.io安装并配置Docker远程访问及CA证书
      • 一.安装 Portainer.io
        • 2.启动容器
      • 二.docker API远程访问并配置CA安全认证
        • 1.配置安全(密钥)访问
        • 2.补全CA证书信息
        • 3.生成server-key.pem
        • 4.创建服务端签名请求证书文件
        • 5.创建服务端扩展配置文件 extfile.cnf
        • 6.创建签名生效的服务端证书文件
        • 7.创建客户端私钥
        • 8.创建客户端签名请求证书文件
        • 7.创建客户端扩展配置文件 extfile-client.cnf
        • 8.创建签名生效的客户端证书文件
        • 9.删除临时文件
        • 10.设置文件权限
        • 11.配置docker服务端
      • 三.Portainer配置使用客户端证书

一.安装 Portainer.io

version: '3.3'
services:portainer:image: portainer/portainer-ce:latestcontainer_name: portainerports:- "8000:8000"- "9443:9443"- "9000:9000"restart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.sock- ./portainer_data:/data
2.启动容器
docker-compose up -d 

查看是否启动成功

docker ps -a | grep portainer

image-20240620103924858

查看日志

docker logs -f portainer

image-20240620104856162

在浏览器输入我们部署服务的ip:port 访问服务,第一次访问需要设置管理员密码。

访问地址:http://<your ip>:9000

登陆之后就是这样

image-20240620105015316

二.docker API远程访问并配置CA安全认证

1.配置安全(密钥)访问

创建CA私钥和CA公钥
创建一个ca文件夹用来存放私钥跟公钥

mkdir -p /usr/local/ca
cd /usr/local/ca

在Docker本机,生成CA私钥和公钥

openssl genrsa -aes256 -out ca-key.pem 4096

执行上述指令,会输入密码。此密码需记住,后面的步骤也需要。

image-20240620112406300

可以看到已经生成ca-key.pem证书文件

image-20240620112554479

2.补全CA证书信息
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

不切换目录,继续执行上述指令,会要求录入信息。

#输入上一步设置的密码
Enter pass phrase for ca-key.pem:You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
# 国家:CN
Country Name (2 letter code) [XX]: CN
# 省份: 可以不填,直接回车
State or Province Name (full name) []:
# 地市:可以不填,直接回车
Locality Name (eg, city) [Default City]:
# 公司: 可以不填,直接回车
Organization Name (eg, company) [Default Company Ltd]:
# 组织: 可以不填,直接回车
Organizational Unit Name (eg, section) []:
# 服务器地址或域名,按要求填写
Common Name (eg, your name or your server's hostname) []:  <主机IP>
# 邮箱联系方式,可以不填,直接回车
Email Address []:

到这一步CA证书就创建完成了,还需要去创建服务器密钥和证书签名请求(CSR),确保“通用名称”与Docker时使用的主机名相匹配。

3.生成server-key.pem
openssl genrsa -out server-key.pem 4096
4.创建服务端签名请求证书文件
openssl req -subj "/CN=$<主机ip>" -sha256 -new -key server-key.pem -out server.csr
5.创建服务端扩展配置文件 extfile.cnf
echo "subjectAltName = IP:$<主机ip>,IP:0.0.0.0" > extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf
6.创建签名生效的服务端证书文件

输入之前的密码

openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

image-20240620115930339

7.创建客户端私钥
openssl genrsa -out key.pem 4096
8.创建客户端签名请求证书文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
7.创建客户端扩展配置文件 extfile-client.cnf
echo "extendedKeyUsage = clientAuth" > extfile-client.cnf
8.创建签名生效的客户端证书文件
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf

输入密码。

9.删除临时文件
rm -f client.csr server.csr extfile.cnf extfile-client.cnf
10.设置文件权限
chmod 0400 ca-key.pem key.pem server-key.pem
chmod 0444 ca.pem server-cert.pem cert.pem
11.配置docker服务端

修改vim /lib/systemd/system/docker.service文件中的ExecStart这一行,如下:

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca-new-1/ca.pem --tlscert=/usr/local/ca-new-1/server-cert.pem --tlskey=/usr/local/ca-new-1/server-key.pem  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock

其中/usr/local/ca-new-1/是刚才生产证书的目录。

修改之后重启docker服务

#重启
systemctl daemon-reload && systemctl restart docker

三.Portainer配置使用客户端证书

访问Portainer.io

image-20240622141105867

image-20240622141123973

image-20240622141220870

此处的Docker API URL是二.11步骤中的,-H tcp://0.0.0.0:2375这一段代码配置的端口号,ip则是主机IP。

然后需要从服务器上下载生成的ca文件。

-r--r--r--  1 root root 1952 Jun 20 11:11 ca.pem
-r--r--r--  1 root root 1883 Jun 20 11:12 cert.pem
-r--------  1 root root 3268 Jun 20 11:12 key.pem

然后依次对应上图配置中的

image-20240622141525548

配好之后点击如下按钮

image-20240622141630013

显示连接成功则表示已经配好,然后就可以在Portainer中看到目标主机的docker信息了

image-20240622141934836

以下是一个快速生成ca证书的脚本

#!/bin/ship="<your ip>"
password="123456"
dir="/usr/local/ca-new-1" # 证书生成位置
validity_period=3650    # 证书有效期10年,单位是天# 如果目录不存在则创建目录,否则删除重建
if [ ! -d "$dir" ]; thenecho "$dir 不存在,将创建目录"mkdir -p $dir
elseecho "$dir 存在,将删除并重建"rm -rf $dirmkdir -p $dir
ficd $dir || exit# 1. 创建根证书 RSA 私钥
openssl genrsa -aes256 -passout pass:"$password" -out ca-key.pem 4096# 2. 创建 CA 证书
openssl req -new -x509 -days $validity_period -key ca-key.pem -passin pass:"$password" -sha256 -out ca.pem -subj "/C=NL/ST=./L=./O=./CN=$ip"# 3. 创建服务端私钥
openssl genrsa -out server-key.pem 4096# 4. 创建服务端签名请求证书文件
openssl req -subj "/CN=$ip" -sha256 -new -key server-key.pem -out server.csr# 创建服务端扩展配置文件 extfile.cnf
echo "subjectAltName = IP:$ip,IP:0.0.0.0" > extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf# 5. 创建签名生效的服务端证书文件
openssl x509 -req -days $validity_period -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out server-cert.pem -extfile extfile.cnf# 6. 创建客户端私钥
openssl genrsa -out key.pem 4096# 7. 创建客户端签名请求证书文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr# 创建客户端扩展配置文件 extfile-client.cnf
echo "extendedKeyUsage = clientAuth" > extfile-client.cnf# 8. 创建签名生效的客户端证书文件
openssl x509 -req -days $validity_period -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out cert.pem -extfile extfile-client.cnf# 删除临时文件
rm -f client.csr server.csr extfile.cnf extfile-client.cnf# 设置文件权限
chmod 0400 ca-key.pem key.pem server-key.pem
chmod 0444 ca.pem server-cert.pem cert.pemecho "证书生成完成"

这篇关于Portainer.io安装并配置Docker远程访问及CA证书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085844

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问