当前位置: 首页 > news >正文

通过ca证书的方式设置允许远程访问Docker服务


设置允许远程访问Docker服务

使用场景

环境

系统:anolis7.9

修改Docker服务配置,配置安全证书

生成ca证书到/etc/docker目录中,后续会要用到

#该步骤需要设置密码,后面步骤会要用到,此处设置密码为123456
openssl genrsa -aes256 -passout "pass:123456" -out /etc/docker/ca-key.pem 4096
#该步骤需要用到ca-key.pem生成时设置的密码,并录入国家、省、市、组织名称、单位名称等信息
openssl req -new -x509 -days 365 -key /etc/docker/ca-key.pem -sha256 -out /etc/docker/ca.pem -passin "pass:123456"  -subj "/C=cn/ST=STATE/L=CITY/O=ORGANIZATION/OU=ORGANIZATIONAL_UNIT/CN=COMMON_NAME/emailAddress=EMAIL@123.com"openssl genrsa -out /etc/docker/server-key.pem 4096
openssl req -subj "/CN=Docker服务器ip或者域名" -sha256 -new -key /etc/docker/server-key.pem -out /etc/docker/server.csr
echo "subjectAltName = IP:服务器ip,IP:127.0.0.1" >> extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf
#该步骤需要用到ca-key.pem生成时设置的密码
openssl x509 -req -days 365 -sha256 -in /etc/docker/server.csr -passin "pass:123456" -CA /etc/docker/ca.pem -CAkey /etc/docker/ca-key.pem -CAcreateserial -out /etc/docker/server-cert.pem -extfile extfile.cnf
#删除extfile.cnf
rm -f extfile.cnf
# 创建客户端私钥
openssl genrsa -out key.pem 4096
# 创建客户端签名请求证书文件
openssl req -subj '/CN=client' -sha256 -new -key /etc/docker/key.pem -out /etc/docker/client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
# 创建签名生效的客户端证书文件
openssl x509 -req -days 365 -sha256 -in /etc/docker/client.csr -passin "pass:123456" -CA /etc/docker/ca.pem -CAkey /etc/docker/ca-key.pem -CAcreateserial -out /etc/docker/cert.pem -extfile extfile.cnf
#删除extfile.cnf
rm -f extfile.cnf
#文件赋权【非必要操作,可以视情况执行】
chmod -v 0400 "ca-key.pem" "key.pem" "server-key.pem"
chmod -v 0444 "ca.pem" "server-cert.pem" "cert.pem"

修改Docker系统文件

vim /lib/systemd/system/docker.service

修改配置,开放2375端口供客户端访问,并配置证书
原配置如下

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target rhel-push-plugin.service registries.service
Wants=docker-storage-setup.service
Requires=rhel-push-plugin.service registries.service
Requires=docker-cleanup.timer[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \--default-runtime=docker-runc \--authorization-plugin=rhel-push-plugin \--exec-opt native.cgroupdriver=systemd \--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \--init-path=/usr/libexec/docker/docker-init-current \--seccomp-profile=/etc/docker/seccomp.json \$OPTIONS \$DOCKER_STORAGE_OPTIONS \$DOCKER_NETWORK_OPTIONS \$ADD_REGISTRY \$BLOCK_REGISTRY \$INSECURE_REGISTRY \$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process[Install]
WantedBy=multi-user.target

修改后如下

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target rhel-push-plugin.service registries.service
Wants=docker-storage-setup.service
Requires=rhel-push-plugin.service registries.service
Requires=docker-cleanup.timer[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \--tlsverify \--tlscacert=/etc/docker/ca.pem \--tlscert=/etc/docker/server-cert.pem \--tlskey=/etc/docker/server-key.pem \-H tcp://0.0.0.0:2375 \--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \--default-runtime=docker-runc \--authorization-plugin=rhel-push-plugin \--exec-opt native.cgroupdriver=systemd \--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \--init-path=/usr/libexec/docker/docker-init-current \--seccomp-profile=/etc/docker/seccomp.json \$OPTIONS \$DOCKER_STORAGE_OPTIONS \$DOCKER_NETWORK_OPTIONS \$ADD_REGISTRY \$BLOCK_REGISTRY \$INSECURE_REGISTRY \$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process[Install]
WantedBy=multi-user.target

然后保存文件,并重新加载Docker

systemctl daemon-reload
systemctl restart docker

此时,即可从其他服务器访问Docker服务了。需要注意的是如果Docker服务器防火墙管控严格的话,可能需要额外开放一下2375端口的防火墙。

验证

/etc/docker目录下下载ca.pem``````cert.pem``````key.pem三个证书文件,使用curl --cert /etc/docker/cert.pem --key /etc/docker/key.pem --cacert /etc/docker/ca.pem https://ip:2375/version 命令进行验证

然后也可以通过浏览器直接访问https://docker服务器的ip:2375/version查看Docker版本,来验证当没有证书时是否能正常访问Docker服务。

http://www.xdnf.cn/news/869995.html

相关文章:

  • 吴恩达机器学习讲义概述
  • 在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生
  • 哈希表入门:用 C 语言实现简单哈希表(开放寻址法解决冲突)
  • 9.RV1126-OPENCV 视频的膨胀和腐蚀
  • 基于windows系统的netcore架构与SqlServer数据库,实现双机热备。
  • 基于javaweb的SpringBoot公司日常考勤系统设计与实现(源码+文档+部署讲解)
  • 新手小白深入 BCI:实践与进阶(下)
  • 函数调用(Function Calling)
  • 子网划分例题
  • 【Git 合并冲突解决记录:从 “refusing to merge unrelated histories“ 到批量冲突处理】
  • 《高等数学》(同济大学·第7版)第一章第七节无穷小的比较
  • leetcode题解236:二叉树的最近公共祖先
  • 多层感知器MLP实现非线性分类(原理)
  • UDP包大小与丢包率的关系:原理分析与优化实践
  • 语法--06-- 简单句五大形式、系动词
  • Qwen2.5-VL - Vision Transformer(ViT)的patch 处理
  • 固定资产管理系统 ——仙盟创梦IDE
  • 华为云Flexus+DeepSeek征文|实战体验云服务器单机部署和CCE高可用的架构AI赋能
  • Android studio初体验
  • Android Studio 打包时遇到了签名报错问题:Invalid keystore format
  • Excel高级函数使用FILTER、UNIQUE、INDEX
  • 【产品业务设计】支付业务设计规范细节记录,含订单记录、支付业务记录、支付流水记录、退款业务记录
  • DeepSeek 赋能金融衍生品:定价与风险管理的智能革命
  • 3.3 HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战
  • k8s集群安装坑点汇总
  • 02-Redis常见命令
  • 智慧城市建设方案
  • git操作指南
  • git引用概念(git reference,git ref)(简化对复杂SHA-1哈希值的管理)(分支引用、标签引用、HEAD引用、远程引用、特殊引用)
  • SSM 框架核心知识详解(Spring + SpringMVC + MyBatis)